Partager via


Obfuscation du flux de contrôle

Ce processus synthétise les constructions conditionnelles, itératives et de branchement qui génèrent une logique exécutable valide, mais des résultats sémantiques non déterministes en cas de tentative de décompilation. L'obfuscation du flux de contrôle produit une logique « spaghetti » qui peut être très difficile à analyser par un pirate. Examinez l'exemple suivant, traité par Dotfuscator Professional Edition :

Code source d'origine avant l'obfuscation
© 2001, Microsoft Corporation
(extrait de l'exemple de code 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);
}
Code source obtenu par ingénierie à rebours,
après obfuscation du flux de contrôle
par 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. Tous droits réservés.