制御フローの難読化

ms227229.pro(ja-jp,VS.90).jpg この処理は、有効なフォワード (実行可能) ロジックを作り出している分岐処理、条件処理、反復処理などの構成要素を合成し、逆コンパイルが試みられたときに、その意味を判断できないコードを生成します。制御フローの難読化によって、クラッカーによる解析が非常に困難な、スパゲッティのように複雑にからみ合うロジックが生成されます。次の例は、Dotfuscator Professional Edition の処理を示しています。

難読化前のソース コード
(C) 2001, Microsoft Corporation
(WordCount.cs C# コード例の一部)
public int CompareTo(Object o) {
    int n = occurrences – ((WordOccurrence)o).occurrences;
    if (n == 0) {
        n = String.Compare(word, ((WordOccurrence)o).word);
    }
    return(n);
}
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. All rights reserved.