3

指定されたバイナリが PE ファイルかどうかを検証する必要があります (たとえば、JS/HTML または .class ファイルの名前を .exe または .dll に変更した場合)、それでも PE ファイルにはなりません。PE ファイルを解析すると、この問題に関する情報が得られます。特定のバイナリが有効な PE ファイルであるかどうかを示すフィールドはどれですか?

FileHeader の「e_magic」フィールドを確認しましたが、間違った PE ファイル (つまり、.dll/Exe に名前が変更された js/html/java/class ファイル) の場合は常に入力され、有効性については何も言われません。 PE。

4

3 に答える 3

6

そのようなフィールドが存在する場合、無効なexeを作成して、意図的に有効としてマークするのは簡単すぎます。

PEヘッダーを読み取り、すべてのフィールドの値を確認することで、ファイルがPEファイルであることを確認します(値は有効な範囲に属している必要があり、ファイルの外部を指している必要はありません)。

于 2010-07-14T12:17:56.027 に答える
3

Portable Executable / Common Object FileFormatSpecificationを確認してください。チェックする魔法の値は3つあります。

  • ファイルの先頭にあるMZヘッダーのマジックナンバー
  • PEヘッダーの先頭にあるPEヘッダーのマジックナンバー「PE\0\0」
  • オプションのヘッダーIIRCのバージョン識別子。PEファイルの場合は0x10b、PE +(x64)ファイルの場合は0x20bです。

それを超えると、ファイル全体を解析し、すべてのプロセッサ命令を調べて、それが有効であることなどを確認する必要があります。一部のファイルは内部でCOFF仕様を使用しており、それを区別する簡単な方法がない場合があります。PEのフォーマット自体は複数のマシンで設計されており、ファイルを有効に保ちながら、さまざまな形式のコンパイル済みコードを含めることができます。

于 2010-07-14T12:22:36.593 に答える
1

1つの方法は、GetBinaryType関数の使用法(http://msdn.microsoft.com/en-us/library/aa364819.aspxを参照)またはSHGetFileInfowithの使用法ですSHGFI_EXETYPE

于 2010-07-14T12:21:17.047 に答える