SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

.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は含まず)のエラーが発生して、修正は、ちょっと萎えます。
私の実力では、大きなプログラムの再構築はちょっと無理です。出来る人がやれば、できるんでしょうね・・・・・