Reverse Engineering: i compressori di codice
Giovedì 15 Marzo, 2007Una questione trascurata nell'ambito del Web2.0 è la protezione del codice sorgente. In un ottica Open Source, dove il Web2.0 trova nella beta la sua massima espressione, condividere e far partecipare la comunità lascia sicuramente in secondo piano questioni legate alla protezione del codice sorgente. Ricordiamo, infatti, che gli script Javascript vengono scaricati all'interno del browser dal Web Server, come file testuali, quindi totalmente visibili all'utente finale.
Mentre il codice Server è protetto per definizione (è impossibile accedere al codice di una pagina PHP tramite il protocollo HTTP del browser, salvo i rari casi di malfuzionamento del Web Server), il codice client potrebbe essere soggetto ad un Reverse Engineering.
Esiste tuttavia una semplice protezione ideata, ai suoi esordi, per dimuire la dimensioni degli script Javascript; oggi diventati veri e propri framework in alcuni casi.
Esistono infatti applicativi e siti Web che permettono di comprimere (crunch) il codice Javascript, ma non solo. Questa caratteristica, in modalità diversa, può essere applicata anche al codice HTML e ai fogli di stile CSS. Il codice Javascript, in particolare, oltre ad essere compresso può essere nascosto, ottenendo così una protezione del codice (a vista) tale da rendere più articolata la procedura di Reverse Engineering.
Le differenze tra HTML, CSS e Javascript sono importanti e sostanziali. Mentre la compressione di pagine HTML e fogli di stile può solo agire sull'eliminazione di caratteri inutili o superflui, come 'a capo', 'spazi doppi', ecc..., Javascript è un linguaggio di programmazione che può quindi eseguire uno speciale codice per decomprimere se stesso.
JavascriptCompressor.com è un servizio gratuito, utilizzabile online, che permette di comprime un codice sorgente Javascript. Le opzioni lo rendono estremamente versatile, garantendo al contempo l'oscuramento del codice.
Esempio, codice di partenza:
-
function MyFunction() {
-
alert("Hello World");
-
}
Codice con compressione semplice:
-
function MyFunction(){alert("Hello World")}
Encoding normale:
-
eval(function(p,a,c,k,e,d){while(c--)if(k[c])p=p.replace(new RegExp('\\b'+c+'\\b','g'),k[c]);return p}('4 3(){2("1 0")}',5,5,'World|Hello|alert|MyFunction|function'.split('|')))
Ovviamente questo è un esempio, con codici piccoli comprimere non ha davvero molto senso, si rischi di peggiorare le cose e basta (a meno che non siate interessati esclusivamente all'oscuramento del codice a vista).
MemTronic Cruncher Compressor è anch'esso un servizio online (come il precedente funzionano anche in modalità offline) parzialmente gratuito, nel senso che alcune funzioni sono disponibili solo nella versione a pagamento (come la funzione Obfuscade). Rispetto al precedende servizio dovrebbe offrire maggiori prestazioni e sicurezza nel crittaggio del codice. Io li uso indistintamente, a seconda dei casi.
Peterbe.com non permette di comprimere Javascript (salvo che elimando spazi e 'a capo'), ma propone un compressor per HTML, CSS e XHTML. Io, ad esempio, lo uso per comprimere i fogli di stili.
A meno di usare algoritmi particolari di crunching, che tuttavia appesantirebbero l'elaborazione dei dati, è sempre possibile eseguire un Reverse Engineering del codice, anche quello compresso. O presto o tardi, infatti, il codice originale deve essere inviato all'interprete del browser, il quale lo riconosce (per ora) solo in chiaro. In un futuro, con nuove versioni dei browser, questo impedimento potrebbe essere superato. Sarebbe infatti vantaggioso se venisse implementata, all'interno dei browser, una qualche tecnologia in grado di accettare codice Javascript pre-compilato, in binario per intenderci (caso mai crittato). In questo modo si abbatterebbero i tempi di download degli script, consentendo una naturale protezione dal Reverse Engineering e, non ultimo, maggior performance a livello di esecuzione degli script.





















undolog » Blog Archive » Dove Javascript perde ha detto:
[...] Dove Javascript perde Tags: ActionScript, ActionScript 3.0, Adobe, ECMA, Javascript, Javascript 1.7, Mozilla, SviluppoOramai è solo questione di tempo, Mozilla ha aperto la strada con Javascript 1.7. Comunque sia, è chiaro che l’attuale Javascript ha delle limitazioni. Per esempio non lo si può proteggere da un Reverse Engineering (vedi Reverse Engineering: i compressori di codice); possiamo rendere la vita difficile a chi vuole scrutare il nostro codice, ma impedirlo è quanto mai improbabile. [...]
upnews.it ha detto:
undolog » Blog Archive » Reverse Engineering: i compressori di codice…
Una questione trascurata nell’ambito del Web2.0 è la protezione del codice sorgente. In un ottica Open Source, dove il Web2.0 trova nella beta la sua massima espressione, condividere e far partecipare la comunità lascia sicuramente in secondo piano …