V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
whiler
V2EX  ›  Go 编程语言

go 编译的 windows 文件报毒,是哪儿出问题了?

  •  
  •   whiler · 2023-06-14 14:58:54 +08:00 · 6046 次点击
    这是一个创建于 560 天前的主题,其中的信息可能已经有所发展或是发生改变。

    编译一个 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 扫描,扫描出一大堆病毒。

    我看不出操作和代码有什么问题,是从什么地方感染病毒的呢?是哪儿出问题了?

    第 1 条附言  ·  2023-06-15 12:22:51 +08:00

    用 openssl 生成签名证书。

    https://github.com/mtrojnar/osslsigncode 添加数字签名。

    提交签名后的应用给 https://www.virustotal.com 扫描,仍然大量报毒,并没有减少误报。

    自签的证书不能减少误报,花钱买的签名证书没有测试,最便宜的 Comodo Code Signing Certificate (OV) 都需要 $211.46 一年,买不起。

    55 条回复    2023-06-16 11:46:23 +08:00
    wu67
        1
    wu67  
       2023-06-14 15:01:21 +08:00
    不一定是你代码的问题. 只是最近不少恶意程序都是 go 写的, 干脆直接把 go 写的全报毒了...
    knightcatsq
        2
    knightcatsq  
       2023-06-14 15:01:52 +08:00 via Android
    可能是系统被污染了吧……
    proxytoworld
        3
    proxytoworld  
       2023-06-14 15:05:30 +08:00
    go 本来就是容易报毒
    StarUDream
        4
    StarUDream  
       2023-06-14 15:06:33 +08:00
    whiler
        5
    whiler  
    OP
       2023-06-14 15:10:55 +08:00
    whiler
        6
    whiler  
    OP
       2023-06-14 15:12:54 +08:00
    @knightcatsq 为了规避系统感染病毒的风险,特意在 docker 容器里编译的,编译完原地算的 md5 ,确保文件没有被外部系统篡改
    whiler
        7
    whiler  
    OP
       2023-06-14 15:17:42 +08:00
    @wu67 @proxytoworld @StarUDream 误伤面太大了,用 go 编译的应用都提心吊胆的,不知道是真有病毒还是误报
    fzls
        8
    fzls  
       2023-06-14 15:20:17 +08:00
    没签名的软件被误报毒很正常的-。-
    xmoer
        9
    xmoer  
       2023-06-14 15:37:34 +08:00
    不是楼主的问题,它就是很容易报毒的,要么添加数字签名,要么一家家提交消除误报。
    whiler
        10
    whiler  
    OP
       2023-06-14 15:38:37 +08:00
    @fzls 签名仅是一个报毒豁免,没毒的软件被大规模误报有毒,这不正常
    whiler
        11
    whiler  
    OP
       2023-06-14 15:40:12 +08:00
    @xmoer 看来还得为了杀毒软件学习一下数字签名
    xmoer
        12
    xmoer  
       2023-06-14 15:40:15 +08:00
    @whiler 这很正常,因为现在有不少病毒或者恶意程序用 go 编写的,而主流的杀毒软件厂商基本都进入了 AI 自动分析时代,学习的样本多了就广泛误报,只能人工干预。
    LeegoYih
        13
    LeegoYih  
       2023-06-14 15:42:50 +08:00
    很正常,杀毒软件对比特征库,宁可错杀一千。
    比如易语言编译出来的二进制几乎会被所有杀毒软件杀。
    tramm
        14
    tramm  
       2023-06-14 15:51:43 +08:00
    代码中是不是用到了加密功能啥的?
    whiler
        15
    whiler  
    OP
       2023-06-14 15:56:26 +08:00
    @tramm 我怀疑你看到标题就回复了,根本没看帖子的具体内容
    whiler
        16
    whiler  
    OP
       2023-06-14 16:00:31 +08:00
    @xmoer 另一方面说明现在用 go 编写的 windows 还是太少了,正向反馈太少,误报得不到修正
    oldshensheep
        17
    oldshensheep  
       2023-06-14 16:04:01 +08:00
    就是垃圾 WindwosDenfence ,我最近写 Go 程序也报毒,而且没有任何敏感操作,连读文件的操作都没有,写着写着就报毒。
    whiler
        18
    whiler  
    OP
       2023-06-14 16:04:57 +08:00
    @LeegoYih 易语言的处境太难了
    whiler
        19
    whiler  
    OP
       2023-06-14 16:08:29 +08:00
    @oldshensheep 自己写的,自己清楚有没有病毒;若是打包发布出去供其他人用也报毒就难办,敏感的人直接就删除了
    Kinnice
        20
    Kinnice  
       2023-06-14 16:35:35 +08:00
    加壳,upx
    CrossMythic
        21
    CrossMythic  
       2023-06-14 16:49:01 +08:00
    加壳之后杀的更厉害。 自己用验个 md5 就无所谓了,放出去用的话要么搞白签名,要么一步步二分代码去找到误报的接口,换个方式实现。
    virusdefender
        22
    virusdefender  
       2023-06-14 17:03:01 +08:00
    你这个太简单了,复杂的 go 程序不容易报毒
    asmmt
        23
    asmmt  
       2023-06-14 17:12:11 +08:00
    淡定,Go 语言写个 helloworld 都报毒
    LeegoYih
        24
    LeegoYih  
       2023-06-14 17:20:38 +08:00
    我用 Wails 开发的一个 GUI 客户端没有报毒,按#22 说的,可能复杂的项目不报毒,特征码占得总比例低于阈值。
    whiler
        25
    whiler  
    OP
       2023-06-14 17:21:05 +08:00
    @Kinnice upx 加壳报毒更多
    whiler
        26
    whiler  
    OP
       2023-06-14 17:22:13 +08:00
    @CrossMythic 大佬,你看俺这个代码怎么个二分法……
    whiler
        27
    whiler  
    OP
       2023-06-14 17:23:13 +08:00
    @virusdefender 我信了,你信不?
    whiler
        28
    whiler  
    OP
       2023-06-14 17:24:23 +08:00
    @asmmt 就一行 `func main(){}` ,淡定不了
    whiler
        29
    whiler  
    OP
       2023-06-14 17:27:13 +08:00
    @LeegoYih 病毒特征码比例低就不报毒?俺不懂杀毒软件的报毒逻辑,你别骗俺
    JSPIXiaoHei
        30
    JSPIXiaoHei  
       2023-06-14 17:31:32 +08:00
    rust 也报,写个二维码小工具都报,杀软用的 360
    githmb
        31
    githmb  
       2023-06-14 17:48:58 +08:00
    360 出没
    Zwying
        32
    Zwying  
       2023-06-14 18:04:38 +08:00
    越容易上手的语言越容易报
    webcape233
        33
    webcape233  
       2023-06-14 18:07:23 +08:00 via iPhone
    正常,我在公司的也报毒给我自动删了,我在 mod 文件中将 go 版本指定到更老的就正常了。 估计用的过新的编译出来的特征对杀毒软件来说还过于新鲜吧
    dimwoodxi27
        34
    dimwoodxi27  
       2023-06-14 18:09:28 +08:00
    @CrossMythic VMP 了解下
    webcape233
        35
    webcape233  
       2023-06-14 18:10:05 +08:00 via iPhone
    最恼火是,前面我不知道,每次 goland 编译完了去找二进制文件就发现不再了,让我一度怀疑没编译成功,公司杀软误伤了也不提示,后来看杀软记录才发现,然后降低版本就没有被杀了
    monkeyzsf
        36
    monkeyzsf  
       2023-06-14 18:14:08 +08:00
    买个证书签名一下,真要做项目赚钱就只能这样
    XIU2
        37
    XIU2  
       2023-06-14 18:39:25 +08:00
    我曾经写过的一个 Go 小工具,一直没有报毒,直到有一天心血来潮把 Go 1.15 升级到了 1.16 (两年前的事了),然后就有人反馈报毒了,最后我只能挨个申诉,好在 Microsoft Defender 处理最快,除此之外就卡巴斯基回复通过了,其他的杀毒软件(如 McAfee 、360 )完全没反应。。。

    不过我后来升级到 1.18 也没有再有人反馈报毒了,不过我一般都不追求最新,即使是现在也还是 1.18 。。。
    mmdsun
        38
    mmdsun  
       2023-06-14 22:02:49 +08:00   ❤️ 1
    c2const
        39
    c2const  
       2023-06-15 09:50:09 +08:00
    正式发布还是得买个证书来数字签名;
    只签应用层的大概一年 5000 左右
    sardina
        40
    sardina  
       2023-06-15 10:56:21 +08:00 via iPhone
    我在 windows 上编辑的 exe 也经常报毒,解决方案是关掉安全软件 hhh
    whiler
        41
    whiler  
    OP
       2023-06-15 11:31:33 +08:00
    @JSPIXiaoHei 难搞,看来真得搞一个签名了
    whiler
        42
    whiler  
    OP
       2023-06-15 11:33:09 +08:00
    @githmb 我没测 360 ,楼上说 rust 的简单应用会被 360 误报
    whiler
        43
    whiler  
    OP
       2023-06-15 11:39:35 +08:00
    @webcape233 大佬指定到什么版本了?
    whiler
        44
    whiler  
    OP
       2023-06-15 11:40:59 +08:00
    @webcape233 还好我都是在 docker 里编译再复制出来的,没有遇到过编译出来直接被删的情况
    whiler
        45
    whiler  
    OP
       2023-06-15 11:41:54 +08:00
    whiler
        46
    whiler  
    OP
       2023-06-15 11:43:31 +08:00
    @c2const 5000/年,对公司就是小意思,对于个人还是太贵了
    whiler
        47
    whiler  
    OP
       2023-06-15 11:45:04 +08:00
    @sardina 没法让用你软件的人关掉安全软件啊,仅自己用,怎么操作都无所谓
    daokedao
        48
    daokedao  
       2023-06-15 13:49:07 +08:00
    编译的 GO 程序莫名消失
    saucerman8
        49
    saucerman8  
       2023-06-15 14:23:59 +08:00
    我靠 你这个几行代码这也报读,有点离谱了吧
    whiler
        50
    whiler  
    OP
       2023-06-15 14:35:01 +08:00
    @daokedao 把编译路径添加到杀毒软件的例外列表里吧,或者用 docker 编译
    whiler
        51
    whiler  
    OP
       2023-06-15 14:37:08 +08:00
    @saucerman8 不够离谱都不敢自称杀毒软件,手动狗头
    playboy0
        52
    playboy0  
       2023-06-15 17:10:30 +08:00
    自己写代码的目录连着编译环境全都加到白名单,不然影响 IO 性能
    whiler
        53
    whiler  
    OP
       2023-06-15 17:56:41 +08:00
    @playboy0 有道理
    webcape233
        54
    webcape233  
       2023-06-15 19:59:45 +08:00 via iPhone
    @whiler 好像是 1.18 升级 1.19 后编译被误杀,go mod 里面改成 1.18 就好了,说不定现在改成 1.19 也能正常了,我司是订阅的卡巴斯基杀的
    whiler
        55
    whiler  
    OP
       2023-06-16 11:46:23 +08:00
    @webcape233 太好了,这么详细
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4795 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 09:48 · PVG 17:48 · LAX 01:48 · JFK 04:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.