愚头的博客

一位图形学爱好者的唠叨

编译出的执行文件在他人机器上被报木马 Trojan:Win32/Sabsik.TE.A!ml

最近将一个 Golang 编译的执行文件放到他人机器上执行,但是 Microsoft Defender Antivirus 认为该执行文件含有木门病毒 - Trojan:Win32/Sabsik.TE.A!ml,结果不但不能运行还被自动删除😢。

那么对于这样的误报该如何处理?经过一番搜索后发现早就存在这样的误报问题,并且已经有人上报微软开发部门。不过时至今日似乎此问题依然存在。

对于这个问题最简单的处理方法是:在 Defender 里设置允许执行该文件。但是该方法对于普通用户来讲可能并不合理(用户为什么会完全信任你的软件呢)。所以还需要一个更合理的方案。

目前我所采用的解决方案是给执行文件进行数字签名,这样至少我的应用程序不会被删除。

给执行文件进行免费数字签名

签名工具需要安装 Windows SDK,当然也可以通过 Visual Studio Installer 来安装。

下面C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\Windows SDK 的安装地址,需要替换成你的安装目录,这个目录里应该能够找到signtool.exe文件。

假设执行文件叫myapp.exe

打开 CMD,执行如下命令:

第一步,设置PATH,方便后面执行签名程序:

SET PATH=C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\;%PATH%

第二步,制作签名文件(执行后会有弹框来设置一个签证密码,-n表示发布者的证书的名称,-ss表示将存储生成的证书的使用者证书存储的名称,更多详细的参数请参考这里):

makecert -n "CN=myapp.com,[email protected],C=China" -r myapp.cer -ss myapp.com -sv myapp.pvk -$ individual

第三步,接下来将签名文件.cer转换成.spc

cert2spc myapp.cer myapp.spc

第四步,通过.spc.pvk转换成.pfx

pvk2pfx -pvk myapp.pvk -spc myapp.spc -pfx myapp.pfx

最后,使用SignTool对执行文件myapp.exe进行数字签名:

signtool sign /fd SHA256  /f myapp.pfx myapp.exe

至此,您的这个执行文件就不会被误报含病毒😄。因为已经制作好.pfx文件,所以后续再签名仅执行最后一步即可。此方法主要是用于测试目的或开源项目,对于商业应用分发还是建议购买正版签名证书。

希望此方法对你也有帮助🤝。

(以下介绍取自微软官方介绍

代码签名简介

软件行业必须为用户提供信任代码的方法,包括 Internet 上发布的代码。 许多网页仅包含可以下载且风险很小的静态信息。 但是,某些页面包含要下载和运行在用户计算机上的控件和应用程序。 这些可执行文件可能会有下载和运行的风险。

打包的软件使用品牌和受信任的销售网点来保证用户的完整性,但在 Internet 上传输代码时,这些保证不可用。 此外,Internet 本身无法保证软件创建者的身份。 它也不能保证任何下载的软件在创建后未更改。 浏览器可以显示一条警告消息,说明下载任何类型的数据可能存在的危险,但浏览器无法验证代码是否是它声称的。 必须采取更活跃的方法,使 Internet 成为分发软件的可靠媒体。

提供文件的真实性和 完整性 保证的一种方法是将 数字签名 附加到这些文件。 附加到文件的数字签名会积极标识该文件的分发服务器,并确保在创建签名后未更改文件的内容。