欢迎来到电脑知识学习网,专业的电脑知识大全学习平台!

手机版

不有效pe文件-(不是有效的pe文件)

软件应用 发布时间:2022-11-20 04:31:07
不有效pe文件 (不有效pe文件)

【摘要】 签名信息中有许多有用的信息,可以帮助安全检测二进制软件。读者可以从这个博客中了解到pe如何组织和使用文件中的签名信息?python代码从pe获取嵌入式签名信息等知识。

什么是pe文件签名信息:
以windows系统中NDIS.sys以驱动程序为例,如果文件右键属性窗口中包含数字签名属性页面,则表示pe签名信息嵌入文件,如下图所示:

双击签名列表时,可查看数字签名信息的细节,如下图所示:

包含在细节中签名者信息以及签名时间戳在查看高级属性页面时,可以看到更丰富的签名信息,如下图所示:

其中包括与密码学问题相关的信息,如摘要算法、摘要加密算法等
点击查看证书时,可查看证书详情,如下图所示:

由此可见重要信息

点击查看证书时,可查看证书详情,如下图所示:


由此可见重要信息

。安全工具可以通过分析上述重要信息来判断是否存在安全风险。例如,是否使用不安全密码算法、密钥长度是否符合安全规范、证书有效期是否有效等。

pe如何保存这些签名信息数据:

利用peview.exe工具来查看Ndis.sys在驱动程序中看到签名信息存在IMAGE_NT_HEADER结构里面,如下图所示:

分析签名结构后,可以在文件中获得签名信息偏移地址和数据长度

信息,

python代码如下

security_entry = pefile.DIRECTORY_ENTRY["IMAGE_DIRECTORY_ENTRY_SECURITY"]sig_off = pe_obj.OPTIONAL_HEADER.DATA_DIRECTORY[security_entry].VirtualAddresssig_len = pe_obj.OPTIONAL_HEADER.DATA_DIRECTORY[security_entry].Size

根据偏移地址和数据长度获取签名数据,python代码如下:

with open(file_path, 'rb') as fh: fh.seek(sig_off) sig_raw_data = fh.read(sig_len)# 签名数据的结构如下:# DWORD dwLength 签名证书数据长度# WORD wRevision 签名证书版本号# WORD wCertificateType 签名证类型# BYTE bCertificate[dwLength]签名证书数据# 签名证书版本号# Version 1 is the legacy version of WIN_CERTIFICATE.WIN_CERT_REVISION_1_0 = 0x0100# Version 2 is the current version of WIN_CERTIFICATE.WIN_CERT_REVISION_2_0 = 0x0200# 签名证类型# X.509 CertificateWIN_CERT_TYPE_X509 = 0x0001# PKCS SignedData structureWIN_CERT_TYPE_PKCS_SIGNED_DATA = 0x0002# ReservedWIN_CERT_TYPE_RESERVED_1 = 0x0003# Terminal Server Protocol Stack Certificate signingWIN_CERT_TYPE_TS_STACK_SIGNED = 0x0004

使用ASN.1 Editor工具可查看签名证数据,如下图所示:

Python中可以利用
asn1crypto组件解决签名证书析,python样例代码如下:info = cms.ContentInfo.load(seq_data)signed_data = info['content']cert_set = signed_data["certificates"cert_set您可以获取所有证书的详细信息for cert in cert_set:cert_data = cert.dump()cert = x509.Certificate.load(cert_data)#解析cert通过以通过搜索获取证书细节#id-ct-TSTInfo content type 1.2.840.113549.1.9.16.1.4.获取签名时间信息encap_content_info = signed_data['encap_content_info']# id-ct-TSTInfo content typetst_info = tsp.TSTInfo.load(encap_content_info['content'].parsed.dump())signing_time = tst_info['gen_time'].native.astimezone().strftime('%Y-%m-%d %H:%M:%S';)此外,非签名数据属性包含在签名数据中,python样例代码如下:signer_info = cms.SignerInfo.load(obj.contents)attrs = signer_info['unsigned_attrs']
需要注意的是,获取签名时间戳等信息的方法不同,常见属性有:

counter_signature

microsoft_nested_signature

microsoft_time_stamp_token

这些属性中嵌套有其他签名证书结构数据

通过对这些层层数据结构的分析,可以获得证书的所有详细信息,如下图所示【总结】利用python分析方便pe文件中的签名信息,以验证软件的签名信息是否符合相关安全规范的要求,实现安全检测。
电脑知识
责任编辑:电脑知识学习网

软件应用