0

ファイルがありexeます。これは Windows XP では問題なく動作しますが、Windows 7 x86 では動作しません。これをIDA proで解析しました。

XP では、これはアドレス ( ) にアクセスし、ここでは( )0x7C80003Cの最初のセクションにあります。kernel32.dll0x7C800000~0x7C801000

しかし、Windows 7 では、これは同じアドレスにアクセスしますが、割り当てられていない範囲です。

のベースアドレスを手動で設定しkernel32.dll、Win7 でもうまく動作するようにしたいと考えています。これどうやってするの?

4

1 に答える 1

0

探しているのはDllCharacteristics、PE ヘッダーのフィールドのフラグです (フィールドと混同しないでくださいCharacteristics)。

Microsoft はこのフラグIMAGE_DLLCHARACTERISTICS_DYNAMIC_BASEを と呼び、 として定義されてい0x40ます。ご想像のとおり、優先ベース アドレス (PE ヘッダーの「ImageBase」フィールドに設定) 以外のアドレスにイメージをロードする必要があるかどうかを示します。

でそのフラグをマスクする場合はDllCharacteristics、 が正しいことを再確認してくださいImageBase。必要な場所に正確に DLL をロードする必要があります。それが機能しない場合は、フィールドにIMAGE_FILE_RELOCS_STRIPPED( 0x1) フラグを追加する必要がある場合もありCharacteristicsます。

合併症が発生する可能性があります。私はこの手法をシステム DLL でテストしたことがないので、最近の Windows バージョンがパッチを適用したイメージの読み込みに消極的であっても驚かないでください。手始めにCheckSum、パッチを反映するようにヘッダーのフィールドを修正する必要がある場合があります。また、無効になっているデジタル署名を削除する必要がある場合もあります。最近のモジュールローダーがどれほどうるさいのか正確にはわかりませんが、それらは私が予想する種類の問題です。

PE ヘッダーの公式ドキュメントは、https: //msdn.microsoft.com/en-us/library/windows/desktop/ms680339%28v=vs.85%29.aspx (かなり簡潔ですが) にあります。

于 2015-10-05T14:33:24.853 に答える