Golang程序被Virusbarrier误报为病毒的解决方法

Golang程序被Virusbarrier误报为病毒的解决方法 有人有想法吗? Virusbarrier 将我编译的所有程序都视为病毒,甚至 Go 的默认可执行文件也是如此。(版本 1.20)

Screenshot 2023-05-22 at 18.51.49

这是 Go 版本的问题还是病毒扫描器的问题?

3 回复

谢谢Skillian,

更多关于Golang程序被Virusbarrier误报为病毒的解决方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


杀毒软件将Go程序识别为病毒的情况并不少见。我不太了解Virusbarrier,但也许你可以将你的Go代码所在文件夹加入白名单?

这是典型的反病毒软件误报问题,不是Go语言本身的问题。Virusbarrier等反病毒软件有时会将Go编译的二进制文件误判为恶意软件,特别是当程序使用了某些系统调用或具有某些特征时。

解决方案:

1. 添加数字签名(推荐)

为你的可执行文件添加数字签名可以显著减少误报:

// 虽然Go代码本身无法解决此问题,但编译后可以:
// 使用signtool(Windows)或codesign(macOS)进行签名

// Windows示例(使用PowerShell):
// signtool sign /f certificate.pfx /p password yourprogram.exe

// macOS示例:
// codesign --force --sign "Developer ID Application: Your Name" yourprogram

2. 调整编译器设置

某些编译选项可能触发反病毒软件的检测:

// 使用-ldflags调整编译选项
// go build -ldflags="-s -w" main.go

// 或者尝试禁用某些优化:
// go build -gcflags="all=-N -l" main.go

3. 向Virusbarrier提交误报样本

将你的Go程序提交到Virusbarrier的误报分析系统:

# 通常可以通过以下方式:
# 1. 在Virusbarrier界面中将你的程序添加到排除列表
# 2. 将程序样本提交给Intego(Virusbarrier开发商)进行分析

4. 临时解决方案

在开发环境中,可以将Go编译目录添加到Virusbarrier的排除列表:

# 排除整个Go工作目录
# 在Virusbarrier设置中添加:
# ~/go/bin
# ~/go/pkg
# 项目构建目录

5. 验证Go安装的完整性

确保Go工具链没有被篡改:

# 检查Go安装的SHA256
shasum -a 256 $(which go)

# 重新安装Go
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.20.linux-amd64.tar.gz

6. 使用UPX加壳(可能适得其反)

注意:这有时会加重误报,但某些情况下有效:

# 安装UPX
brew install upx  # macOS
apt install upx   # Linux

# 压缩可执行文件
go build -o myapp main.go
upx myapp

根本原因:

Go编译的二进制文件通常包含:

  • 静态链接的运行时
  • 完整的依赖库
  • 特定的内存布局模式 这些特征有时会匹配反病毒软件的特征库,导致误报。

建议优先采用数字签名方案,这是解决反病毒软件误报最有效的方法。同时向Intego提交误报报告,帮助改进他们的检测算法。

回到顶部