Golang程序输出被BitDefender误报为病毒怎么办

Golang程序输出被BitDefender误报为病毒怎么办 我是Go语言的新手,但当你的杀毒软件将构建输出检测为病毒时,这并没有什么帮助。即使使用最基本的“程序”,我也会收到病毒警告:

文件 C:\Users\MyUser\AppData\Local\Temp\go-build243796474\b001\exe\tempCodeRunnerFile.exe 感染了 Gen:Variant.Bulz.245297。威胁已被成功阻止,您的设备是安全的。

BitDefender 已经调查这个问题有一段时间了,但我还没有得到解决方案。他们还说我不能取消订阅以获得退款,因为我已经使用他们的杀毒软件超过30天了,尽管它并不完全符合使用目的。

最基本的代码如下:

package main

func main() {
	println("hello")
}

更多关于Golang程序输出被BitDefender误报为病毒怎么办的实战教程也可以访问 https://www.itying.com/category-94-b0.html

10 回复

遗憾的是,结果依旧相同。

更多关于Golang程序输出被BitDefender误报为病毒怎么办的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


也许是 GOTMPDIR?

是的 - 已经用 go env 检查过,甚至重启了系统。

在更改环境变量后,你是否重启过,或者至少注销并重新登录,以确保所有相关程序都能正确获取到它?

您能否将您的临时文件夹添加到白名单中?在使用Windows内置杀毒软件时,我不得不这样做。

我试过了,但因为文件夹名称是随机的,我不得不排除整个 \Local\Temp 文件夹,这会带来很多风险。 他们也不支持通配符排除,所以我无法排除 \Local\Temp\go-build*

我的朋友,你真是个传奇!!

GOTMPDIR 设置为另一个路径,并将该路径从杀毒软件中排除后,问题解决了——当然,是在清除了电脑上所有临时文件之后。

说得好——他们提到了设置 GOCACHE 变量,但即使将环境变量设为 GOCACHE=c:\go-cache,我仍然看到杀毒软件在 \local\temp\go-build 目录下检测到它。

我会继续研究。

执行 go build main.go 会生成 main.exe,运行这个文件时杀毒软件就不会报错了。

func main() {
    fmt.Println("hello world")
}

这是一个常见的Go语言编译产物被误报的问题,主要原因是Go编译器生成的PE文件结构和代码模式与某些恶意软件相似。以下是几种解决方案:

1. 添加数字签名(最有效的方法)

// 虽然代码本身不需要修改,但构建时需要添加数字签名
// 使用signtool工具进行签名
// signtool sign /f mycert.pfx /p password /t http://timestamp.digicert.com your.exe

2. 修改编译器标志以减少误报

# 使用以下构建参数
go build -ldflags="-s -w -H=windowsgui" main.go

# 或者尝试不同的链接器设置
go build -ldflags="-linkmode=internal" main.go

3. 添加资源文件来改变PE结构

创建resource.rc文件:

1 VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
{
    BLOCK "StringFileInfo"
    {
        BLOCK "040904B0"
        {
            VALUE "CompanyName", "Your Company"
            VALUE "FileDescription", "Your Application"
            VALUE "FileVersion", "1.0.0.0"
            VALUE "LegalCopyright", "Copyright © 2023"
            VALUE "ProductName", "Your Product"
            VALUE "ProductVersion", "1.0.0.0"
        }
    }
    BLOCK "VarFileInfo"
    {
        VALUE "Translation", 0x409, 1200
    }
}

然后编译:

# 生成syso文件
windres resource.rc -O coff -o resource.syso

# 构建
go build main.go

4. 使用UPX加壳(有时反而能绕过检测)

# 先正常构建
go build -o myapp.exe main.go

# 使用UPX压缩
upx --best myapp.exe

5. 在BitDefender中添加排除规则

// 临时解决方案:将构建目录添加到BitDefender排除列表
// 1. 打开BitDefender
// 2. 进入"保护" → "防病毒"
// 3. 点击"管理排除项"
// 4. 添加以下路径:
//    C:\Users\MyUser\AppData\Local\Temp\go-build*
//    C:\Users\MyUser\go\bin\*

6. 使用不同的构建目录

# 设置临时目录到其他位置
set TMP=D:\temp
set TEMP=D:\temp
go build -o D:\myapp\output.exe main.go

7. 尝试不同的Go版本

# 某些Go版本生成的二进制文件误报率较低
# 可以尝试升级到最新版本或使用特定版本
go version
# 如果版本较旧,考虑升级

这个问题在Go 1.16之后有所改善,但仍有发生。最可靠的解决方案是代码签名,其次是添加版本资源信息。对于开发环境,添加排除规则是最方便的临时解决方案。

回到顶部