Ofuscarea codului

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Î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:

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ă