.NET 2.0 バイナリ ファイル (*.exe) を何らかの読み取り可能なコードに逆コンパイルすることはできますか? そうでない場合は、そこからいくつかの情報を抽出するだけですか (たとえば、メソッド名、デバッグ情報など)?
5 に答える
exe を ILDASM または Dot Net Reflector にドロップするとうまくいくはずです。
私は今日、この質問から自分自身を引用します:
コンパイルされたコードで保存されたメタデータがないため、まったく同じソースに戻ることはできません。
ただし、アセンブリ コードからコードを再作成することはできます。
これらのことに興味がある場合は、この本をチェックしてください: Reversing: Secrets of Reverse Engineering.
編集
一部のコンパイラ-101 ここで、「コンパイラ」ほど技術的ではなく、別の単語でコンパイラを定義するとしたら、それは何になりますか?
答え:翻訳者
コンパイラは、記述した構文/フレーズを別の言語に変換し、C コンパイラはアセンブリまたはマシン コードに変換します。C# コードは IL などに変換されます。
あなたが持っている実行可能ファイルは、元のテキスト/構文の翻訳にすぎません。「逆に」したい場合は、「元に翻訳」すると、最初と同じ構造にはならない可能性が高くなります。
より現実的な例として、英語からドイツ語に翻訳し、ドイツ語から英語に翻訳すると、文の構造が異なる可能性が高く、他の単語が使用される可能性がありますが、意味や文脈は変わっていない可能性が高くなります。
CからASMに移行する場合、コンパイラ/トランスレータについても同じことが言えます。ロジックは同じです。それは、それを読み取る方法が異なるだけです(もちろん、最適化されています)。
C# に関して言えば、Reflector などの優れたツールがすでにたくさん提供されています。ただし、コードが難読化されていると、読み取りに問題が発生します。
Lutz Roeder を検索すると、以下が見つかります。
はい。まず、すべての .net ライブラリには、型情報を含むマニフェストがあります。それらは、リフレクションを使用するか、リフレクターなどのツールを使用して問題を調査できます。確認する必要があるクラスの system.reflection 名前空間を確認してください。