有没有办法检查exe是否是使用python pefile的点NET?

时间:2017-08-08 17:49:52

标签: python windows exe

我正在尝试编写一个简单的python脚本;最好使用pefile,它可以告诉我exe或dll文件是否编译为.NET。我知道我可以找到字符串' BSJB'看看程序是用.NET编写的,但我试图用比pyp和字符串更加pythonic的方式来做。运行pefile.PE(' my.exe')。dump_info()给了我一些很好的信息,但还不足以确定它是不是点数Net或者是什么版本的dot Net。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以通过检查是否填写了IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR来识别.NET程序集(即,其VirtualAddress和Size不为零)。该条目的名称令人困惑,但它是用于.NET元数据的名称;见Names of PE directories

如果你需要程序集所需的框架版本,那么你必须自己解析元数据结构,pefile似乎并不支持它。如果你能做到这一点,那么根据http://www.ntcore.com/files/dotnetformat.htm你会在那里找到名为MajorRuntimeVersion和MinorRuntimeVersion的字段,虽然我不确定应该如何解释这些字段。

答案 1 :(得分:1)

最终代码最终成为:

isDotNet = pe.OPTIONAL_HEADER.DATA_DIRECTORY[14]
if isDotNet.VirtualAddress == 0 and isDotNet.Size == 0:
    print colors.RED + 'Not a .NET executable'
else:
    print colors.BLUE + 'Is a .NET executable'