signtool对EXE进行签名

简介: https://msdn.microsoft.com/zh-cn/library/9sh96ycy(VS.80).aspx  .NET Framework 2.0   其他版本   文件签名工具使用 Authenticode 数字签名对可移植可执行 (PE) 文件(.dll 或 .exe 文件)进行签名。
https://msdn.microsoft.com/zh-cn/library/9sh96ycy(VS.80).aspx 
.NET Framework 2.0
 

文件签名工具使用 Authenticode 数字签名对可移植可执行 (PE) 文件(.dll 或 .exe 文件)进行签名。可以对多文件程序集中包含的某个程序集或个别的文件进行签名。如果要分发某个程序集,则应该对该程序集而不是对个别文件签名。不指定任何选项运行 Signcode.exe 将启动帮助签名的向导。

文件签名工具仅随 .NET Framework SDK 1.0 和 1.1 版一起提供。在较新的 .NET Framework SDK 版本中,请改用签名工具 (SignTool.exe) 实用工具。

 
 
signcode [options] filename | assemblyname

 

参数

 
参数 说明

filename

要签名的 PE 文件的名称。

assemblyname

要签名的程序集的名称。此文件必须包含程序集清单。

 
选项 说明

-$authority

指定证书的签名权限,必须为 individual 或 commercial。默认情况下,Signcode.exe 使用证书的最高权限。

-aalgorithm

指定签名的哈希算法,必须为 md5(默认值)或 sha1

-c file

指定包含编码软件发布证书的文件。

-cn name

指定证书的公共名。

-i info

指定获得有关内容的更多信息的位置(通常为 URL)。

-j dllName

指定一个 DLL 的名称,该 DLL 返回用于创建文件签名的已验证属性数组。通过重复 -j 选项可以指定多个 DLL。

-jp param

指定为前述 DLL 传递的参数。例如:-j dll1 -jp dll1Param。此工具只允许每个 DLL 有一个参数。

-kkeyname

指定密钥容器名。

-kykeytype

指定密钥类型,必须为 signatureexchange 或一个整数(如 4)。

-n name

指定表示要签名的文件内容的文本名称。

-p provider

指定系统上的加密提供程序的名称。

-r location

指定注册表中证书存储区的位置,必须为 currentuser(默认值)或 localmachine

-s store

指定包含签名证书的证书存储区。默认为 my 存储区。

-sha1thumbprint

指定 thumbprint,它是包含在证书存储区中的签名证书的 sha1 哈希。

-sp policy

设置证书存储区策略,必须为 spcStore(默认值)或 chain。如果指定 chain,则验证链中的所有证书(包括自签署证书)都将被添加到签名中。如果指定 spcStore,则受信任的自签署证书将不与验证链中添加到签名的证书包括在一起。

-spc file

指定包含软件发布证书的 SPC 文件。

-t URL

指示位于指定 http 地址的时间戳服务器将为该文件创建时间戳。

-tr number

指定成功前试验时间戳的最多次数,默认为 1。

-twnumber

指定两次数据戳试验之间的延迟(以秒为单位)。默认为 0。

-v pvkFile

指定包含私钥的私钥 (.pvk) 文件名。

-x

为文件创建时间戳,但不创建签名。

-y type

指定要使用的加密提供程序类型。

加密提供程序中实现了加密标准和算法。有关默认提供程序类型的列表,请参见 Platform SDK 中的“Microsoft 密服务提供程序”。

-?

显示该工具的命令语法和选项。

备注
 
 

若要使用发行者证书 (SPC) 文件创建签名,如果私钥在 PVK 文件中,则必须指定 -spc 和 -v 选项。如果私钥在注册表密钥容器中,则必须指定 -spc 和 -k 选项。如果要使用 SPC 文件为文件创建签名,应使用证书创建工具软件发行者证书测试工具创建 SPC 文件。

示例
 
 

下面的命令使用 XYZ.spc 软件发行者证书和注册表密钥容器 XYZ 中的私钥来对 XYZ.exe 进行签名。

 
 
signcode /spc XYZ.spc /k XYZ XYZ.exe

下面的命令使用 myCertificate.spc 中的证书和 myKey.pvk 中的私钥对程序集 myAssembly 进行签名。

 
 
signcode /spc myCertificate.spc /v myKey.pvk  myAssembly

 

数字证书,真是个神奇的东西,可以保证软件不被修改,可以表明文件的发布日期,最重要的,可以很大程度的减少杀毒软件的误报,当然,这就要使用可信任的机构颁发的证书了。

现在要说的不是申请证书,而是如何制作自己的证书。

1.安装windows sdk

生成证书和签名工具都包含在里面,Visual Studio应该都有自带了,以下内容中使用的工具都可以在C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin里面找到

2.创建 X.509 证书

MSDN对Makecert.exe(证书创建工具)的介绍:

证书创建工具生成仅用于测试目的的 X.509 证书。
它创建用于数字签名的公钥和私钥对,并将其存储在证书文件中。
此工具还将密钥对与指定发行者的名称相关联,并创建一个 X.509 证书,该证书将用户指定的名称绑定到密钥对的公共部分。

使用这个命令行创建证书:

Makecert -sv abc.pvk -r -n “CN=XXX公司” abc.cer

-sv abc.pvk创建一个密钥文件,来保存私钥,创建时需要输入一个密码。

3.创建发行者证书

MSDN对Cert2spc.exe(软件发行者证书测试工具)的介绍:

发行者证书测试工具通过一个或多个 X.509 证书创建发行者证书 (SPC)。
Cert2spc.exe 仅用于测试目的。
可以从证书颁发机构(如 VeriSign 或 Thawte)获得有效的 SPC。

使用下面的命令行创建发行者证书:

Cert2spc abc.cer abc.spc

4.导出pfx证书文件

使用pvk2pfx.exe工具从pvk文件中导出pfx文件:

 

pvk2pfx -pvk abc.pvk -pi mypassword -spc abc.spc -pfx abc.pfx -f

 

把"mypassword "密码替换为第二步时输入的密码

5.对自己的软件签名

使用signtool.exe进行签名,MSDN对SignTool.exe(签名工具)的介绍:

签名工具是一个命令行工具,用于对文件进行数字签名,验证文件和时间戳文件中的签名。

如果要对abc.exe进行签名:

signtool sign /f abc.pfx /p mypassword abc.exe

把其中的密码替换为自己的密码。

6.对自己的软件加盖时间戳

可以使用WoSign提供的时间戳服务:http://timestamp.wosign.com/timestamp

signtool timestamp /t http://timestamp.wosign.com/timestamp abc.exe

 

如果上面的步骤都正确,那么结果就是这样的:


 

 

签名之后,自己的软件瞬间就变的专业了有木有!

当然,这样的签名只是自慰罢了,没有什么实际用途,真正有用的证书还是要去专业机构申请的。。

目录
相关文章
|
开发框架 安全 前端开发
[ 代码审计篇 ] Java web 代码审计 详解(一)
之前写了一篇关于代码审计流程的文章,有小伙伴私聊我说不太好理解,这里开始介绍 Java web 的代码审计,同样的来捋一捋审计思路,这就相对要具体一些。
2383 0
[ 代码审计篇 ] Java web 代码审计 详解(一)
|
安全 Java Android开发
DigiCert代码签名证书
DigiCert代码签名证书
505 0
|
Java Windows
签名验签工具
我们提供了一键生成RSA密钥工具。该工具也提供了签名及验签功能,可以演示针对支付宝开放平台接口的签名和验签流程。 WINDOWS版本下载地址:WINDOWS MAC OS版本下载地址:MAC_OSX 解压后,WINDOWS版本双击文件“RSA签名验签工具.bat”即可运行工具。
4914 0
|
安全 Go
用 Zap 轻松搞定 Go 语言中的结构化日志
在现代应用程序开发中,日志记录至关重要。Go 语言中有许多日志库,而 Zap 因其高性能和灵活性脱颖而出。本文详细介绍如何在 Go 项目中使用 Zap 进行结构化日志记录,并展示如何定制日志输出,满足生产环境需求。通过基础示例、SugaredLogger 的便捷使用以及自定义日志配置,帮助你在实际开发中高效管理日志。
389 1
|
8月前
|
Windows
Windows程序的数字签名证书怎么申请
Windows程序的数字签名证书申请流程包括:准备企业资料(营业执照、税务登记证等),提交申请表及企业资料。经过初审、实名认证和二审后,等待1-5个工作日审核结果。审核通过后,CA机构颁发证书并通过邮件或邮寄方式发送。收到证书后按指南安装并使用签名工具对程序进行数字签名,确保软件完整性和可信度。注意证书有效期、管理和兼容性问题。
|
9月前
|
算法 测试技术 Go
Go 1.24.0 重磅发布:新特性、新工具,开发者必看!
`Go 1.24.0` 已正式发布,带来诸多改进和新特性。语言层面上,泛型类型别名现已被完全支持;性能方面,通过优化 `map` 实现和内存分配,减少了 2-3% 的 CPU 开销;工具链新增模块工具依赖跟踪及测试分析器;标准库增加了弱引用包、FIPS 140-3 合规机制等;WebAssembly 支持也得到了增强。快来下载体验吧!
544 7
|
Rust 图形学
【unity实战】使用unity制作一个类似Rust的3D生存建造建筑系统,具有很好的吸附性(附项目源码)
【unity实战】使用unity制作一个类似Rust的3D生存建造建筑系统,具有很好的吸附性(附项目源码)
582 1
|
11月前
|
存储 安全 网络安全
EV代码签名证书怎么申请?
在数字化时代,EV(Extended Validation)代码签名证书因其严格的验证过程和高信任级别,成为软件开发者确保软件真实性和完整性的重要工具。本文介绍了EV代码签名证书的概述、申请流程、重要性及实际应用价值,强调了其在提升用户信任、软件安全性和品牌形象等方面的作用。PinTrust作为数字证书安全服务商,提供多种类型的证书,是企业和机构值得信赖的合作伙伴。
EV代码签名证书怎么申请?
|
Windows
代码签名证书如何申请
代码签名证书如何申请
386 0
|
Java Spring
快速解决Spring Boot跨域困扰:使用CORS实现无缝跨域支持
这是一个简单的配置示例,用于在Spring Boot应用程序中实现CORS支持。根据你的项目需求,你可能需要更详细的配置来限制允许的来源、方法和标头。
1367 3