L’offuscamento del codice sorgente di un software

Offuscare il proprio codice sorgente consente di renderlo meno leggibile ad altre persone. Il processo di offuscamento può essere applicato a moltissimi file in svariati linguaggi come Javascript, CSS, C/C++, Java, ecc. e viene applicato per rendere i file meno leggibili per evitare che qualcun altro si appropri del codice e lo riutilizzi nei propri progetti. Un file offuscato è semplicemente meno leggibile di un file normale, ciò non significa che non è ripristinabile, dato che il codice dovrà essere interpretato da un browser, quest’ultimo deve essere in grado di comprenderlo per la corretta visualizzazione delle pagine. Di conseguenza, seppure con maggiore difficoltà, anche qualsiasi persona sarà in grado di leggerlo se ben intenzionata. Il processo di offuscamento rende il tentativo di leggere il codice più difficile.

I vantaggi nell’offuscare un file sono molteplici:

  1. Proteggere i propri file da utilizzi non autorizzati;
  2. Proteggere la licenza del software e non rendere facile la realizzazione di crack;
  3. Proteggere il proprio software dall’inserimento di codice malevolo.

Esistono anche degli svantaggi nell’offuscamento dei file:

  1. Non è un processo sicuro al 100% in quanto non rende impossibile il ripristino dei file nella loro forma originale;
  2. Alcuni antivirus segnalato il codice offuscato come un possibile tentativo di nascondere del codice malevolo.

Vediamo un esempio di offuscamento, dato il seguente codice CSS:

    div {
        line-height: 2;
    }


L’offuscamento ci farà inserire il seguente codice al posto del CSS:

<script src="cssobfuscated.js" id="k78jrvz8d6ywlfmk1wwoybgtqmyjwanc"></script>

Con il file JavaScript le cui prime righe sono:

// ver 0.19
var _0xc434=["a","o","@import","indexOf","s","l","match","c","D","@","f","d","string","",
"join","B","{","}","v","b","insertRule","assign","addImport","addRule","CSS format not supported.","at-rule not supported","write","CSSobfuscator: Browser not supported","Browser not supported","slice","length","number","subarray","buffer","byteLength","set",
"object","Uint8Array","Uint32Array","Int32Array","btoa","charCodeAt","charAt",
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
"undefined","JSON","function","parse","(",")","yTaeLJz1mtkjNebt5CPi+9nhNDYwKPE1NzAzMQLN9MPJ8TUSM8vN19fJBwbQ0gUDDA0OD
9vbJAgiFiEXJRMgLCEjLCsa","style","createElement","userAgent","test","vendor",
"WebkitAppearance","documentElement","createTextNode","appendChild","class",
"generic-style","setAttribute","media","","k78jrvz8d6ywlfmk1wwoybgtqmyjwanc",
"getElementById","Obfuscated script not identified.","insertBefore","parentNode","removeChild","sheet","styleSheet",
"Generated style not found.","x","cssRules","=","ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv
wxyz0123456789+/","DOM Exception 5","code","H","name","description","INVALID_CHARACTER_ERR","toString","Error: ",": ","message","ALPHA","g","C","h","fromCharCode","push","atob","decode",
"substr","random","m","u","i","j","\x00","getRandomValues","crypto",
"navigator","plugins","screen","apply","pow","seed","w","global","I","A","F"];
function m(_0x277fx2){this[_0xc434[0]]=_0x277fx2;this[_0xc434[1]]=function(){return -1
<this[_0xc434[0]][_0xc434[4]][_0xc434[3]](_0xc434[2])};this[_0xc434[5]]=function(){return this[_0xc434[7]]()[_0xc434[6]](/^@import\s+(?:(?:url\s*\(\s*\'(\S+)\'\s*\))|(?:url\s*\(\s*\"(\S+)\"\s*\))|(?:url\s*\(\s*(\S+)\s*\))|(?:\"(\S+)\"\s*)|(?:\'(\S+)\'\s*)|(?:(\S+(?=[ ;]))\s*.*;$))/i)[1]};this[_0xc434[8]]=function(){return -1===this[_0xc434[0]][_0xc434[4]][_0xc434[3]](_0xc434[9])};this[_0xc434[7]]
// ...

CSSobfuscator

Esistono moltissimi strumenti per utilizzare l’offuscamento, ad esempio per i CSS un ottimo tool online per l’offuscamento è http://www.cssobfuscator.com/

Differenza tra Minimizzazione e Offuscamento

Il processo di minimizzazione può essere visto come una sorta di offuscamento dei file, in quanto riduce la leggibilità di un file eliminando i caratteri non necessari dai file come gli spazi, le interruzioni di riga, ecc. Seppure il risultato può essere utile per chi vuole offuscare il proprio codice, la differenza tra minimizzazione e offuscamento, è per l’obiettivo per cui si applicano:

  1. Minimizzazione (approfondimento): viene utilizzata per ottimizzare le performance rendendoli i file più leggeri (facilmente ripristinabile con dei tool);
  2. Offuscamento: utilizzato per nascondere il proprio codice a persone estranee (difficilmente ripristinabile).

Per approfondire il processo di minimizzazione vi rimando ad un articolo specifico: (TITOLO).

Pubblicato in CSS, Front-end, JavaScript Taggato con: ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*