Condividi tramite


Offuscamento del flusso di controllo

Questo processo consente di sintetizzare costrutti condizionali, iterativi e con diramazioni che generano logica eseguibile, ma che restituiscono come risultato una semantica non deterministica in caso di decompilazione. L'offuscamento del flusso di controllo produce una logica "spaghetti" che può ostacolare significativamente l'analisi. Si consideri l'esempio riportato di seguito, elaborato con Dotfuscator Professional Edition.

Codice sorgente originale prima dell'offuscamento
© 2001, Microsoft Corporation
(frammento di codice C# dell'esempio WordCount.cs)
public int CompareTo(Object o) {
    int n = occurrences – ((WordOccurrence)o).occurrences;
    if (n == 0) {
        n = String.Compare(word, ((WordOccurrence)o).word);
    }
    return(n);
}
Codice sorgente decodificato
dopo l'offuscamento del flusso di controllo
con Dotfuscator Professional Edition
public virtual int _a(Object A_0) {
    int local0;
    int local1;
    local0 = this.a – (c) A_0.a;
    if (local0 != 0) goto i0;
    goto i1;
    while (true) {
       return local1;
       i0: local1 = local0;
    }
    i1: local0 = System.String.Compare(this.b, (c) A_0.b);
    goto i0;
}

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