Winapi 我可以从DLL中删除数字签名吗?

Winapi 我可以从DLL中删除数字签名吗?,winapi,dll,code-signing,Winapi,Dll,Code Signing,我的安装程序生成在生成过程中使用代码签名证书对DLL进行签名 我注意到,如果我尝试连续构建两次,第二次构建会失败,因为DLL已经签名,所以签名代码阻塞。显然,我可以通过在构建中对DLL副本进行签名来解决此问题,但这个问题引起了我的兴趣: 是否可以取消DLL的签名,如果不可以,为什么不…?确定这是可能的,但不是微不足道的 虽然保存预签名DLL的副本会更容易 这个数字签名只不过是附加到PE文件末尾的一个额外部分。如果需要,您可以编写一个删除签名的程序 它不像截断文件那么简单;您必须删除对文件头中签名

我的安装程序生成在生成过程中使用代码签名证书对DLL进行签名

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


是否可以取消DLL的签名,如果不可以,为什么不…?

确定这是可能的,但不是微不足道的

虽然保存预签名DLL的副本会更容易

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

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


PE文件的格式是公开记录的

另一种可能的选择是切换到。它附带了签名,并且对已经签名的二进制文件进行签名不会生成错误。我在构建过程中使用signtool.exe,即使某些东西已经签名,也没有任何困难


另外,检查问题

检查生成工具是否支持重新签名。这将替换所有现有签名

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

您可以从该工具中使用delcert.exe

下面是一个用于删除数字签名验证码的小工具 来自PE可执行文件,如*.exe、*.dll、*.mui等


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

您的标记中没有指定任何语言,但本文展示了如何在C中实现它

除此之外,如果你正在寻找一个简单的工具来为你做这项工作,你可以使用


在Windows SDK中提供,并且必须至少来自Windows 8 SDK工具包版本6.2.9200.20789,才能支持删除命令。

谢谢。不完全是我所希望的答案,例如只是运行一个工具,但我现在更好地了解密歇根州!这个工具使用ImageRemoveCertificateAPI,工作非常好。它甚至还附带了源代码,great.Hm,你在哪里见过singtool.exe的remove命令?那是哪个版本?你能链接一下吗?你现有的链接在我看来并没有显示出来。嗯,使用signtool/?查看选项@NikolaDavidovicWell,它没有删除命令。你自己检查一下。您提供的链接中没有列出它。所以我在问,当你写这个答案时,你使用的是什么signtool.exe版本?我检查了产品版本6.1.7600.16385。我使用Visual Studio命令提示符:C:\Program Files x86\Microsoft Visual Studio 14.0\VC>signtool/?用法:signtool[options]有效命令:使用嵌入签名对文件进行签名。timestamp—以前签名的文件的时间戳。验证-验证嵌入或目录签名。catdb-修改目录数据库。移除-移除嵌入式签名或减小嵌入式签名文件的大小。有关特定命令的帮助,请输入signtool/?@JConstantine证书主要用于指示:此文件已被某个机构批准。当某个未定义的用户删除证书时,指示为:此文件被不受信任的一方修改。我看这没什么问题。这毕竟是事实。
signtool remove /s C:\path\to.exe.or.dll