4

运行signtool.exe verify /a /v C:\Windows\notepad.exe我可以看到 notepad.exe 的签名在C:\Windows\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\ntexe.cat. signtool 如何知道此 pe 文件的签名所在的位置?

我正在尝试在 python 中复制这种 signtool 行为。获得目录文件后,我可以使用下面的代码获取证书信息,但我看不到 windows 如何将文件链接到目录。

import win32com.client
catpath = "C:\\Windows\\system32\\CatRoot\\{F----E}\\nt5.cat"
signedCode = win32com.client.Dispatch('capicom.signedcode')
signedCode.FileName=catpath
signedCode.Verify()
certs = signedCode.Certificates
for cert in certs:
    print cert.Archived
    print cert.IssuerName
    print cert.SerialNumber
    print cert.SubjectName
    print cert.Thumbprint
    print cert.ValidFromDate
    print cert.ValidToDate
    print cert.Version

但是如何获取可执行文件所在的安全目录文件?

4

1 回答 1

4
免责声明:以下是基于测试的粗略猜测,因为确切的过程没有记录。

Windows 扫描 System32\CatRoot\{F7--EE} 中的每个 cat 文件,将它们添加到系统目录数据库,并根据每个条目的文件哈希/标记值对它们进行粗略排序。
(由包含数据库进程日志的 CatRoot2\dberr.txt 显示)
数据库是文件 System32\CatRoot2\{F7--EE}\catdb。
在 catdb 中,文件哈希后跟其在 CatRoot\{F7--EE} 中的 cat 文件名。
请注意,哈希不包括 PE 校验和和证书表条目。
可以从 SignTool verify /v 或this获得哈希。
于 2015-03-17T01:21:23.057 回答