我的安装程序在构建过程中使用代码签名证书构建“签名”DLL。
我注意到,如果我尝试连续构建两次,第二次构建会失败,因为 DLL 已经签名,所以 signcode 阻塞。显然我可以通过在构建中签署 DLL 的副本来解决这个问题,但这个问题引起了我的兴趣:
是否可以“取消签名”DLL,如果没有,为什么不...?
我的安装程序在构建过程中使用代码签名证书构建“签名”DLL。
我注意到,如果我尝试连续构建两次,第二次构建会失败,因为 DLL 已经签名,所以 signcode 阻塞。显然我可以通过在构建中签署 DLL 的副本来解决这个问题,但这个问题引起了我的兴趣:
是否可以“取消签名”DLL,如果没有,为什么不...?
signtool remove /s C:\path\to.exe.or.dll
signtool在 Windows SDK 中可用,并且必须至少来自 Windows 8 SDK 工具包(版本 6.2.9200.20789)才能remove支持该命令。
您可以使用此XDA 论坛帖子中的 delcert.exe 。
这是一个从 PE 可执行文件(如 *.exe、*.dll、*.mui 等)中剥离(删除)数字签名(Authenticode)的小工具。
使用ImageRemoveCertificate API从 .dll 文件中删除签名相当容易。
您的标签中没有指定任何语言,但本文展示了如何在 C# 中实现它。使用 C# 从文件中删除数字签名
除此之外,如果您正在寻找一个简单的工具来为您完成工作,您可以使用FileUnsigner。
另一种可能的选择是切换到SignTool.exe。它随Windows SDK一起提供,对已签名的二进制文件进行签名不会产生错误。我在构建过程中使用 signtool.exe 并且没有任何困难,即使已经签署了某些内容。
当然这是可能的,但不是微不足道的。
尽管保存预签名 DLL 的副本会更容易。
这个数字签名只不过是附加到 PE 文件末尾的一个额外部分。如果需要,您可以编写一个删除签名的程序。
它不像截断文件那么简单;您必须删除文件头中对签名的引用。如果 DLL 有多个签名并且您只想删除一个签名,它可能会变得复杂。
PE 文件的格式在此处公开记录
检查您的构建工具是否支持“重新签名”。这应该替换所有现有的签名。
如果没有,您可以使用Stud_PE删除签名块。在 Stud_PE 中打开 DLL 或 EXE,转到部分选项卡,右键单击数字签名部分并选择“删除部分”。但是,这需要用户交互。该工具的旧版本可能会破坏该文件。