29

我的安装程序在构建过程中使用代码签名证书构建“签名”DLL。

我注意到,如果我尝试连续构建两次,第二次构建会失败,因为 DLL 已经签名,所以 signcode 阻塞。显然我可以通过在构建中签署 DLL 的副本来解决这个问题,但这个问题引起了我的兴趣:

是否可以“取消签名”DLL,如果没有,为什么不...?

4

6 回答 6

34
signtool remove /s C:\path\to.exe.or.dll

signtool在 Windows SDK 中可用,并且必须至少来自 Windows 8 SDK 工具包(版本 6.2.9200.20789)才能remove支持该命令。

于 2016-10-21T09:33:13.010 回答
31

您可以使用此XDA 论坛帖子中的 delcert.exe 。

这是一个从 PE 可执行文件(如 *.exe、*.dll、*.mui 等)中剥离(删除)数字签名(Authenticode)的小工具。

于 2012-04-06T15:42:31.027 回答
15

使用ImageRemoveCertificate API从 .dll 文件中删除签名相当容易。

您的标签中没有指定任何语言,但本文展示了如何在 C# 中实现它。使用 C# 从文件中删除数字签名

除此之外,如果您正在寻找一个简单的工具来为您完成工作,您可以使用FileUnsigner

于 2013-02-04T04:29:23.953 回答
10

另一种可能的选择是切换到SignTool.exe。它随Windows SDK一起提供,对已签名的二进制文件进行签名不会产生错误。我在构建过程中使用 signtool.exe 并且没有任何困难,即使已经签署了某些内容。

另外,请查看问题signcode.exe 和 signtool.exe 之间的主要区别是什么?

于 2011-03-11T02:34:18.223 回答
7

当然这是可能的,但不是微不足道的。

尽管保存预签名 DLL 的副本会更容易。

这个数字签名只不过是附加到 PE 文件末尾的一个额外部分。如果需要,您可以编写一个删除签名的程序。

它不像截断文件那么简单;您必须删除文件头中对签名的引用。如果 DLL 有多个签名并且您只想删除一个签名,它可能会变得复杂。

PE 文件的格式在此处公开记录

于 2009-01-27T05:14:05.760 回答
3

检查您的构建工具是否支持“重新签名”。这应该替换所有现有的签名。

如果没有,您可以使用Stud_PE删除签名块。在 Stud_PE 中打开 DLL 或 EXE,转到部分选项卡,右键单击数字签名部分并选择“删除部分”。但是,这需要用户交互。该工具的旧版本可能会破坏该文件。

于 2012-03-27T14:49:24.163 回答