Skip to Content
Nuova versione 12 disponibile 🎉
ObfuscatorOffuscamento del flusso di controllo

Offuscamento del flusso di controllo

L’offuscamento del flusso di controllo rende un metodo difficile da seguire riscrivendo il modo in cui le sue istruzioni si diramano, senza cambiare ciò che il metodo calcola. Babel può rendere le istruzioni if più difficili da leggere, inserire diramazioni che non influiscono mai sul risultato e ricostruire un metodo attorno a un dispatcher, in modo che i suoi blocchi non vengano più eseguiti nell’ordine del sorgente. L’obiettivo è aumentare il costo della decompilazione e della comprensione del codice, rendendo più difficili il reverse engineering e la manomissione.

Babel organizza l’offuscamento del flusso di controllo in un insieme di algoritmi che puoi abilitare singolarmente. Si dividono in due famiglie:

  • Trasformazioni leggere: if e goto aggiungono diramazioni e condizioni supplementari, con un costo quasi nullo in fase di esecuzione.
  • Trasformazioni di appiattimento (flattening): switch, case, call, value e l’algoritmo Chained State dell’edizione Ultimate ricostruiscono un metodo attorno a un dispatcher. Sono molto più forti, con un costo maggiore in fase di esecuzione.

Altre due opzioni, token e underflow, producono deliberatamente IL non verificabile e vengono disabilitate automaticamente quando la destinazione è .NET o .NET Core. Vedi Algoritmi per il catalogo completo.

Configurare l’offuscamento del flusso di controllo

Puoi configurare l’offuscamento del flusso di controllo dalla riga di comando, dal task Babel di MSBuild o da Babel Desktop. Con le regole XML puoi regolare gli algoritmi per insiemi specifici di metodi, per esempio per cambiare il numero di iterazioni o per abilitare o disabilitare singoli algoritmi metodo per metodo.

Riga di comando

babel myapp.exe --controlflow goto=on --controlflow if=on --controlflow switch=on --controlflow case=on --iterations 3

L’opzione --controlflow abilita gli algoritmi specificati (qui goto, if, switch e case), mentre --iterations imposta quante volte ogni algoritmo viene applicato a un metodo.

Task Babel di MSBuild

<PropertyGroup> <ControlFlowObfuscation>goto=true;if=true;switch=true;case=false;call=true; value=false;token=false;underflow=false;true</ControlFlowObfuscation> <ILIterations>5</ILIterations> </PropertyGroup> <Babel ControlFlowObfuscation="$(ControlFlowObfuscation)" ILIterations="$(ILIterations)" />

La proprietà ILIterations imposta il numero di iterazioni degli algoritmi del flusso di controllo.

Babel Desktop

  1. Apri il progetto in Babel Desktop e seleziona l’assembly sul canvas del progetto.
  2. Nel gruppo Flusso di controllo del pannello delle proprietà, abilita ControlFlowObfuscation e seleziona gli algoritmi che vuoi usare.
  3. Imposta ILIterations sul numero di iterazioni che ogni algoritmo deve eseguire.
  4. Fai clic su Esegui progetto per avviare l’offuscamento.

Al termine dell’offuscamento, la vista Risultati mostra le statistiche del flusso di controllo: i metodi trasformati e le iterazioni eseguite da ogni algoritmo e, quando vengono raccolte le statistiche complete, la complessità ciclomatica prima e dopo la trasformazione.

In questa sezione

  • Algoritmi: tutti gli algoritmi del flusso di controllo, che cosa fanno e quando usarli.
  • Chained State Ultimate: un algoritmo di appiattimento avanzato, rafforzato contro il deoffuscamento automatico del flusso di controllo.
  • Prestazioni e tuning: come ogni algoritmo incide sull’esecuzione, un confronto affiancato, le iterazioni e come mantenere veloci i metodi eseguiti più di frequente.
Last updated on