Az áthatolhatatlan kód egy számítógépes program van kód , hogy nagyon nehéz egy emberi megérteni miközben tökéletesen kompilálható egy számítógép.
A kódot áthatolhatatlanná tevő folyamatot titkosításnak vagy offuscationnak nevezzük . Ennek a programozási technikának - amely ellentmond a szokásos használatnak - megvannak a maga oka.
Ez mindenekelőtt a szoftverfejlesztési beruházások objektumkód- előállító technikák általi védelmének eszköze, amely megnehezíti a fordított mérnöki munkát . Különösen az azonosítók és emlékeztetők nem jelentős címkékkel történő cseréjéből áll.
Ez néhány programozó számára is hobbi. Ez a hobbi a forráskód írásából áll, amelynek funkcióját nehéz meghatározni. Az olvashatatlan szintaxis , a szemantikai sajátosságok kevéssé ismert vagy nem nagyon ajánlott a használt nyelv vagy a természetellenes algoritmusok használata számos elhomályosítási technika.
Az elfedés első formája a program terjesztésére létrehozott objektumkódra vonatkozik , míg a második a forráskódra vonatkozik .
Vannak olyan programok, amelyek kiküszöbölik az összes program megjegyzését egy forrásprogramból, és kicserélik az összes címkét (például LOOP, REPEAT, ERROR kevésbé értelmes kifejezésekkel (ETI00001, ETI00002, ETI00003, sőt O, 0, I és 1 keverékei is megnehezítik őket) megkülönböztetni az emberi olvasót anélkül, hogy a legkisebb mértékben is megbüntetné az összeszerelési programot).
Egy még változatosabb változat abban áll, hogy a megjegyzéseket olyan információkkal helyettesítik, amelyek semmit sem hoznak .
Például :
LR 15,=X'0F' ; On charge X'0F' dans le registre 15A Turbo Pascal 3 ( kb. 1985) idején volt egy olyan program, amely eltávolította az összes nem jelentős helyet a forráskódból, soronként 255 karakterre csomagolta, és az összes váltót l (kis L betű) kombinációval cserélte le. (1. szám), O (O tőke) és 0 (0. szám). Például A: = B + C vált l0O1l10O: = O1ll10O0 + O0O1l00ll . Ezeknek az elkövetőknek az igénye abból adódott, hogy a Turbo Pascal 3 csak forráskódként engedélyezte az alprogramok terjesztését.
Az 1960-as és 1970-es években a legtöbb gyártó PL típusú nyelveket használt fejlesztéseihez ( PL / 360 , PL / M, PL / C, PL / S, PL / 1600 stb.), Amelyek félig fejlett forráskódot fordítottak le Összeszerelőben. Mivel az alkalmazások csak abban az időben voltak eladhatók, ha rendelkezésre állt a forráskódjuk, éppen ezt a generált összeállítási kódot tették elérhetővé az ügyfelek számára. Tehát olyan utasítás, mint A = B + 31; lett:
LR 4,B ADD 4,=31 ST 4,AAz a verzió, amelyet az ügyfél kevésbé hajlandó módosítani, főleg, hogy a következő verzió megkövetelte volna, hogy az összes módosítást újra elkészítse. Az elsődleges cél kevésbé az volt, hogy elrejtse a forráskódot, mint hogy korlátozza az ügyfelek általi programok módosítását, a szerkesztők távoli karbantartása nehezebb a módosított programok számára.
Bár kezdetleges, a Batch nyelv ( MSDOS ) is bonyolultabbá teszi a kódot, ami megnehezíti a programok megértését. A "Set" utasítás az egyenértékűség meghatározására szolgál. Például: Állítsa be az A = B értéket. Ekkor lehetőség van A helyett B helyett úgy, hogy két "%" szimbólum között meghívja A-t. Példa:% A%. Érdekessé válik, ha egy valós utasítást helyettesítünk egy komplex karakterlánccal.
Példa: #A = Dir beállítása
A% # A% használata így meghívja a "Dir" parancsot. A rendszert a legvégsőkig vihetjük, ha a Set parancsot ekvivalenciával helyettesítjük, és ezzel az ekvivalenciával új utasításokat kódolunk.
Példa:
Set ¯=Set%þ% %¯% ð=If Exist%þ% %¯% =Echo%þ% ...//... %% þAkhenatonþ>>%2 %ð% î%2 %Þ% F%þ% Ren %2 î%2%þ% %% @%% Off>%2%þ% Find "þ"<%ê%>>%2 %% %ð% î%2 %Þ% E>>%2%þ%Ezt a kódmaszkolási technikát egyes számítógépes vírusok (Akhenaton, Catlord stb.) Használják, amelyeket a Batch kódol . Ezek a vírusok kezdetlegesek és ritkák, de az az érdemük, hogy tudják, hogyan lehet kihasználni egy olyan primitív nyelv hibáit, mint a Batch, és így elfedni a víruskódjukat.
Az összes nyelvre érvényes klasszikus technikák mellett a Fortran-kód elhomályosítása úgy érhető el, hogy eltávolítunk minden szóközt (beleértve a nyelvi kulcsszó és a változó neve között is), és ha egy névhez különböző neveket használunk. kódot az EQUIVALENCE vagy a COMMON segítségével.
Az n hosszúságú húr egyenlő részstruktúrákra történő felosztása bizonyítja, hogy n nem prím (ha n ≠ 2). Ezért egy reguláris kifejezés használata ilyen teszthez lehetséges, bár természetellenes és meglehetősen lassú. A koncepció igazolását Perl-ben írták.
Az elfedés speciális formája egy többnyelvű program, amely ugyanazt csinálja, ha különböző tolmácsok vagy fordítók hajtják végre . Van tehát egy program, amelyet Perl közömbösen értelmez, és C-ben állít össze, és amely ráadásul ez az egyetlen érdekesség.
Az elhomályosítás gyakran a nyelv kevéssé használt zugait használja, és néha segíthet a hibák felderítésében .
Az IOCCC ( International Obfuscated C Code Contest ) az éves C obfuscation verseny, a
Perl Journal Perl obfuscation versenyeket rendezett.
Egyes JAPH- k homályok .
Egyes nyelvek, például a C , a Perl és az APL , nagyon jól alkalmazzák a homályosodást. A The Humble programozó , Edsger Dijkstra nagyon durva szavak a gazdag nyelv, amely alkalmas arra, hogy az ilyen technikák és támogatja szerényebb nyelven. Larry Wall szerint azonban az a nyelv, amely megpróbálja megtiltani az olyan rossz gyakorlatokat, mint az elfedés, megakadályozná az olyan legitim programok írását is, mint az uniline .