Windows如何将pe文件链接到目录文件中的签名?

时间:2013-05-29 15:39:57

标签: python windows security certificate signtool

运行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

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

1 个答案:

答案 0 :(得分:3)

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

Windows扫描System32 \ CatRoot \ {F7 - EE}中的每个cat文件,将它们添加到system catalog database并按每个条目的文件哈希/标记值对它们进行粗略排序。
(由CatRoot2 \ dberr.txt显示,其中包含数据库进程的日志)
数据库是文件System32 \ CatRoot2 \ {F7 - EE} \ catdb。
在catdb内部,文件哈希后面是CatRoot \ {F7 - EE}中的cat文件名。
注意哈希不包括PE校验和&证书表条目。
哈希可以从SignTool verify / v或this获得。