Ofuscarea codului
În programare , ofuscarea codului este actul de a crea în mod deliberat cod sursă, care este greu de înțeles de un cititor uman. Ofuscarea poate avea mai multe motive:
- voința de a proteja proprietatea intelectuală prin îngreunarea pentru terți a ingineriei inversate și a refolosirii codului acestora;
- face mai dificilă modificarea codului rău intenționat, cum ar fi inserarea de programe malware sau crearea de fisuri ;
- face mai dificile încălcările licențelor, cum ar fi crearea de keygens ;
- în scopuri recreative, pentru a crea puzzle-uri pentru comunitatea de programare.
Ofuscarea poate fi făcută direct de programator sau introdusă printr-un obfuscator , care este un program special conceput pentru a modifica codul sursă prin introducerea unor variații care îngreunează citirea.
Obfuscatori
Există o mare varietate de obfuscatori („obfuscatori”), de la instrumente academice și open source la produse comerciale, pentru multe limbi, inclusiv JavaScript , [1] PHP , [2] Java , [3] , .NET , [4] ] [5] și C / C ++ [6] [7] .
Există, de asemenea, unii dezamorsatori , care sunt instrumente care încearcă să efectueze transformări inverse în raport cu cele efectuate în mod obișnuit de către obfuscatori.
Estompare recreativă
Scrierea (și înțelegerea) codului ofuscat poate fi înțeleasă ca un fel de puzzle pentru programatori. Există o serie de competiții internaționale care recompensează cele mai creative exemple de ofuscare: printre cele mai cunoscute se numără Concursul Internațional de Cod C Oscurat , Concursul Perl Oscurat și Concursul Internațional de Cod Rubin Oscurat .
Fragmente de cod înfundate creativ pot fi introduse în cod de către programatori pentru a îndeplini funcția unui fel de „semnătură”.
Exemple
Următorul program C, scris de Ian Phillips, a câștigat Concursul Internațional de Cod C Oscurat în 1988. [8] Programul (în mod neașteptat) tipărește cele 12 rânduri ale melodiei Douăzeci de zile de Crăciun .
/ *
Cel puțin probabil să compilați cu succes:
Ian Phillipps, Cambridge Consultants Ltd., Cambridge, Anglia
* /
#include <stdio.h>
principal ( t , _ , a )
char
*
a ;
{
întoarce-te !
0 < t ?
t < 3 ?
main ( -79 , -13 , a +
principal ( -87 , 1 - _ ,
principal ( -86 , 0 , a + 1 )
+ a )) :
1 ,
t < _ ?
principal ( t + 1 , _ , a )
: 3 ,
principal ( -94 , -27 + t , a )
&& t == 2 ? _
< 13 ?
principal ( 2 , _ + 1 , "% s% d% d \ n " )
: 9 : 16 :
t < 0 ?
t < -72 ?
principal ( _ , t ,
„@n '+, #' / * {} w + / w # cdnr / +, {} r / * de} +, / * {* +, / w {% +, / w # q # n +, / # {l, +, / n {n +, / + # n +, / #; \
# q # n +, / + k #; * +, / 'r:' d * '3,} {w + K w'K:' +} e # '; dq #' lq # '+ d'K #! / + k #; \
q # 'r} eKK #} w'r} eKK {nl]' / #; # q # n ') {) #} w') {) {nl] '/ + # n'; d} rw 'i ; #) {nl]! / n {n # '; \
r {# w'r nc {nl] '/ # {l, +' K {rw 'iK {; [{nl]' / w # q # \
\
n'wk nw 'iwk {KK {nl]! / w {%' l ## w # 'i; : {nl] '/ * {q #' ld; r '} {nlwb! / * de}' c ;; \
{nl '- {} rw]' / +,} ## '*} # nc,', # nw] '/ + kd' + e} +; \
# 'rdq # w! nr '/')} +} {rl # '{n' ') #}' +} ## (!! / " )
:
t < -50 ?
_ == * a ?
putchar ( 31 [ a ]) :
principal ( -65 , _ , a + 1 )
:
main (( * a == '/' ) + t , _ , a + 1 )
:
0 < t ?
principal ( 2 , 2 , „% s” )
: * a == '/' ||
principal ( 0 ,
main ( -61 , * a , "! ek; dc i @ bK '(q) - [w] *% n + r3 # l, {}: \ n uwloca-O; m .vpbks, fxntdCeghiry" )
, un + 1 );}
Licență pentru obscuritate și copyleft
Eliberarea codului ofuscat sub licențe copyleft a fost un subiect de controversă, deoarece ofuscarea împiedică (sau face imposibilă) reutilizarea codului de către terți, prevăzută în mod explicit de acest tip de licență. Consensul general pe această temă este că eliberarea codului copyleft ofuscat nu reprezintă o încălcare tehnică a cerințelor de licență, chiar dacă se califică drept corect din punct de vedere etic. Ca urmare a acestei discuții, textul licenței publice generale GNU a fost modificat prin adăugarea notei conform căreia versiunea codului pus la dispoziție trebuie să fie cea preferată (adică cea neofuscată). [9]
Notă
- ^ Open Directory - Calculatoare: Programare: Limbaje: JavaScript: Instrumente: Obfuscatori
- ^ Open Directory - Calculatoare: Programare: Limbaje: PHP: Instrumente de dezvoltare: Obfuscation and Encryption
- ^ Open Directory - Calculatoare: Programare: Limbaje: Java: Instrumente de dezvoltare: Obfuscatori
- ^ Open Directory - Calculatoare: Programare: Cadre componente: .NET: Instrumente: Obfuscatori
- ^ GuardIT pentru .NET , la arxan.com . Adus la 17 ianuarie 2013 (depus de „url original 18 august 2012).
- ^ Cloakware Application Security. Arhivat la 25 mai 2011 la Internet Archive .
- ^Morpher - Obfuscare condusă de compilator
- ^ „Câștigători internaționali ai codului C obfuscat 1988 - Cel mai puțin probabil să compileze cu succes” , la ioccc.org . Adus la 17 ianuarie 2013 (arhivat din original la 9 aprilie 2009) .
- ^ Raționamentul din spatele limbajului „formă preferată” din GPL [LWN.net]