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