代码之家  ›  专栏  ›  技术社区  ›  Usman

PE头的哪个字段表示是否为有效的PE文件?

  •  2
  • Usman  · 技术社区  · 16 年前

    我需要验证给定的二进制文件是否是PE文件(例如,如果我将js/html或.class文件重命名为.exe或.dll),它将不会仍然是PE文件。解析PE文件将提供有关此问题的信息;哪个字段指示给定的二进制文件是否为有效的PE文件?

    我已经检查了FielHead的“E-魔术”字段,它总是在错误的PE文件(即JS/HTML/Java/class文件重命名为.DLL/EXE)的情况下填充,并且不说任何关于PE的有效性。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Billy ONeal IS4    16 年前

    检查 Portable Executable/Common Object File Format Specification . 有三个魔力值供您检查:

    • 文件开头的mz头的幻数
    • PE头的幻数“PE\0\0”在PE头的开头
    • 可选头文件的版本标识符,iirc,对于PE文件为0x10B,对于PE+(x64)文件为0x20B。

    除此之外,您还必须解析整个文件,并查看每个处理器指令以确保它是有效的,等等。一些文件在内部使用COFF规范,您可能没有一个简单的方法来区分它。PE的格式本身是用多台机器设计的,在保持文件有效的同时,可以包含许多不同形式的编译代码。

        2
  •  6
  •   GSerg    16 年前

    如果存在这样的字段,那么很容易创建一个无效的exe并将其标记为有意有效。

    通过读取PE头并检查所有字段的值(值应属于有效范围,不应指向文件之外等),可以验证文件是否为PE文件。

        3
  •  1
  •   Oleg    16 年前

    一种方法是使用 GetBinaryType 函数(见) http://msdn.microsoft.com/en-us/library/aa364819.aspx )或者使用 SHGetFileInfo 具有 SHGFI_EXETYPE .

    推荐文章