VS2015可执行文件成为病毒(有潜在的解决方案,但不知道为什么)

VS2015 executable become virus (with potential solution but don't know why)

本文关键字:解决方案 不知道 为什么 可执行文件 病毒 VS2015      更新时间:2023-10-16

这是我程序员生涯中发生过的最奇怪的事情之一。

我正在做一个MFC项目,最近我的防病毒软件BitDefender将我的可执行文件视为病毒"Gen:Variant.Razy.47148"

这是virustotal.com 的扫描结果

Antivirus   Result  Update
ALYac       Gen:Variant.Razy.47148  
Ad-Aware    Gen:Variant.Razy.47148  
Arcabit     Trojan.Razy.DB82C   
BitDefender Gen:Variant.Razy.47148  
Emsisoft    Gen:Variant.Razy.47148 
F-Secure    Gen:Variant.Razy.47148  
GData       Gen:Variant.Razy.47148  
eScan       Gen:Variant.Razy.47148

*其余均为清除结果

我有几种配置,这种情况只发生在其中一种上。所以我比较了设置的差异,发现Linker--Debugging--Generate Debug Info是问题所在。当是"否"时,不是病毒,当是"是"时,是病毒
然后我看看它到底做了什么,它说:"这个选项可以创建.exe文件或DLL的调试信息。"MS的详细描述https://msdn.microsoft.com/en-us/library/xe4t6fc1.aspx我看不出有任何可能让我的可执行文件变成病毒。

你可能想问的更多:

  1. 硬盘扫描清除了多个知名的防病毒程序。

  2. 如果我在不做任何其他更改的情况下将其设置为"否",则可执行文件是明确的。这意味着我包含的所有.c和.h都是清楚的。

  3. 我知道这有点像假阳性病毒,因为只有一些"未命名"的防病毒软件报告了这一点。但不幸的是,我必须使用BitDefender,我的程序将在其中运行的一些计算机也在使用它。(我的程序只是一个仅供内部使用的调试工具)

如果你的硬盘上没有其他东西被你的防病毒软件标记为恶意软件,那么这种"检测"很可能是因为你程序中的东西触发了AV内部的启发式检测例程。

这个"某物"可能是您使用过的字符串、特定的机器指令序列,甚至是函数名。当你关闭调试信息时,AV将不再标记你的程序,这一事实可能表明触发器确实是在非调试构建中被剥离的东西(例如函数名称)

这不是编译器错误,也不是他们可以解决的问题。你可以(也应该)向AV供应商报告你的可执行文件为假阳性(被报告为携带病毒的确切文件)

正如我之前所说,这很可能不是真正的感染,所以在采取了措施后,你不必担心。

您已经提到,当您在没有调试信息的情况下构建程序时,防病毒软件不会对其进行标记或报告。您可以在没有调试信息的情况下交付程序吗?这就是几乎所有软件的分布方式。如果可以的话,那么你就可以与你的用户保持联系;您的无调试信息程序不会被报告为病毒。

病毒扫描仪是否正在检测到遥测/"回家电话"?有关VS2015中发现的更多信息,请参阅此博客文章。

@Peter,非常感谢您提供关于"Linker--调试--生成调试信息"的提示。如果有人怀疑这是一个假阳性问题,我在试图证明我没有感染我的工作站时偶然发现了这个线程。当我创建一个简单的VS2015项目(Win32控制台应用程序)而没有添加ATL或MFC的头时,出现了这个问题。该程序仅包含模板生成的样板代码。

赛门铁克Endpoint Protection检测到病毒为Heur.AdvML.B.

奇怪的是,添加ATL和/或MFC的头会生成一个"没有病毒"的exe。

此外,在VS2013中创建类似的项目(不带ATL/MFC)也会生成一个"干净"的exe。

希望这能帮助其他人不要浪费半天的时间去打猎。

相关文章: