我需要验证给定的二进制文件是否为PE文件(例如,如果我将JS / HTML或.class文件重命名为.exe或.dll,则它仍然不是PE文件)。解析PE文件将为我提供有关此问题的信息; 哪个字段指示给定的二进制文件是否为有效的PE文件?
我已经检查了FileHeader的“e_magic”字段,在错误的PE文件的情况下它总是被填充,并且并不能说明PE文件的有效性。
我需要验证给定的二进制文件是否为PE文件(例如,如果我将JS / HTML或.class文件重命名为.exe或.dll,则它仍然不是PE文件)。解析PE文件将为我提供有关此问题的信息; 哪个字段指示给定的二进制文件是否为有效的PE文件?
我已经检查了FileHeader的“e_magic”字段,在错误的PE文件的情况下它总是被填充,并且并不能说明PE文件的有效性。
如果存在这样的字段,那么就太容易创建一个无效的exe并故意标记为有效了。
你可以通过读取PE头并检查所有字段的值(这些值应该属于有效范围,不应指向文件外部等)来验证文件是否为PE文件。
一种方法是使用GetBinaryType
函数(参见http://msdn.microsoft.com/en-us/library/aa364819.aspx),或者使用带有SHGFI_EXETYPE
的SHGetFileInfo
。