Dotfuscator クイック スタート ガイド

難読化後の出力の表示と検証

ステップ 1 – 逆アセンブラーの使用

.NET Framework SDK には、"ildasm" と呼ばれる逆アセンブラー ユーティリティが含まれています。これを使用すると、.NET アセンブリを IL アセンブリ言語のステートメントに逆コンパイルすることができます。ildasm を起動するには、.NET Framework SDK がインストールされていること、パスが設定されていることを確認してください。コマンド ラインで ildasm と入力します。

メモ:Visual Studio がインストールされているのに ildasm が起動しない場合は、ildasm へのパスが設定されていることを確認してください。[スタート]メニューから[開発者コマンド プロンプト for VS20xx](古いバージョンの Visual Studio の場合は、[Visual Studio コマンド プロンプト(20xx)])を実行し、ildasm と入力します。

  • ファイル]メニューの[開く]をクリックして、次を参照します。
    C:\Program Files (x86)\PreEmptive Solutions\Dotfuscator Professional Edition 4.x\samples\cs\GettingStarted\bin\Debug
  • GettingStarted.exe を選択します。
  • 開く]をクリックします。逆アセンブルされたアセンブリのビューが表示されます。

  • 現在表示されている、難読化されていない HelloWorld アプリケーションを、難読化されたアプリケーションと比較するために、ildasm をもう 1 つ起動します。今度は以下を参照します。
    C:\Program Files (x86)\PreEmptive Solutions\Dotfuscator Professional Edition 4.x\samples\GettingStarted\Dotfuscated
  • GettingStarted.exe を選択します。
  • 開く]をクリックします。

  • 2 つの ildasm ウィンドウを並べて配置します。2 つの表示を比較してください。

難読化されていない逆アセンブリのウィンドウには、かなり理解しやすいメソッド名が表示されていることに注目してください。たとえば、ConverseButton_Click: void (object, class [mscorlib]System.EventArgs) というメソッドであれば、[Converse]ボタンがクリックされたときに呼び出されるメソッドと考えることができます。しかし、難読化されたアセンブリを見てください。Converse ボタンをクリックしたとき、どのメソッドが呼び出されるか推測できますか。見分けることは困難です。

SaySomething メソッドがなくなっている点にも注目してください。これは、コード内のどこからも使用されていないメソッドが削除されたためです。

元のアセンブリから SayHello:string() メソッドをダブルクリックし、難読化されたアセンブリから a:string() メソッドをダブルクリックします。この 2 つのメソッドは同じものですが、逆アセンブルした IL コードをよく調べると、難読化されたアセンブリで文字列が暗号化されており、コードの判読が難しくなっているのがわかります。

たとえば、難読化されていないアセンブリのウインドウから次の行を探してください。

IL_0000:ldstr      "Hello, my name is "

次に、難読化された方のウィンドウから、この文字列を探してみてください。なかなか見つからないのは、文字列が暗号化されているためです。暗号化された文字列は次のように表示されています。

IL_0000: ldstr bytearray (09 42 26 44 29 46 2B 48 26 4A 67 4C 6D 4E 22 50  
                          28 52 73 54 3B 56 36 58 34 5A 3E 5C 7D 5E 36 60  
                          12 62 43 64 )

コードのリバース エンジニアリングを試みるアタッカーが、どれほど混乱させられるか想像してみてください。特に、複雑なアプリケーションの場合は、なおさら困難です。

ステップ 2 – 逆コンパイル

逆コンパイルできるのは、IL アセンブリ言語を知っている、ごく一部の技術的な人々に限定されるものではありません。さらに一歩進めて、実際には、逆コンパイラを使用して、アプリケーションからソース コードを再作成することができます。これらのユーティリティを使うと、.NET のアセンブリを C#、VB、.NET、または Managed C++ などの高水準言語に直接戻すことが可能です。

ただし、Dotfuscator で処理された GettingStarted.exe ファイルを指定して .NET Reflector などのツールを実行し、a() などのメソッドを調べようとすると、次のメッセージが表示されます。

This item appears to be obfuscated and can not be translated.

以上で、Dotfuscator を使用することによって、主要な逆コンパイラによるリバース エンジニアリングを完全に妨害できることが検証されました。

Dotfuscator バージョン 4.28.1.5015. Copyright © 2017 PreEmptive Solutions, LLC