Condividi tramite


Soluzione Dotfuscator

Attualmente, la maggior parte degli offuscatori commerciali utilizza una tecnica di ridenominazione che applica identificatori semplici, in genere costituiti da un solo carattere. Durante l'elaborazione del codice, l'offuscatore seleziona il successivo identificatore semplice disponibile per la sostituzione. Questo schema di ridenominazione apparentemente semplice offre un vantaggio rispetto alle tecniche di hash o all'offset del set di caratteri, ovvero l'irreversibilità. Sebbene la logica di programma venga mantenuta, i nomi non hanno più alcun senso. In questo modo, la comprensione umana viene considerevolmente ostacolata. Di fronte a identificatori come a, t.bb(), ct e 2s(e4), risulta difficile convertire la semantica in concetti quali invoiceID, address.print(), userName e deposit(amount). È tuttavia possibile decodificare la logica di programma.

Una forma più completa di offuscamento utilizza l'Overload Induction, un algoritmo brevettato progettato da PreEmptive Solutions. La ridenominazione semplice viene comunque utilizzata, ma con un'importante modifica. Gli identificatori dei metodi vengono sottoposti al massimo livello di overload dopo un'accurata analisi dell'ambito. Anziché sostituire ciascun nome con un nuovo nome, Overload Induction assegna lo stesso nome al maggior numero possibile di metodi. In seguito a tale offuscamento, la logica, sebbene non venga distrutta, risulta completamente incomprensibile. Nell'esempio seguente viene illustrata l'efficacia della tecnica di Overload Induction:

Codice sorgente originale prima dell'offuscamento
private void CalcPayroll(SpecialList employeeGroup) {
   while (employeeGroup.HasMore()) {
        employee = employeeGroup.GetNext(true);
        employee.UpdateSalary();
        DistributeCheck(employee);
    }
}
Codice sorgente decodificato dopo l'offuscamento
con la funzionalità Overload Induction di Dotfuscator
private void a(a b) {
    while (b.a()) {
        a = b.a(true);
        a.a();
        a(a);
    }
}

Nell'esempio viene dimostrato che il codice offuscato è più compatto. Un effetto positivo della ridenominazione è infatti costituito da una riduzione delle dimensioni. Se ad esempio si rinomina come a() un nome costituito da 20 caratteri, viene risparmiato lo spazio corrispondente a 19 caratteri, conservando allo stesso tempo le voci di heap delle stringhe. La ridenominazione di ogni nome in "a" dà come risultato la memorizzazione di "a" una sola volta e, di conseguenza, ogni metodo o campo ridenominato in "a" punterà a tale voce memorizzata. La tecnica di Overload Induction potenzia ulteriormente tale effetto, in quanto gli identificatori più brevi vengono continuamente riutilizzati. Dopo l'esecuzione di Overload Induction, il 70% dei metodi di un progetto viene in genere rinominato in a().

Dotfuscator rimuove le informazioni di debug e i metadati non essenziali dai file MSIL durante la relativa elaborazione. Oltre a ottimizzare il livello di protezione e sicurezza, ciò contribuisce a ridurre le dimensioni dei file MSIL.

È importante sottolineare che il processo di offuscamento viene applicato al codice MSIL compilato, non al codice sorgente. L'ambiente di sviluppo e gli strumenti non vengono modificati per applicare la ridenominazione. Il codice sorgente non viene mai alterato né letto in alcun modo. Il codice MSIL offuscato è funzionalmente equivalente al codice MSIL tradizionale ed è in grado di eseguire Common Language Runtime (CLR) ottenendo risultati identici. Non è tuttavia vero il contrario. Anche se risultasse decompilabile, il codice MSIL sottoposto a offuscamento completo presenterebbe differenze semantiche significative rispetto al codice sorgente originale. Nell'illustrazione riportata di seguito viene mostrato il flusso del processo di offuscamento con Dotfuscator.

PreEmptive Solutions protegge e perfeziona il software compilato a livello intermedio fin dal 1996, quando realizzò gli strumenti DashO per Java. I suoi prodotti hanno ottenuto la leadership del mercato grazie all'elevata potenza e versatilità e a esclusive funzionalità brevettate.

L'offerta Dotfuscator è costituita da una famiglia di strumenti che consentono di sfruttare la potente piattaforma .NET senza problemi in termini di protezione della proprietà intellettuale. Sono disponibili tre edizioni di Dotfuscator:

Dotfuscator Community Edition è una versione gratuita dotata delle funzionalità di offuscamento di base. Il suo scopo principale è ridenominare gli identificatori, ostacolando così la decodifica. In Dotfuscator Community Edition sono state integrate tecnologie avanzate per facilitare questo tipo di protezione. Viene inoltre garantita una parziale riduzione delle dimensioni, come conseguenza della ridenominazione in identificatori semplici.

Dotfuscator Community Edition non è in grado di:

  • Funzionare separatamente da Visual Studio, il che significa che non può essere utilizzato in un ambiente di generazione commerciale.
  • Rinominare tipi e metodi generici di .NET 2.0.
  • Offuscare codice gestito scritto per l'integrazione con Microsoft Office.
  • Offuscare codice gestito creato per essere eseguito all'interno di Microsoft SQL Server 2005.
  • Supportare la modalità libreria se non come opzione globale: tale modalità deve essere attivata o disattivata per tutti gli assembly di input.
  • Supportare le impostazioni di offuscamento dichiarativo se non come opzioni globali: tali impostazioni devono essere attivate o disattivate per tutti gli assembly di input.
  • Supportare applicazioni C++ destinate a CLR.

Se si desidera superare tali limitazioni, rivolgersi a PreEmptive Solutions per ulteriori informazioni su Dotfuscator Professional Edition.

Le funzionalità disponibili per i titolari di licenze Dotfuscator Community Edition sono contrassegnate con l'icona .

Dotfuscator Enhanced Community Edition è disponibile come download gratuito per gli utenti registrati di Dotfuscator Community Edition. Oltre alle funzionalità di Dotfuscator Community Edition, questa edizione offre quanto segue:

  • Integrazione completa con Visual Studio.
  • Supporto delle funzionalità di Business Intelligence per il runtime mediante il segnale SO, ai fini dell'ottimizzazione delle applicazioni.
  • Supporto del rilevamento e della notifica della manomissione delle applicazioni mediante il segnale SO.

Le funzionalità non incluse Community Edition, ma disponibili in Dotfuscator Enhanced Community Edition sono contrassegnate con l'icona .

In Dotfuscator Professional Edition sono contenute le funzionalità di Dotfuscator Community Edition e molto altro. Si tratta del principale strumento di offuscamento disponibile nel settore ed è destinato a organizzazioni che producono applicazioni commerciali e aziendali. Dotfuscator Professional Edition offre strumenti di protezione avanzata per ostacolare la decompilazione, una significativa riduzione delle dimensioni per risparmiare memoria e migliorare i tempi di caricamento, un'integrazione completa con Visual Studio per agevolare la configurazione, tecniche di offuscamento incrementale per la creazione di patch, funzionalità di applicazione di filigrane per l'assegnazione di tag univoci agli assembly, nonché supporto tecnico tramite telefono e posta elettronica. Le funzionalità disponibili per i titolari di licenze Dotfuscator Professional Edition sono contrassegnate con l'icona .

Nella tabella seguente vengono confrontate le funzionalità dei prodotti Dotfuscator.

Funzionalità Professional Edition Dotfuscator Enhanced Community Edition Community Edition
Compattazione/Eliminazione    
Supporto completo per .NET Compact Framework    
Offuscamento del flusso di controllo    
Enhanced Overload Induction (EOI)    
Offuscamento incrementale    
Offuscamento semplice di DLL satellite    
Crittografia delle stringhe    
Collegamento di assembly    
Supporto per eventi pre e post generazione    
Assegnazione automatica di nuove firme agli assembly con nome sicuro    
Integrazione con MSBuild    
Applicazione di filigrane al software    
Esecuzione indipendente da Visual Studio    
Diversi schemi di ridenominazione    
Supporto per debug PDB    
Prefisso di ridenominazione    
Supporto di assembly .NET C++    
Conversione automatica dell'analisi dello stack    
File di report XML/HTML    
Supporto per tipi e metodi generici    
Integrazione con script di generazione    
Integrazione completa con Visual Studio  
Funzionalità di Business Intelligence per il runtime con segnale SO  
Rilevamento e notifica della manomissione delle applicazioni con il segnale SO  
Offuscamento tra assembly
Rimozione di metadati non utilizzati
Ridenominazione
Supporto per offuscamento dichiarativo

© 2002-2007 PreEmptive Solutions. Tutti i diritti riservati.