2016-09-26 8 views
0

PEパッカーをC++でコーディングしました。これはプロセススペースに実行可能ファイルをロードし、IATと再配置を修正してからエントリポイントを呼び出します。ネイティブプロセスからの.NET PEのメモリロード中

私の問題は、.NETはサポートされていないことです。私は.NET PEフォーマットを検索しましたが、インポートされた関数(_CorExeMain)に設定されたエントリポイントで実行可能なのは32ビットです。

私がそれを呼び出すと、Windowsに.NETがインストールされていないことを示すエラーがポップアップ表示されます。

.NET PE実行可能ファイルには、DataDirectoryに特別なCOMヘッダーがありますが、その処理方法はわかりません。

誰かが私を助けてくれることを願っています。
ありがとうございます。

+0

PEはAVIのような単なるコンテナ形式です。内部に何があるかは保証されません。単にプロトコルが定義されているだけで、情報がどこにどのようにエンコードされているのですか。 .NETアセンブリがPEファイル形式を使用しているということは、ネイティブ(アンマネージド)DLLのように単純にロードできるということではありません。マネージアセンブリの型をアクティブにするには、[CLRをホストする](https://msdn.microsoft.com/en-us/library/ms404385.aspx)が必要です。さて、.winmdファイルはPEファイル形式も再利用しますが、コードは一切含まれていません。 – IInspectable

+0

関連資料:[.NETアセンブリの構造 - CLRローダースタブ](https://www.simple-talk.com/blogs/anatomy-of-a-net-assembly-the-clr-loader-stub/ )。 – IInspectable

答えて

0

明らかに、あなたが持っていたアイデアは、.Net用としては機能しません。

"packed"実行可能ファイルは、コードがunpackerで、データが圧縮された実際の実行ファイルであるネイティブ実行可能ファイルです。実行すると、Windowsはネイティブコードを取得して取得します。

.NET実行可能ファイルについては、明らかに同じことを実行する必要があります。コードがアンパックで、データが圧縮された.Netバイトコードである.Net実行可能ファイルを作成します。

関連する問題