编译一个 windows 可执行文件
docker run --rm -v $(pwd):/go/src -it golang /bin/bash
go version
mkdir -p hasvir
cd hasvir
echo "package main" > main.go
echo "func main(){}" >> main.go
go mod init
GOOS=windows go build
md5sum hasvir.exe
go 的版本是 1.20.5 。
把 hasvir.exe 提交到 https://www.virustotal.com 扫描,扫描出一大堆病毒。
我看不出操作和代码有什么问题,是从什么地方感染病毒的呢?是哪儿出问题了?
用 openssl 生成签名证书。
用 https://github.com/mtrojnar/osslsigncode 添加数字签名。
提交签名后的应用给 https://www.virustotal.com 扫描,仍然大量报毒,并没有减少误报。
自签的证书不能减少误报,花钱买的签名证书没有测试,最便宜的 Comodo Code Signing Certificate (OV) 都需要 $211.46 一年,买不起。
1
wu67 2023-06-14 15:01:21 +08:00
不一定是你代码的问题. 只是最近不少恶意程序都是 go 写的, 干脆直接把 go 写的全报毒了...
|
2
knightcatsq 2023-06-14 15:01:52 +08:00 via Android
可能是系统被污染了吧……
|
3
proxytoworld 2023-06-14 15:05:30 +08:00
go 本来就是容易报毒
|
4
StarUDream 2023-06-14 15:06:33 +08:00
|
5
whiler OP [报毒]( https://imgur.com/kZwvVjp)
|
6
whiler OP @knightcatsq 为了规避系统感染病毒的风险,特意在 docker 容器里编译的,编译完原地算的 md5 ,确保文件没有被外部系统篡改
|
7
whiler OP |
8
fzls 2023-06-14 15:20:17 +08:00
没签名的软件被误报毒很正常的-。-
|
9
xmoer 2023-06-14 15:37:34 +08:00
不是楼主的问题,它就是很容易报毒的,要么添加数字签名,要么一家家提交消除误报。
|
12
xmoer 2023-06-14 15:40:15 +08:00
@whiler 这很正常,因为现在有不少病毒或者恶意程序用 go 编写的,而主流的杀毒软件厂商基本都进入了 AI 自动分析时代,学习的样本多了就广泛误报,只能人工干预。
|
13
LeegoYih 2023-06-14 15:42:50 +08:00
很正常,杀毒软件对比特征库,宁可错杀一千。
比如易语言编译出来的二进制几乎会被所有杀毒软件杀。 |
14
tramm 2023-06-14 15:51:43 +08:00
代码中是不是用到了加密功能啥的?
|
17
oldshensheep 2023-06-14 16:04:01 +08:00
就是垃圾 WindwosDenfence ,我最近写 Go 程序也报毒,而且没有任何敏感操作,连读文件的操作都没有,写着写着就报毒。
|
19
whiler OP @oldshensheep 自己写的,自己清楚有没有病毒;若是打包发布出去供其他人用也报毒就难办,敏感的人直接就删除了
|
20
Kinnice 2023-06-14 16:35:35 +08:00
加壳,upx
|
21
CrossMythic 2023-06-14 16:49:01 +08:00
加壳之后杀的更厉害。 自己用验个 md5 就无所谓了,放出去用的话要么搞白签名,要么一步步二分代码去找到误报的接口,换个方式实现。
|
22
virusdefender 2023-06-14 17:03:01 +08:00
你这个太简单了,复杂的 go 程序不容易报毒
|
23
asmmt 2023-06-14 17:12:11 +08:00
淡定,Go 语言写个 helloworld 都报毒
|
24
LeegoYih 2023-06-14 17:20:38 +08:00
我用 Wails 开发的一个 GUI 客户端没有报毒,按#22 说的,可能复杂的项目不报毒,特征码占得总比例低于阈值。
|
26
whiler OP @CrossMythic 大佬,你看俺这个代码怎么个二分法……
|
27
whiler OP @virusdefender 我信了,你信不?
|
30
JSPIXiaoHei 2023-06-14 17:31:32 +08:00
rust 也报,写个二维码小工具都报,杀软用的 360
|
31
githmb 2023-06-14 17:48:58 +08:00
360 出没
|
32
Zwying 2023-06-14 18:04:38 +08:00
越容易上手的语言越容易报
|
33
webcape233 2023-06-14 18:07:23 +08:00 via iPhone
正常,我在公司的也报毒给我自动删了,我在 mod 文件中将 go 版本指定到更老的就正常了。 估计用的过新的编译出来的特征对杀毒软件来说还过于新鲜吧
|
34
dimwoodxi27 2023-06-14 18:09:28 +08:00
@CrossMythic VMP 了解下
|
35
webcape233 2023-06-14 18:10:05 +08:00 via iPhone
最恼火是,前面我不知道,每次 goland 编译完了去找二进制文件就发现不再了,让我一度怀疑没编译成功,公司杀软误伤了也不提示,后来看杀软记录才发现,然后降低版本就没有被杀了
|
36
monkeyzsf 2023-06-14 18:14:08 +08:00
买个证书签名一下,真要做项目赚钱就只能这样
|
37
XIU2 2023-06-14 18:39:25 +08:00
我曾经写过的一个 Go 小工具,一直没有报毒,直到有一天心血来潮把 Go 1.15 升级到了 1.16 (两年前的事了),然后就有人反馈报毒了,最后我只能挨个申诉,好在 Microsoft Defender 处理最快,除此之外就卡巴斯基回复通过了,其他的杀毒软件(如 McAfee 、360 )完全没反应。。。
不过我后来升级到 1.18 也没有再有人反馈报毒了,不过我一般都不追求最新,即使是现在也还是 1.18 。。。 |
38
mmdsun 2023-06-14 22:02:49 +08:00 1
|
39
c2const 2023-06-15 09:50:09 +08:00
正式发布还是得买个证书来数字签名;
只签应用层的大概一年 5000 左右 |
40
sardina 2023-06-15 10:56:21 +08:00 via iPhone
我在 windows 上编辑的 exe 也经常报毒,解决方案是关掉安全软件 hhh
|
41
whiler OP @JSPIXiaoHei 难搞,看来真得搞一个签名了
|
43
whiler OP @webcape233 大佬指定到什么版本了?
|
44
whiler OP @webcape233 还好我都是在 docker 里编译再复制出来的,没有遇到过编译出来直接被删的情况
|
45
whiler OP @mmdsun linux 环境我在尝试 https://github.com/mtrojnar/osslsigncode
|
48
daokedao 2023-06-15 13:49:07 +08:00
编译的 GO 程序莫名消失
|
49
saucerman8 2023-06-15 14:23:59 +08:00
我靠 你这个几行代码这也报读,有点离谱了吧
|
51
whiler OP @saucerman8 不够离谱都不敢自称杀毒软件,手动狗头
|
52
playboy0 2023-06-15 17:10:30 +08:00
自己写代码的目录连着编译环境全都加到白名单,不然影响 IO 性能
|
54
webcape233 2023-06-15 19:59:45 +08:00 via iPhone
@whiler 好像是 1.18 升级 1.19 后编译被误杀,go mod 里面改成 1.18 就好了,说不定现在改成 1.19 也能正常了,我司是订阅的卡巴斯基杀的
|
55
whiler OP @webcape233 太好了,这么详细
|