Elhomályosítás (szoftver)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2019. február 10-én felülvizsgált verziótól ; az ellenőrzések 19 szerkesztést igényelnek .

Obfuszkáció ( latin  obfuscare  - homályos, homályos; és angol  obfuscate -  nem nyilvánvaló, zavaró, zavaró) vagy kód obfuszkáció  - a program forráskódjának vagy végrehajtható kódjának olyan formába hozása, amely megőrzi a funkcionalitását, de teszi azt nehéz elemezni, megérteni a munka és a dekompiláció során történő módosítás algoritmusait .

A kód "elzavarása" végrehajtható mind a programkomponensek nevei, mind a programalgoritmusok szintjén . Obfuszkált assembler szövegek létrehozásához speciális fordítók használhatók, amelyek a programvégrehajtási környezet nem nyilvánvaló vagy nem dokumentált szolgáltatásait használják . Vannak speciális programok is, amelyek obfuszkációt generálnak, ezeket obfuszkátoroknak nevezik ( eng. obfuscator ).  

Elhomályosodási célok

Nehézségek a programok visszafordításában / hibakeresésében és vizsgálatában a funkcionalitás felfedezése érdekében;

A védett szoftver visszafordításának nehézségei a DRM és licencellenőrző rendszerek visszafejtésének vagy megkerülésének megakadályozása érdekében ;

Szoftver feltörésének nehézségei ;

A program optimalizálása a futó kód méretének csökkentése és (ha nem lefordított nyelv használata esetén) a munka felgyorsítása érdekében;

A nyelv nem nyilvánvaló lehetőségeinek és a programozó képzettségének bemutatása (ha kézzel, és nem eszközökkel történik);

Technológia

A forrás szintjén

JavaScriptben , VBScriptben és hasonló szkriptnyelvekben a program forráskódja elérhető a felhasználó számára . Ebben az esetben a szöveg formázása és a nevek cseréje kevésbé olvashatóvá teheti a szöveget.

Forrásszöveg C nyelven :

int COUNT = 100 ; float TAX_RATE = 0,2 ; for ( int i = 0 ; i < COUNT ; i ++ ) { adó [ i ] = eredeti ár [ i ] * TAX_RATE ; ár [ i ] = eredeti_ár [ i ] + adó [ i ]; }

Kód a homályosítás után [1] :

for ( int a = 0 ; a < 100 ; a ++ ) { b [ a ] ​​= c [ a ] ​​* 0,2 ; d [ a ] ​​= c [ a ] ​​+ b [ a ];}

Bonyolultabb példa:

char * M , A , Z , E = 40 , J [ 40 ], T [ 40 ]; main ( C ){ for ( * J = A = scanf ( M = "%d" , & C ); --E ; _ J [ E ] = T [ E ] = E ) printf ( "._" ); for (;( A -= Z =! Z ) || ( printf ( " \n |" ) , A = 39 , C -- ) ; Z || printf ( M )) M [ Z ] = Z [ A - ( E = A [ J - Z ]) &&! C & A == T [ A ] | 6 << 27 < rand () ||! C &! Z ? J [ T [ E ] = T [ A ]] = E , J [ T [ A ] = A - Z ] = A , "_." : "|" ];}

Gépi kód szinten

Általános szabály, hogy a gépi kód szintjén történő obfuszkálás csökkenti a végrehajtás sebességét, és ennek megfelelően megnöveli a program végrehajtási idejét. Ezért a program biztonságkritikus , de nem sebességkritikus helyein használják, például a regisztrációs kód ellenőrzésekor [2] .

A gépi kód elhomályosításának legegyszerűbb módja  inaktív konstrukciók beszúrása (például or ax, ax).

Köztes kódszinten

Ellentétben a hagyományos programozási nyelvekkel, mint például a gépi kódra fordító C++ vagy Pascal , a Java nyelv , a NetP és a .NET platformnyelvek a forráskódot köztes kódba ( bytecode ) fordítják, amely elegendő információt tartalmaz a forráskód megfelelő rekonstruálásához. Emiatt ezeknél a nyelveknél köztes kódzavarást alkalmaznak.

Időpont

Bonyolítja a kódkutatást

Mint fentebb említettük, a Java és .NET programok visszafejtése meglehetősen egyszerű. Ebben az esetben az obfuszkátor felbecsülhetetlen segítséget nyújt azoknak, akik el akarják rejteni kódjukat a kíváncsi szemek elől. Az obfuszkálás után gyakran nem fordítják újra a visszafejtett kódot.

A HTML obfuszkáció segíti a spamküldőket : a HTML megjelenítésére képes levelezőprogramban a szöveg beolvasásra kerül, de az eredeti HTML-fájllal foglalkozó anti-spam szűrő úgy továbbítja a kéretlen üzenetet, hogy nem ismeri fel benne a tiltott sort.

A legegyszerűbb példa az obfuszkált HTML-re:

< b > Mash </ b >< b > ina </ b >

Megtekintéskor a felhasználó a " Gép " szót fogja látni, míg a forráskódban ez feldarabolódik és két külön szóként érzékelhető.

Optimalizálás

Az értelmezett nyelveken az obfuszkált kód kevesebb helyet foglal el, mint a forráskód, és gyakran gyorsabban fut, mint a forráskód. A modern obfuszkátorok a konstansokat számokra cserélik, optimalizálják a tömb inicializálási kódját és egyéb olyan optimalizációkat hajtanak végre, amelyek problémás vagy lehetetlenek a forrás szintjén.

A méretcsökkentés problémája fontos például, amikor mobiltelefonokra programozunk J2ME - ben , ahol a program mérete erősen korlátozott. A JavaScript obfuszkáció csökkenti a HTML - fájlok méretét, és így felgyorsítja a betöltést.

Saját szoftver védelme

A forráskód védelme a haszonszerzés céljából történő szerkesztéstől.

Hátrányok

A kód rugalmasságának elvesztése

Az obfuszkációs kód inkább platform- vagy fordítófüggővé válhat.

Hibakeresési nehézségek

Az obfuszkátor megakadályozza, hogy egy kívülálló megtudja, mit csinál a kód, de megakadályozza a fejlesztőt a hibakeresésben. Hibakereséskor ki kell kapcsolni az obfuszkátort.

Nem megfelelő biztonság

Noha a homályosítás segít az elosztott rendszer biztonságosabbá tételében, nem korlátozódhat erre . Az elhomályosítás biztonság a homályon keresztül . A meglévő obfuszkátorok egyike sem garantálja a dekompiláció bonyolultságát, és nem nyújt biztonságot a modern kriptográfiai sémák szintjén. Valószínű, hogy a hatékony védelem lehetetlen (legalábbis a megoldandó problémák bizonyos osztályaiban).

Hibák az obfuszkátorokban

A modern obfuszkátor egy összetett szoftvercsomag. A gondos tervezés és tesztelés ellenére gyakran hibák kúsznak be az obfuszkátorokba. Tehát nem nulla esély van arra, hogy az obfuszkátoron áthaladó kód egyáltalán nem fog működni. És minél összetettebb a fejlesztés alatt álló program, annál nagyobb ez a valószínűség.

Osztály hívása név szerint

A legtöbb köztes kódnyelv képes objektumokat létrehozni vagy meghívni osztálynevük alapján . A modern obfuszkátorok lehetővé teszik, hogy megmentse ezeket az osztályokat az átnevezéstől, de az ilyen korlátozások csökkentik a programok rugalmasságát.

Lásd még

Jegyzetek

  1. Ebben az esetben ezt nevezhetjük kicsinyítésnek
  2. 10.2. A regisztrációs kódok ellenőrzésének módszerei . www.rfcmd.ru Letöltve: 2016. február 2. Az eredetiből archiválva : 2016. december 12.

Irodalom

  • Boytsev O. M. Védje meg számítógépét 100%-ban a vírusoktól és a hackerektől. - Péter, 2008. - ISBN 9785388003478 .

Linkek