Obfuscation Agent
Durante il processo di offuscamento, Babel può eseguire una serie di task basati su un insieme di regole predefinite, noto come Obfuscation Agent.
L’Agent è progettato per evitare i problemi comuni che l’offuscamento può introdurre e che potrebbero compromettere l’assembly risultante. Per esempio, l’Agent può garantire che certi simboli, come quelli usati tramite reflection, non vengano offuscati. Questo perché l’offuscamento di tali simboli può causare problemi con l’ambiente di runtime e provocare errori o arresti anomali.
A questo scopo, l’Agent esegue una serie di task sull’assembly target. Questi task sono preconfigurati e hanno complessità variabile: alcuni sono semplici, come il controllo dei campi dei tipi serializzabili, mentre altri richiedono tecniche più avanzate, come l’analisi statica del codice MSIL.
Ecco l’elenco dei nomi dei task dell’Agent disponibili in Babel Obfuscator:
| Nome del task | Descrizione |
|---|---|
| Base types | Impedisce la ridenominazione dei tipi derivati da un tipo base specificato |
| Code analysis | Impedisce la ridenominazione dei tipi riservati all'analisi del codice |
| Dynamic language | Impedisce la ridenominazione dei simboli usati dal Dynamic Language Runtime |
| Exposed attributes | Impedisce la ridenominazione dei simboli che espongono attributi specifici |
| Razor webapp | Gestisce l'offuscamento delle applicazioni web Razor |
| Reflected enums | Impedisce la ridenominazione dei tipi di enumerazione usati tramite reflection |
| Reflected strings | Impedisce l'offuscamento delle stringhe usate tramite reflection |
| Reflected types | Impedisce la ridenominazione dei tipi usati tramite reflection |
| Serializable types | Impedisce la ridenominazione dei tipi serializzabili |
| WinRT types | Impedisce la ridenominazione dei tipi privati WinRT |
I task dell’Obfuscation Agent vengono aggiornati continuamente, a ogni nuovo rilascio del prodotto. In questo modo Babel è sempre allineato alle più recenti regole di progettazione del CLR e può determinare con precisione quali simboli vanno offuscati e quali no.
Seguendo queste regole predefinite, Babel Obfuscator può garantire che il codice offuscato resti pienamente funzionante e privo di problemi che potrebbero compromettere l’applicazione.
Nel complesso, l’Obfuscation Agent è un componente essenziale di Babel, che contribuisce a proteggere le applicazioni .NET impedendo che i nomi dei simboli vengano offuscati in violazione delle regole di progettazione del CLR.
Sovrascrivere le regole dell’Agent
L’Obfuscation Agent è abilitato per impostazione predefinita e, quando possibile, va lasciato abilitato per garantire che l’offuscamento venga eseguito correttamente. In genere disabilitare l’Agent è sconsigliato, perché può causare problemi con l’ambiente di runtime e provocare errori o arresti anomali dell’applicazione. In alcuni casi, tuttavia, potresti voler disabilitare alcuni task dell’Agent per ottenere risultati di offuscamento specifici.
È importante notare che i task dell’Agent vengono eseguiti dopo la fase di elaborazione delle regole. Ciò significa che qualsiasi regola XML personalizzata che non sia forzata su un membro verrà sovrascritta dal task dell’Agent. Valuta quindi con attenzione l’impatto della disabilitazione o della personalizzazione dei task dell’Agent prima di modificare le impostazioni predefinite.
Puoi saltare un task specifico dell’Agent usando le regole XML. Per farlo, definisci una regola di esclusione rivolta alla funzionalità agent, che indica i nomi dei task da saltare nell’elemento TaskNameList, figlio dell’elemento Properties della regola. In questo modo i task specificati non vengono eseguiti durante l’offuscamento.
Per esempio, per disabilitare i task Serializable types e Reflected strings, definisci una regola XML come questa:
<Rule name="rule1" feature="agent" exclude="true">
<Pattern>ACME.Data.*</Pattern>
<Properties>
<TaskNameList>Serializable types;Reflected strings</TaskNameList>
</Properties>
</Rule>In questa regola, rivolta alla funzionalità “agent”, l’attributo exclude è impostato su “true”: questo indica a Babel Obfuscator di non eseguire i task dell’Agent Serializable types e Reflected strings durante l’elaborazione dell’assembly.
Disabilitare l’esecuzione di un task non è sempre praticabile, perché può causare problemi imprevisti in fase di esecuzione. Un modo per ottenere il risultato di offuscamento voluto per un simbolo specifico è quindi usare una regola XML che può essere forzata impostando l’attributo “locked” su “true”, così che l’Agent non possa sovrascriverla.
<Rule name="rule1" feature="renaming" exclude="false" locked="true">
<Target>Classes</Target>
<Pattern>ACME.Data.*</Pattern>
<Description>Force renaming of all types in ACME.Data namespace,
including serializable ones.
</Description>
</Rule>Questa regola forza la ridenominazione di tutte le classi del namespace ACME.Data, compresi tutti i tipi serializzabili.