Ofucare (software)

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 10 februarie 2019; verificările necesită 19 modificări .

Obfuscare (din latină  obfuscare  - a obscure, obscure; și engleză  obfuscate  - a face non-evident, confuz, confuz) sau code obfuscare  - aducerea codului sursă sau a codului executabil al programului într-o formă care își păstrează funcționalitatea, dar îl face dificil de analizat, de înțeles algoritmii de lucru și modificare în timpul decompilării .

„Ofuscarea” codului poate fi efectuată atât la nivelul numelor componentelor programului, cât și la nivelul algoritmilor programului . Pentru a crea text de asamblare ofuscat, pot fi utilizați compilatoare specializate care utilizează caracteristici neevidente sau nedocumentate ale mediului de execuție a programului . Există, de asemenea, programe speciale care produc obfuscator, numite obfuscators ( ing.  obfuscator ).

Țintele de ofuscare

Dificultate la decompilare / depanare și examinarea programelor pentru a descoperi funcționalitatea;

Dificultăți la decompilarea software-ului proprietar pentru a preveni ingineria inversă sau eludarea sistemelor DRM și de verificare a licențelor ;

Dificultate la cracarea software-ului ;

Optimizarea programului pentru a reduce dimensiunea codului de rulare și (dacă se folosește un limbaj necompilat ) pentru a accelera munca;

Demonstrarea posibilităților neevidente ale limbajului și a calificărilor programatorului (dacă se face manual, și nu cu instrumente);

Tehnologie

La nivel de sursă

În JavaScript , VBScript și limbaje de scriptare similare , codul sursă al programului este disponibil utilizatorului . În acest caz, formatarea textului și înlocuirea numelor pot face textul mai puțin lizibil.

Text sursă în limbaj C :

int COUNT = 100 ; float TAX_RATE = 0,2 ; pentru ( int i = 0 ; i < COUNT ; i ++ ) { tax [ i ] = orig_price [ i ] * TAX_RATE ; preţ [ i ] = preţ_orig [ i ] + taxă [ i ]; }

Cod după ofuscare [1] :

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

Exemplu mai complex:

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 ( "._" ); pentru (;( 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 , "_." : "|" ];}

La nivel de cod al mașinii

De regulă, ofuscarea la nivelul codului mașinii reduce viteza de execuție și, în consecință, crește timpul de execuție a programului. Prin urmare, este utilizat în locuri critice pentru securitate , dar nu în locuri critice pentru viteză din program, cum ar fi verificarea codului de înregistrare [2] .

Cea mai simplă modalitate de a ofusca codul mașină  este să inserați în el constructe inactive (cum ar fi or ax, ax).

La nivel de cod intermediar

Spre deosebire de limbajele de programare convenționale, cum ar fi C++ sau Pascal , care se compilează în codul mașinii , limbajul Java , NetP și limbajele platformei .NET compilează codul sursă în cod intermediar ( bytecode ) care conține suficiente informații pentru a reconstrui în mod adecvat codul sursă. Din acest motiv, pentru aceste limbaje este folosită ofuscarea codului intermediar.

Numire

Complicarea cercetării codului

După cum am menționat mai sus, decompilarea programelor Java și .NET este destul de ușoară. În acest caz, obfuscatorul oferă o asistență neprețuită celor care doresc să-și ascundă codul de privirile indiscrete. Adesea, după ofuscare, codul decompilat nu este recompilat.

Obfuscarea HTML ajută spammerii : pe un client de e-mail care este capabil să afișeze HTML, textul este citit, dar filtrul anti-spam , care se ocupă de fișierul HTML original, transmite mesajul nedorit fără a recunoaște linia interzisă din acesta.

Cel mai simplu exemplu de HTML ofuscat:

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

La vizualizare, utilizatorul va vedea cuvântul „ Mașină ”, în timp ce în codul sursă este disecat și perceput ca două cuvinte separate.

Optimizare

În limbile interpretate , codul ofuscat ocupă mai puțin spațiu decât codul sursă și deseori rulează mai rapid decât codul sursă. De asemenea, obfuscatoarele moderne înlocuiesc constantele cu numere, optimizează codul de inițializare a matricei și efectuează alte optimizări care sunt problematice sau imposibile la nivel de sursă.

Problema reducerii dimensiunii este importantă, de exemplu, la programarea pentru telefoane mobile în J2ME , unde dimensiunea programului este sever limitată. Obscurcarea JavaScript reduce dimensiunea fișierelor HTML și, astfel, accelerează încărcarea.

Protejarea software-ului proprietar

Protejarea codului sursă împotriva modificării pentru profit.

Dezavantaje

Pierderea flexibilității codului

Codul de ofuscare poate deveni mai dependent de platformă sau de compilator.

Dificultăți de depanare

Obfuscatorul împiedică un străin să afle ce face codul, dar împiedică și dezvoltatorul să-l depaneze. Când depanați, trebuie să opriți obfuscatorul.

Securitate insuficientă

În timp ce ofuscarea ajută la securitatea unui sistem distribuit , nu ar trebui să se limiteze la el. Obscurcarea este securitate prin obscuritate . Niciunul dintre obfuscatoarele existente nu garantează complexitatea decompilării și nu oferă securitate la nivelul schemelor criptografice moderne. Este destul de probabil ca o protecție eficientă să fie imposibilă (cel puțin într-o anumită clasă de probleme de rezolvat).

Greșeli în ofuscatoare

Un obfuscator modern este un pachet software complex. Adesea, în ciuda proiectării și testării atente , bug-urile se strecoară în obfuscatori. Deci, există o șansă diferită de zero ca codul trecut prin obfuscator să nu funcționeze deloc. Și cu cât programul este mai complex, cu atât este mai mare această probabilitate.

Apelarea unei clase după nume

Majoritatea limbajelor de cod intermediare pot crea sau apela obiecte după numele clasei lor . Obfuscatoarele moderne vă permit să salvați aceste clase de la redenumire, dar astfel de restricții reduc flexibilitatea programelor.

Vezi și

Note

  1. În acest caz, poate fi numită minificare
  2. 10.2. Metode de verificare a codurilor de înregistrare . www.rfcmd.ru Preluat la 2 februarie 2016. Arhivat din original la 12 decembrie 2016.

Literatură

  • Boytsev O. M. Protejați-vă computerul 100% de viruși și hackeri. - Peter, 2008. - ISBN 9785388003478 .

Link -uri