Ofuscación del flujo de control

Este proceso sintetiza las construcciones de bifurcación, condicionales e iterativas que crean una lógica final (ejecutable) válida pero producen resultados semánticos no deterministas cuando se intentan descompilar. La ofuscación del flujo de control produce lógica enrevesada que puede resultar muy difícil de analizar para un pirata. Tomemos el siguiente ejemplo procesado por Dotfuscator Professional Edition:

Código fuente original antes de la ofuscación
© 2001, Microsoft Corporation
(Fragmento del código de ejemplo de C# 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);
}
Código fuente con ingeniería inversa
después de la ofuscación del flujo de control
mediante 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. Reservados todos los derechos.