2011-09-10 11 views
12

私がアセンブリをNGしている場合、ildasmはまだそれを分解するのが普通ですか?(ILDasmを使用して)NGen-edアセンブリを分解できますか?

私はHelloWorldクラスライブラリを作成し、その後のDLLの名前はNGenILDasmTest.dllです。 は - > VS 2010コマンドプロンプトからの.Net FW 4.

を対象に、私は、私はアセンブリがGACにインストールされ見ることができました

gacutil -i NGenILDasmTest.dll 

をしました。そして、私はILを見たので、ildasmを実行しました。 これまでのところとても良いです。

それから私は

ngen NGenILDasmTest.dll 

を(私はNGENのための任意のオプションを指定しなかった)を実行します。そして、このアセンブリは正常にコンパイルされました。私はNGEN-EDアセンブリの内容を見ることができました

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

下回るようILDASM実行したとき、私は、今すぐフォルダ

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

下の名前NGenILDasmTest.ni.dllでそれを設置しました。これは正常ですか?

技術的に言えば、NgenはIL用のネイティブCPUインストルメントを生成します(私の場合、明らかにC:\ windows \ Assembly \ NAtiveImages_V4。##### _ 32)。そうであれば、ILDasmを使ってNGEN-edアセンブリをILとしてどのように見ることができますか?

ここで私が紛失している「ちょっとしたこと」を理解してください。

答えて

14

NGENされたアセンブリはIL plusネイティブコードです。 ILは除去されない。 NGenアセンブリにはネイティブイメージしか含まれていないという混乱がしばしばあります。元の情報はメタデータにはまだ必要です。

マイクロソフトでは、NGenアセンブリの内部に関する非常に具体的な情報はありません。私たちが知っているほとんどの情報はリバースエンジニアリングによるものです。

EDIT

.NET Framework 1.1をインストールした後(イェーイ...) - .NET 1.1 NGEN はILからストリップを行うことが表示されます。それはv2で始まるように見えます - ILは保持されます。これは、矛盾する情報が周囲にある理由と思われます。この変更が行われた正確な理由は分かっていないようです。

NGENの内部のいくつかの良い記事があります(そして、それは難読化のために非常に悪い考えであるか)、ここで:http://www.woodmann.com/forum/entry.php?68-Rebuilding-native-.NET-exes-into-managed-.NET-exes-by-Exploiting-lefotver-IL ...今

、NGENについて興味深いのは、それがないということですILコードが実行に必要でない間に のILまたはメタデータを除去するので、メタデータは、プログラムが必要とするすべての文字列およびその他の関連データがメタデータ内に含まれているためです。したがって、Ngenは メタデータをすべてにコピーします。ILセクションを作成し、ILコードを補足としてコピーします。

+0

+1これは正確です。 –

+0

@vcsjones私は同意します!あなたの答えの中のそのリンクはすべてそれを説明します。真のリバースエンジニアリング。私はNGenILDasmTest.dllによって/ releaseと/ debugモードの両方でseparetelyでビルドを試みました。それでも差はないようです。もう1つの点は、元のアセンブリNGenILDasmTest.dllのサイズが5KBで、エクスプローラに表示され、Ngen-edアセンブリアセンブリNGenILDasmTest.ni.dllが10KBであることです。 2番目の考えがなければ、それは "NGENのアセンブリはILとネイティブコードです"という声明を信じさせます。 – gmaran23

4

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

+0

Thx。私はそれを打つ必要があると思う。 – gmaran23

+0

サンプルプロジェクトが必要ですか?あなたが望むなら、私はあなたにサンプルを与えることができます。 –

+0

@Artur、サンプルを見るのに興味があります... – gap

関連する問題