.NETプログラムの逆コンパイル
昨日、参加させて頂いたせきゅぽろは、講師eagle0wl(いーぐるおうる)氏による「OSS/Java/.NETプログラマが意識すべきバイナリ解析の素養」でした。非常に勉強になる内容で、ほんと面白かったです。
そんな中、「Javaや.NETの中間言語は、最適化が行われる前のもので、豊富な情報を持っている」というお話・・・・
naoki0311氏から、フリーのディスコンパイラ(Telerik JustDecompile)を教えて頂いたので、ちょっと私も試してみました。
1 簡単なプログラムの作成
試験用にWindowsFormで簡単なプログラムを作成してみました。
2 JustDecompileでの解析と逆コンパイル
JustDecompileにexeファイルをドロップすると、そのまま解析され、C#、VB、ILを選択して表示できます。
「CreateProject」ボタンを押すと、逆コンパイルしたコード(プロジェクト)が生成されます。
3 再コンパイル
JustDecompileが生成したプロジェクトを再度読み込んでみましたが、エラーがあってそのままコンパイルはできません。this.buttonStart.add_Click(buttonStart_Click);
↑どうして、そんなコードになるの?って気もしますが・・・・
エラーの部分を修正すれば、一応コンパイルできて、元のプログラムと同じものが実行もできました。
エラーの修正は、特に大きなプログラムで大量に発生すると、法則性でもつかまないと、ちょっと難しいかも知れません。

4 BlackJumboDogの解析
ちょっと、大きめのプログラムという事で、BlackJumboDogをJustDecompileに読ませてみました。
上記の画像の当該部分の元コードは、下記ですが・・・完璧に逆コンパイルされてます。
特にCryptのソルトはバレバレでした。
※BlackJumboDogは、もともとコードが公開されてますので、問題はないのですが・・・・
【逆コンパイル】
5 BlackJumboDogの逆コンパイルコードによる再構築
これは、さすがに大量(BJD.exeだけで1632件、DLLは含まず)のエラーが発生して、修正は、ちょっと萎えます。私の実力では、大きなプログラムの再構築はちょっと無理です。出来る人がやれば、できるんでしょうね・・・・・
