Skip to Content
Nuova versione 12 disponibile 🎉

Algoritmi del flusso di controllo

Babel Obfuscator offre diversi algoritmi del flusso di controllo, che puoi abilitare singolarmente. La maggior parte produce IL verificabile e funziona su tutti i runtime supportati; due (token e underflow) no, e sono descritti alla fine di questa pagina.

Algoritmi verificabili

AlgoritmoChe cosa fa
gotoInserisce diramazioni irrilevanti, che rendono il flusso di controllo più lungo e meno lineare.
ifRiscrive le istruzioni if in forme più complesse, introducendo condizioni aggiuntive.
switchRicostruisce un metodo attorno a uno o più dispatcher switch, così i suoi blocchi non vengono più eseguiti nell’ordine del sorgente (è la tecnica nota come appiattimento, o flattening).
caseNasconde i valori costanti che guidano il dispatcher switch, che così non compaiono più nel codice come semplici numeri.
callAggiunge variabili che determinano il salto successivo all’interno del corpo dello switch e che sono prodotte da chiamate ad altri metodi.
valueProtegge ulteriormente i selettori dello switch con la funzionalità di cifratura dei valori.
chainChained State: un algoritmo di appiattimento avanzato, rafforzato contro il deoffuscamento automatico. Disponibile a partire dall’edizione Ultimate. Vedi Chained State.

goto e if costano poco e possono essere applicati su larga scala. La famiglia switch (switch, case, call, value) e chain appiattiscono un metodo e sono le trasformazioni più forti, con un costo maggiore in fase di esecuzione: vedi Prestazioni e tuning.

Chained State Ultimate

chain è un algoritmo di appiattimento, come switch, ma è progettato specificamente per resistere agli strumenti automatici capaci di ricostruire un normale metodo appiattito. Produce IL verificabile e funziona su tutti i runtime supportati. Abilitalo con --controlflow chain=on. Ha una pagina dedicata: Chained State.

Opzioni non verificabili

L’algoritmo token inserisce nel flusso di controllo token di metadati non validi, mentre l’algoritmo underflow aggiunge al corpo del metodo punti in cui lo stack gestito può andare in underflow. Entrambi rendono l’IL non verificabile.

Gli algoritmi token e underflow non sono compatibili con la natura verificabile degli assembly .NET e .NET Core e possono causare errori in fase di esecuzione. Babel Obfuscator li disabilita automaticamente quando gli assembly sono destinati a .NET o .NET Core.

Opcode non validi

L’opzione Emit Invalid Opcodes aggiunge istruzioni MSIL non valide accanto a quelle inserite da ogni algoritmo, il che può rendere più difficile per i decompilatori ricostruire il codice originale. Se la abiliti, l’assembly diventa non verificabile e il CLR è costretto a eseguire l’applicazione come processo a 32 bit.

Non abilitare Emit Invalid Opcodes se l’applicazione deve essere eseguita come processo a 64 bit, o se è destinata a .NET Core o .NET Framework, dove l’assembly deve contenere IL verificabile per poter essere eseguito. In questi casi lascia l’opzione disattivata.

Last updated on