作为一名软件开发工程师,经常写一些代码,我擅长写VS.NET,比如早期的VB6.0,以及VB.NET和C#,比如说,我要写VB.NET和winform即windows窗体应用程序(*.exe)。
无论是在VB6上写代码生成.exe,还是用vb.net写.exe,都无法避免对代码进行安全性检查,由于辛苦开发出来的程序和软件,总是被360安全卫士拦截和删除。特别是在VB6上写的代码,调试没有问题,生成.exe写没有任何问题。
但是,360安全卫士,总是报告有安全问题,有的直接删除,像微软WIN10系统 自带的杀毒软件,有时候也会报告有安全问题,有时也会删除。还有百度,金山毒霸,赛门铁克。。。等等。杀毒软件总是不能正确的识别软件开发的.exe,怎么办呢。
在网上找来找去,发现问题,就是要给开发的软件.exe和.dll进行数字签名。网上有文章写着,建议购买有官方权威颁发的数字证书,进行签名解决360误报的问题。也可以用signtool这个VS自带的工具,生成测试正书,对开发的软件.exe和dll进行认证。认证成功的软件,360和杀毒软件就不会再误报了,也不会再无缘无故的给删除了。
经测试,签名工具signtool可以成功签名,操作方法如下:
1. 创建证书
makecert -sv my.pvk -r -n "CN=ztrust" my.cer
在弹出的界面设置密码,我设置为123456
2. 创建发行者证书
cert2spc my.cer my.spc
3. 导出pfx证书文件
pvk2pfx -pvk my.pvk -pi 123456 -spc my.spc -pfx my.pfx -f
123456为第一步设置的密码
4. 给main.exe添加sha1签名
signtool sign /f my.pfx /p 123456 /t http://timestamp.comodoca.com /v d:\main.exe
http://timestamp.comodoca.com/为免费时间戳服务,有需要自行替换
5. 给main.exe继续添加sha256签名
signtool sign /f my.pfx /p 123456 /fd sha256 /tr http://timestamp.comodoca.com /td sha256 /as /v d:\main.exe
特别说明:
以上签名工具,在给软件exe和dll进行签名时,上面1-4步可以顺利进行,第5条会提示参数错误,签名不能成功。原因可能是开发平台vs 2005/2008/2010/中,签名软件版本太低,造成的参数不能运行,解决方法是:
下载安装vs.net 2015/2017/2019/2022以上版本,也可以安装windows sdk 10以上版本,进行签名,即可实现对软件的数字签名。
附件下载windows 10 SDK开发包,安装好之后里边C:\Program Files (x86)\Windows Kits\10\bin\x64目录下面有最新的签名工具signtool.exe,文件大小422KB。
windows 10 Sdk下载地址如下:
http://www.asiaitell.com/Windows10 SDK_10.0.14393.795.7z
请大家认真测试,如果以上命令无法运行,请在下面留言,我看到后会回复。