修改System.Comment会破坏数字签名?Windows文件元数据修改与签名验证疑问
修改System.Comment会破坏数字签名?Windows文件元数据修改与签名验证疑问
首先可以明确地告诉你:这确实是Windows数字签名机制的设计行为,你的观察完全正确,修改这类元数据确实会破坏signtool.exe生成的数字签名。
之所以会出现这种情况,核心原因在于Windows数字签名的验证逻辑,以及这类元数据的存储方式:
- 当你用
signtool.exe给文件(比如MSI、PE格式的EXE/DLL)签名时,签名本质是对文件的核心内容(包括部分元数据字段)计算哈希值,然后用你的私钥对这个哈希进行加密。验证签名时,系统会重新计算文件当前的哈希值,和签名中附带的原始哈希对比——只要两者不一致,就会判定签名无效。 - 你修改的
System.Comment这类属性,对于MSI和PE文件来说,并不是存储在文件外部的“附加区域”(比如NTFS交替数据流),而是直接嵌入在文件自身的结构内部:比如MSI文件的摘要信息流、PE文件的资源节。修改这些属性会直接改变文件的字节内容,自然会导致哈希值变化,触发签名验证失败。
你提到的困惑其实很常见——很多人会觉得“评论、标签这类元数据属于文件的‘附加信息’,不应该影响核心签名”,但这取决于文件类型和元数据的存储方式:
- 对于普通的非签名文件(比如TXT、JPG),部分元数据可能存储在不影响主文件哈希的区域,修改后不会有问题;
- 但对于经过代码签名的MSI/PE文件,这类元数据属于签名覆盖的“不可修改范围”,任何改动都会被视为文件内容被篡改。
如果你的需求是修改已签名文件的这类元数据,正确的流程应该是:
- 先用
signtool.exe remove移除原文件的签名; - 修改所需的元数据(比如
System.Comment); - 最后用
signtool.exe sign重新对文件进行签名。
备注:内容来源于stack exchange,提问作者paulgutten
相关产品推荐
相关产品推荐

