windows 有没有办法检查一个exe是否是带有python pefile的. NET?

yb3bgrhw  于 2023-01-27  发布在  Windows
关注(0)|答案(3)|浏览(144)

我正在尝试编写一个简单的python脚本;最好使用pefile,它可以告诉我exe或dll文件是否是用. NET编译的。我知道我可以查找字符串'BSJB'来查看程序是否是用.NET编写的,但我尝试使用比使用grep和字符串更复杂的方式来完成此操作。运行pefile.PE('my.exe').dump_info()给了我一些很好的信息,但还不足以确定它实际上是dot Net还是什么版本的dot Net。
谢谢!

zc0qhyus

zc0qhyus1#

可以通过检查是否填充了IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR(即,其VirtualAddress和Size不为零)来标识. NET程序集。该条目的名称容易混淆,但它是用于. NET元数据的名称;参见Names of PE directories
如果你需要程序集所需的框架版本,那么你必须自己解析元数据结构,pefile似乎不支持。如果你能做到这一点,那么根据http://www.ntcore.com/files/dotnetformat.htm,你会在那里找到名为MajorRuntimeVersion和MinorRuntimeVersion的字段,尽管我不确定应该如何解释它们。

nhhxz33t

nhhxz33t2#

最终代码为:

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'
mccptt67

mccptt673#

我不认为检查.NET大小是一个很好的方法,例如,Mono不关心.NET大小-它可以是零。
我想检查虚拟地址就足够了。

相关问题