0

Portable-Executableでは、PEファイルを編集することでインポートされたdll名を変更できます。ここでは、アプリケーションexeのインポートされたdll名を1つ変更しましたが、そのときは通常どおりに変更されました。たとえば、advapi32.dllから^dvapi32に変更されました。 dll、したがって、ここではsystem32または他のPATHの場所に^ dvapi32.dllがありません..今回は、実際のadvapi32.dllを^ dvapi32.dllに変更し、アプリケーションディレクトリに配置しましたが、今回は正常に機能します....しかし私がntdll&gdi32.dllを試しているとき、それはサポートされていません、私は問題を解決できません、plsは問題に向かって私を助けます..ありがとう。

4

1 に答える 1

1

GDI32.DLL などのシステム DLL は、Windows の起動時にメモリに読み込まれ、Windows OS の重要な機能 (この場合はグラフィカル関数) を提供します。一部の DLL は固定の ImageBase で構築されており (これは、KERNEL32、GDI32.DLL、USER32.DLL などの最も重要なシステム DLL に適用されると思われます)、このタイプの DLL をコピーして名前を変更し、それらを参照することは機能しません。 PE ヘッダー。

これは、ImageBase で指定されたメモリに自分自身をロードしようとして失敗するために発生します。これは、特定のメモリ位置が既にメモリ内にある元の DLL によって占有されており、修正された ImageBase が別のメモリ位置にロードできないためです。ImageBase が固定されていない DLL は、Windows によって別のメモリ ロケーションを使用するように再配置され、問題なく実行されます。

If the ImageBase of the DLL copy is changed to a different value, DLLs with a fixed ImageBase will work properly provided that the memory location pointed by ImageBase is unoccupied.

While I have tested this approach successfully on a copy of Notepad and then changing the imported DLL names and ImageBases of the DLL copies on Windows XP, I STRONGLY DISCOURAGE this fiddling with imports and tampering of Windows system DLLs in this manner.

于 2010-04-23T07:19:31.833 に答える