EXEヘッダー内の奇妙な値
-
24-09-2019 - |
質問
EXE ヘッダーに奇妙な値が配置されているのを見ました
00000000 :4D 5A 90 00 03 00 00 00 - 04 00 00 00 FF FF 00 00
00000010 :B8 00 00 00 00 00 00 00 - 40 00 00 00 00 00 00 00
00000020 :00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00
00000030 :00 00 00 00 00 00 00 00 - 00 00 00 00 A8 00 00 00
00000030 :00 00 00 00 00 00 00 00 - 00 00 00 00 A8 00 00 00 <-
何が何だか分からない A8
そこで実行していますが、それをゼロに置き換えると、プログラムは実行されません。
一言で:それは何ですか?
また、完全な MS DOS ヘッダーへのリンクも教えていただけますか?
解決
DWORDはIMAGE_NT_HEADERS別名、新しいEXEヘッダのオフセットされています。あなたがそこに値を変更するのであれば、PEローダは新しいEXEヘッダを見つけることができません。
他のヒント
PEの最初の部分は、MS-DOSスタブです。 0x3cの(あなたの「A8」である)で、PEファイルの署名にオフセットがあります。あなたはそれをゼロにした場合、ローダーは、PE署名を見つけることができなくなりますし、それをロードすることを拒否します(または単にMS-DOS実行ファイルとしてそれをロード、私がしようとしませんでした)。 詳細については、 PEフォーマット仕様を参照P>
これは新しい PE ヘッダーへのオフセットであると思われます。最初の 30 奇数バイトは MS-DOS ヘッダーであり、「A8」が存在するファイルへのオフセットは構造体のフィールドに対応します。 _IMAGE_DOS_HEADER
呼ばれた LONG e_lfanew; // File address of new exe header
;値「A8」が新しい値の一部になるということです。 IMAGE_NT_HEADER
この情報が含まれているもの
- DWORD 署名。
- _IMAGE_FILE_HEADER ファイルヘッダー;
- _IMAGE_OPTIONAL_HEADER オプションのヘッダー。
次の定数で示されるように、最初の 2 バイトは、実行可能ファイルへの元の MS-DOS ヘッダーです。 WORD IMAGE_DOS_SIGNATURE = 0x5A4D; // MZ
;IMAGE_NT_HEADER には、NT プラットフォーム用の実行可能ファイルであることを識別するためのこの署名があります。 DWORD IMAGE_NT_SIGNATURE = 0x00004550; // PE00
;
これらすべての情報は、次のヘッダー ファイルにあります。 pe.h
.
そこで何が起こったのかというと、値「A8」を消去したため、ローダーがその値を見つけることができませんでした。 IMAGE_NT_HEADER
したがって失敗しました。