Windows 7 Driver .cat Hash Validation - Are sys files modified before/after hash calculation?
Windows 7 Driver .cat Hash Validation - Are sys files modified before/after hash calculation?
我一直在学习 Windows 驱动程序 Signing/Validation 过程,包括 Windows 7 上的安装过程。
我知道作为安装过程的一部分,Windows 需要一个 .inf 文件和一个 .cat 文件以及包含实际驱动程序的 .sys 文件。但是,我对散列验证过程的工作原理有点困惑。我看过很多例子,当打开 .cat 文件并查看其中存储的 sha1 指纹时,.cat 文件的 sha1 指纹始终与 .inf 文件正确匹配,但从来没有与 .sys 文件或其他相关文件,例如 WDF 协同安装程序。尽管如此,如果通过 pnputil 将驱动程序添加到驱动程序存储区,Windows 会顺利接受它们。
是 sys 文件以某种方式修改了 before/after sha1 指纹 generation/comparison(如果是,如何恢复它们以进行验证?),还是 windows在安装时只关心 .inf 文件的哈希值(msdn 似乎表明它适用于所有文件)。
非常感谢您的宝贵时间。
创建安全目录根本不会修改文件本身。目录文件是一组带有附加属性的摘要记录,它们本身可以进行数字签名,以允许检查不能包含自己的数字签名的文件。
存储的摘要不仅是给定文件的摘要,而且如果设置了正确的标志,还可以包括目录属性。请参阅 CRYPTCATATTRIBUTE 结构的文档。如果一个属性包含 CRYPTCAT_ATTR_AUTHENTICATED
,那么它会包含在摘要计算中。我不知道具体如何,因为它不仅仅是添加到摘要数据中的属性值。也不清楚为什么我的示例中的 .INF 文件没有包含这些,因为在我的示例中为 OSAttr 和 File 属性设置了此标志。
我一直在学习 Windows 驱动程序 Signing/Validation 过程,包括 Windows 7 上的安装过程。
我知道作为安装过程的一部分,Windows 需要一个 .inf 文件和一个 .cat 文件以及包含实际驱动程序的 .sys 文件。但是,我对散列验证过程的工作原理有点困惑。我看过很多例子,当打开 .cat 文件并查看其中存储的 sha1 指纹时,.cat 文件的 sha1 指纹始终与 .inf 文件正确匹配,但从来没有与 .sys 文件或其他相关文件,例如 WDF 协同安装程序。尽管如此,如果通过 pnputil 将驱动程序添加到驱动程序存储区,Windows 会顺利接受它们。
是 sys 文件以某种方式修改了 before/after sha1 指纹 generation/comparison(如果是,如何恢复它们以进行验证?),还是 windows在安装时只关心 .inf 文件的哈希值(msdn 似乎表明它适用于所有文件)。
非常感谢您的宝贵时间。
创建安全目录根本不会修改文件本身。目录文件是一组带有附加属性的摘要记录,它们本身可以进行数字签名,以允许检查不能包含自己的数字签名的文件。
存储的摘要不仅是给定文件的摘要,而且如果设置了正确的标志,还可以包括目录属性。请参阅 CRYPTCATATTRIBUTE 结构的文档。如果一个属性包含 CRYPTCAT_ATTR_AUTHENTICATED
,那么它会包含在摘要计算中。我不知道具体如何,因为它不仅仅是添加到摘要数据中的属性值。也不清楚为什么我的示例中的 .INF 文件没有包含这些,因为在我的示例中为 OSAttr 和 File 属性设置了此标志。