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
遗憾的是,结果依旧相同。
更多关于Golang程序输出被BitDefender误报为病毒怎么办的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
也许是 GOTMPDIR?
是的 - 已经用 go env 检查过,甚至重启了系统。
在更改环境变量后,你是否重启过,或者至少注销并重新登录,以确保所有相关程序都能正确获取到它?
您能否将您的临时文件夹添加到白名单中?在使用Windows内置杀毒软件时,我不得不这样做。
我的朋友,你真是个传奇!!
将 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之后有所改善,但仍有发生。最可靠的解决方案是代码签名,其次是添加版本资源信息。对于开发环境,添加排除规则是最方便的临时解决方案。


