如果你查看%SystemRoot%目录中PE文件的属性,你会惊奇的发现没有“数字签名”这个选项卡。查看PE文件的程序,如PE Explorer,也显示这些文件没有digital signature。难道这些最重要,最需要保护的文件会不带数字签名?搜索了好一阵,我才弄清楚事情的真相。原来AuthentiCode数字签名分两类-embedded和CAT签名。Embedded就是把签名直接包含在PE文件里,这是应用程序常见的签名方式。而CAT签名,是把被签名文件的hash放在一个“catalog”文件里,然后签名这个CAT文件,这样,所有被这个CAT文件包含的PE文件都被间接签名了。Windows的系统文件采用的就是CAT签名的方式。
如何验证CAT签名呢?方式之一是用.net 2.0 SDK中的signtool工具,以验证notepad.exe为例:
C:\WINDOWS>signtool verify /a /v notepad.exe
Verifying: notepad.exe
File is signed in catalog: C:\WINDOWS\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-
00C04FC295EE}\NT5.CAT
...(略去若干信息)
Successfully verified: notepad.exe
Number of files successfully Verified: 1
Number of warnings: 0
Number of errors: 0
命令行的意思是验证notepad.exe,/a是要求signtool自动搜索签名,首先尝试“search for a catalog using all catalog databases”,而输出的结果显示notepad.exe的hash在C:\WINDOWS\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-
00C04FC295EE}\NT5.CAT里面。
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment