12

アセンブリをNGenした場合、ildasmがまだそれを逆アセンブルするのは正常ですか?

Ok。私は HelloWorld クラス ライブラリを作成しました。その後の dll は NGenILDasmTest.dll という名前です。--> .Net fw 4 を対象としています。

Vs 2010コマンドプロンプトから、私はやった

gacutil -i NGenILDasmTest.dll

アセンブリが GAC にインストールされているのが見えました。そして、ildasm を実行して、IL を表示できるようにしました。ここまでは順調ですね。

それから私は走ります

ngen NGenILDasmTest.dll

(ngen のオプションは指定しませんでした)。そして、このアセンブリは正常にコンパイルされました。フォルダーの下に NGenILDasmTest.ni.dll という名前で配置しました

C:\Windows\Assembly\NativeImages_v4.0.30319_32\NGenILDasmTest\81d49dd4c7df22fb3df530402b58ffc9

さて、以下のようにildasmを実行すると

ildasm "C:\Windows\Assembly\NativeImages_v4.0.30319_32\NGenILDasmTest\81d49dd4c7df22fb3df530402b58ffc9\NGenILDasmTest.ni.dll"

Ngen-ed アセンブリの内容を見ることができました。これは正常ですか?

技術的に言えば、Ngen は IL のネイティブ CPU 命令を生成します (私の場合は C:\windows\Assembly\NAtiveImages_V4.#####_32 の下にあるようです)。その場合、ILDasm を使用して、NGen で処理されたアセンブリを IL として表示するにはどうすればよいですか?

私がここで見逃している「ちょっとしたこと」を理解するのを手伝ってください。

4

2 に答える 2

14

NGEN 化されたアセンブリは、IL とネイティブ コードです。IL は取り除かれません。NGen アセンブリにネイティブ イメージのみが含まれているという混乱がよくあります。メタデータには元の情報が必要です。

Microsoft は、NGen アセンブリの内部に関する具体的な情報を持っていないようです。私たちが知っているほとんどの情報は、リバース エンジニアリングによるものです。

編集

.NET Framework 1.1 をインストールした後 (yay..) - .NET 1.1 NGenIL を取り除いているようです。v2 で始まるように見えます - IL は保持されます。これが、矛盾した情報が横たわっている理由のようです.この変更が行われた正確な理由はわかっていないようです.

ngen の内部構造 (および難読化の方法として非常に悪い考え) に関する良い記事がここにあります: http://www.woodmann.com/forum/entry.php?68-Rebuilding-native-.NET-exes -to-managed-.NET-exes-by-Exploiting-lefotver-IL ...

さて、Ngen の興味深い点は、IL やメタデータを排除しないことです。実行に IL コードは必要ありませんが、プログラムが必要とするすべての文字列やその他の関連データはメタデータに含まれているためです。メタデータ。そのため、Ngen はすべてのメタデータをネイティブ exe の .IL セクションにコピーし、後から IL コードをコピーします。

于 2011-09-10T17:23:00.977 に答える
4

高速/簡単な難読化を調べる場合は、混合モード アセンブリを C++ で記述します。これは、独自のアセンブリのブート ローダーになります (ネイティブ コードで COM を介してレガシー .NET FW 4.0 をロードし、マネージドから宣言されたパブリック インターフェイスを使用します)。一部、マネージ アセンブリ用に生成されたトラフ .tlb) を (RSA を使用して) 暗号化されたリソースとして保持し、ネイティブ C++ コードを暗号化してから、両方のアセンブリに署名します。これにより、アセンブリの ILDASM が防止され、プロジェクトのデバッグとビルドが可能になります (ビルド イベントを使用)。

于 2011-09-10T18:09:32.557 に答える