我需要验证给定的二进制文件是否是PE文件(例如,如果我将JS / HTML或.class文件重命名为.exe或.dll),它仍然不是PE文件。解析PE文件会给我关于这个问题的信息;什么字段表示给定的二进制文件是否是有效的PE文件?
我检查了FileHeader的“e_magic”字段,它总是在错误的PE文件(即js / html / java / class文件重命名为.dll / Exe)的情况下填充,并且没有说明任何关于PE的有效性。
答案 0 :(得分:6)
如果存在这样的字段,则创建无效的exe并且故意将其标记为有效是太容易了。
通过读取PE标头并检查所有字段的值来验证文件是否为PE文件(这些值应属于有效范围,不应指向文件外等)。
答案 1 :(得分:2)
检查Portable Executable/Common Object File Format Specification。您需要检查三个神奇的值:
除此之外,您必须解析整个文件并查看每个处理器指令以确保其有效等。其中一些文件在内部使用COFF规范,您可能没有一种简单的方法来区分它。 PE的格式本身是用多台机器设计的,可以包含许多不同形式的编译代码,同时保持文件有效。
答案 2 :(得分:1)
一种方法是使用GetBinaryType
函数(请参阅http://msdn.microsoft.com/en-us/library/aa364819.aspx)或SHGetFileInfo
与SHGFI_EXETYPE
的使用。