如何让Visual Studio 2015编译的C++可执行文件不被浏览器标记为不安全?
解决VS2015编译C++可执行文件被浏览器标记为危险的问题
作为经常用VS写小工具的开发者,我太懂这种无奈了——明明是自己写的无害小exe,结果浏览器一看到就直接标成危险文件,用户连下载按钮都点不了,解释起来特别费劲。下面几个亲测有效的方法,你可以参考:
给可执行文件添加数字签名
这是最靠谱的解决方案。浏览器和Windows的SmartScreen安全机制都会优先信任带有合法数字签名的文件,因为签名能证明文件的发布者身份,还能确保文件没有被篡改过。你可以从正规的CA机构申请一个代码签名证书,然后用VS自带的signtool.exe工具完成签名:
要么在VS项目属性里找到「链接器→高级」,设置「数字签名」选项;要么直接用命令行执行:signtool sign /f your-cert.pfx /p your-cert-password your-program.exe签名后的文件会被大多数主流浏览器识别为可信发布的内容,基本不会再被标记为危险。
向安全厂商提交文件哈希进行信任认证
像Chrome、Edge这类浏览器都会对接微软SmartScreen、谷歌安全浏览这类安全服务。你可以把编译好的exe文件的SHA-256哈希值提交给这些平台的信任申诉通道,说明这是你开发的无害工具,附上清晰的功能说明(比如“这是一个用于批量处理文本的小工具,无任何恶意行为”)。当厂商审核通过,或者有足够多的用户安全下载后,浏览器就会解除拦截。优化分发方式降低误判概率
如果暂时没拿到代码签名证书,也可以先试试改变分发方式:- 把exe打包成ZIP压缩包,有些浏览器对压缩包的拦截规则会宽松一些,用户解压后即使碰到系统提示,也更容易选择“保留”文件;
- 给exe配上一份简单的说明文档,讲清楚工具的功能、用途,让用户能明白这不是恶意程序,也能降低他们的恐慌感。
调整编译选项减少可疑特征
VS2015默认的一些编译设置可能会让安全工具误判。你可以做这些调整:- 给程序添加完整的版本信息:在项目属性→「资源→版本」里填写产品名称、发布者、版本号等信息,完整的元数据会让安全工具觉得这是正规发布的软件,而非无来源的可疑程序;
- 尽量使用静态编译(
/MT选项):动态链接的exe依赖系统DLL,有些安全工具会因为缺少依赖信息而误判,静态编译能把所有依赖打包进exe,减少这类误判。
内容的提问来源于stack exchange,提问作者Anne Quinn
相关产品推荐
相关产品推荐

