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 · 318 天前 · 5139 次点击
    这是一个创建于 318 天前的主题,其中的信息可能已经有所发展或是发生改变。

    编译一个 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 条附言  ·  317 天前

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

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