Come già detto la sicurezza di un obfuscator è
di tipo
probabilistico. A partire dal lontano 2007, alcuni
competitors, anzichè capire il perchè si intraprendono determinate
strategie di protezione, le hanno direttamente implementate in altri
prodotti: sia
gratuiti che commerciali.
Oggi, è facile, assistere ad un vero e proprio "effetto-boomerang":
è stato provato, infatti, che esistono tecniche capaci di violare
determinate tecniche (obsolete e datate 2005 ma continuano ad essere
utilizzate).
Le tecniche obsolete riguardano:
- il renaming a caratteri non stampabili;
- l'alterazione del control-flow
che vengono, ora, eliminate "sfruttando" il nuovo
decompilatore ILSpy:
- per il renaming è necessario
effettuare poche modifiche al codice (open-source): una tecnica
consiste nel sostituire i
valori unicode con il valore univoco del metadata-token;
- mentre per il control-flow
basta ricostruire il CFG
sfruttando, ad esempio, l'algoritmo di Tarjan
(teoria dei grafi);
che portano alla decompilazione
per tutti i software "offuscati" con:
- {Smart-Assembly}: commerciale
(circola, in rete, anche un unpacker automatico);
- Babel Obfuscator: distribuito
inizialmente come "prodotto gratuito", nel 2008 copia la tecnica dell'invalid-opcode
(qui
i dettagli completi) usata da Goliath .NET
Obfuscator 2.0 dal 2006 (già
segnalato nel blog) per poi diventare un prodotto commerciale;
- Eazfuscator: gratuito (un
altro "benefattore" nato sulle idee degli altri);
- ect.
ed ora, chi si è affidato a tali prodotti, può fare solo
un "mea-culpa":
la qualità di un obfuscator non si valuta dal solo prezzo
finale!

IsValidName:
verifica presenza nomi con caratteri non stampabili

Controllo di validità, ad
esempio, nella lettura dei nomi dei metodi

...risultato finale
direttamente sull'assembly di un obfuscator!
ed ora che i nomi dei
membri sono "unici", si procede con un "copia-incolla" del codice!
Renaming
& Control-Flow?
...Obsoleti!