2

.NET 2.0 バイナリ ファイル (*.exe) を何らかの読み取り可能なコードに逆コンパイルすることはできますか? そうでない場合は、そこからいくつかの情報を抽出するだけですか (たとえば、メソッド名、デバッグ情報など)?

4

5 に答える 5

15

Reflectorを確認すると、アセンブリが C# または IL として表示されるはずです。

編集:

Reflector のコストが高くなったため、日々のニーズのためにILSpyに切り替えました。

于 2010-02-16T16:22:26.310 に答える
3

exe を ILDASM または Dot Net Reflector にドロップするとうまくいくはずです。

于 2010-02-16T16:23:10.620 に答える
1

私は今日、この質問から自分自身を引用します:

コンパイルされたコードで保存されたメタデータがないため、まったく同じソースに戻ることはできません。

ただし、アセンブリ コードからコードを再作成することはできます。

これらのことに興味がある場合は、この本をチェックしてください: Reversing: Secrets of Reverse Engineering.

編集

一部のコンパイラ-101 ここで、「コンパイラ」ほど技術的ではなく、別の単語でコンパイラを定義するとしたら、それは何になりますか?

答え:翻訳者

コンパイラは、記述した構文/フレーズを別の言語に変換し、C コンパイラはアセンブリまたはマシン コードに変換します。C# コードは IL などに変換されます。

あなたが持っている実行可能ファイルは、元のテキスト/構文の翻訳にすぎません。「逆に」したい場合は、「元に翻訳」すると、最初と同じ構造にはならない可能性が高くなります。

より現実的な例として、英語からドイツ語に翻訳し、ドイツ語から英語に翻訳すると、文の構造が異なる可能性が高く、他の単語が使用される可能性がありますが、意味や文脈は変わっていない可能性が高くなります。

CからASMに移行する場合、コンパイラ/トランスレータについても同じことが言えます。ロジックは同じです。それは、それを読み取る方法が異なるだけです(もちろん、最適化されています)。

C# に関して言えば、Reflector などの優れたツールがすでにたくさん提供されています。ただし、コードが難読化されていると、読み取りに問題が発生します。

于 2010-02-16T16:26:42.020 に答える
1

Lutz Roeder を検索すると、以下が見つかります。

http://www.red-gate.com/products/reflector/

于 2010-02-16T16:23:17.957 に答える
0

はい。まず、すべての .net ライブラリには、型情報を含むマニフェストがあります。それらは、リフレクションを使用するか、リフレクターなどのツールを使用して問題を調査できます。確認する必要があるクラスの system.reflection 名前空間を確認してください。

于 2010-02-16T16:24:44.103 に答える