VS2015可执行文件成为病毒(有潜在的解决方案,但不知道为什么)
VS2015 executable become virus (with potential solution but don't know why)
这是我程序员生涯中发生过的最奇怪的事情之一。
我正在做一个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我看不出有任何可能让我的可执行文件变成病毒。
你可能想问的更多:
硬盘扫描清除了多个知名的防病毒程序。
如果我在不做任何其他更改的情况下将其设置为"否",则可执行文件是明确的。这意味着我包含的所有.c和.h都是清楚的。
我知道这有点像假阳性病毒,因为只有一些"未命名"的防病毒软件报告了这一点。但不幸的是,我必须使用BitDefender,我的程序将在其中运行的一些计算机也在使用它。(我的程序只是一个仅供内部使用的调试工具)
如果你的硬盘上没有其他东西被你的防病毒软件标记为恶意软件,那么这种"检测"很可能是因为你程序中的东西触发了AV内部的启发式检测例程。
这个"某物"可能是您使用过的字符串、特定的机器指令序列,甚至是函数名。当你关闭调试信息时,AV将不再标记你的程序,这一事实可能表明触发器确实是在非调试构建中被剥离的东西(例如函数名称)
这不是编译器错误,也不是他们可以解决的问题。你可以(也应该)向AV供应商报告你的可执行文件为假阳性(被报告为携带病毒的确切文件)
正如我之前所说,这很可能不是真正的感染,所以在采取了措施后,你不必担心。
您已经提到,当您在没有调试信息的情况下构建程序时,防病毒软件不会对其进行标记或报告。您可以在没有调试信息的情况下交付程序吗?这就是几乎所有软件的分布方式。如果可以的话,那么你就可以与你的用户保持联系;您的无调试信息程序不会被报告为病毒。
病毒扫描仪是否正在检测到遥测/"回家电话"?有关VS2015中发现的更多信息,请参阅此博客文章。
@Peter,非常感谢您提供关于"Linker--调试--生成调试信息"的提示。如果有人怀疑这是一个假阳性问题,我在试图证明我没有感染我的工作站时偶然发现了这个线程。当我创建一个简单的VS2015项目(Win32控制台应用程序)而没有添加ATL或MFC的头时,出现了这个问题。该程序仅包含模板生成的样板代码。
赛门铁克Endpoint Protection检测到病毒为Heur.AdvML.B.
奇怪的是,添加ATL和/或MFC的头会生成一个"没有病毒"的exe。
此外,在VS2013中创建类似的项目(不带ATL/MFC)也会生成一个"干净"的exe。
希望这能帮助其他人不要浪费半天的时间去打猎。
- C++Matching Brackets 2解决方案不起作用
- N-queen问题:无法弄清楚为什么我的解决方案不起作用
- 我正在尝试制作一个自平衡机器人,但编译时存在错误。我不知道如何解决它
- 为什么我不能在同一 MS VS 解决方案中的两个控制台应用中使用C++特征(仅标头库)?
- 我想使用 "cout" 命令慢慢打印文本,但我真的找不到任何解决方案
- 表达式必须具有类类型。不知道怎么解决
- 在这种情况下,我们可以使用静态而不是朋友吗,还有其他解决方案是什么
- C++不正确,不需要重新声明类成员变量 MFC 手工解决方案/项目 MS VS 2015
- 我不明白关于 LeetCode 上的格雷码的解决方案
- 为什么针对给定挑战的此解决方案不起作用?
- 如何在不创建新配置的情况下对两个不同解决方案使用的一个项目使用不同的 #defines
- 递归数独求解器 不正确的解决方案 (C++)
- OpenCV 错误的解决方案:不支持的格式或格式组合 - 当将 ORB 功能与 FlannBasedMatcher 匹配
- VS为我提供了对构造函数的另一个解决方案,但我想知道为什么我的工作不起作用
- 黑客排名中的解决方案不匹配
- (欧拉计划#3)试图将Python中的解决方案复制到C++,结果非常糟糕,不知道如何
- C++迭代时删除列表成员:标准解决方案不起作用
- LeetCode TwoSum解决方案不起作用
- 预生成的解决方案不会在Release中编译,而是在Debug中编译
- VS2015可执行文件成为病毒(有潜在的解决方案,但不知道为什么)