可以通过.NET代码签署一个二进制文件吗? (没有signtool.exe)

问题描述:

我有以下要求,签署一个证书的二进制文件,但没有signtool.exe;这个想法是通过代码来完成的。可以通过.NET代码签署一个二进制文件吗? (没有signtool.exe)

你知道这有可能吗?

+0

重复? http://*.com/questions/692565/how-do-you-programmatically-resign-a-net-assembly-with-a-strong-name – Nikolay 2012-03-29 09:51:22

+0

确实。感谢您发现这一点。那就是说,我该怎么做?删除这个问题,还是保持开放状态,因为它没有以同样的方式提问? – Vinzz 2012-03-29 11:58:23

+0

不重复。 'signtool.exe'(在这里引用)生成Authenticode签名(对于任何PE文件); “强命名”(在另一个问题中提到)使用'sn.exe',仅用于托管程序集。 – 2012-03-29 12:45:38

您将需要使用从mssign32.dll导出的SignerSignSignerSignEx函数。

要使用这些,你需要定义SIGNER_SUBJECT_INFOSIGNER_FILE_INFOSIGNER_CERTSIGNER_SIGNATURE_INFO等结构的管理版本,然后正确指定的P/Invoke签名的本地方法。

this blog post的中途,有一个C++的例子叫做SignerSignEx; Mark已将其移植到此* answer中的C#中。

+0

谢谢,我会试一试 – Vinzz 2012-03-29 13:25:47

+0

没有得到它在C#中工作(没有花费足够的时间,是在一个非常短的期限内),但它在完美的旧C++ 。谢谢! – Vinzz 2012-06-10 12:49:39

+0

如果您使用的是Windows 8,请使用signerSignEx2 – 2014-07-13 11:05:08