c++ - VS2015可执行文件变成病毒(有可能的解决方案但不知道为什么)

标签 c++ mfc

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

我正在处理 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 的问题。当它是“否”时,不是病毒,当它是"is"时,是病毒。
然后我看看它到底做了什么,它说“这个选项允许创建 .exe 文件或 DLL 的调试信息。” 来自 MS 的详细描述 https://msdn.microsoft.com/en-us/library/xe4t6fc1.aspx 我没有看到任何可能使我的可执行文件成为病毒的方法。

更多你可能想问的:

  1. 硬盘被多个知名杀毒软件扫描清空。

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

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

最佳答案

如果您的硬盘驱动器上没有其他任何东西被您的防病毒软件标记为恶意软件,那么这种“检测”很可能是因为您程序中的某些正在触发 AV 内的启发式检测例程。

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

这不是编译器错误,也不是他们可以解决的问题。您可以(并且应该)向 AV 供应商报告您的可执行文件为误报(被报告为具有病毒的确切文件。)

正如我之前所说,这很可能不是真正的感染,因此在您已经采取措施后,您不必担心这一点。

您提到过,当您构建没有调试信息的程序时,它不会被防病毒软件标记或报告。你能在没有调试信息的情况下发布你的程序吗?这就是几乎所有软件的分发方式。如果可以,那么您就与用户保持清白;您的无调试信息程序不会被报告为病毒。

关于c++ - VS2015可执行文件变成病毒(有可能的解决方案但不知道为什么),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38573708/

相关文章:

c++ - 在源代码中表示大数字以提高可读性?

c++ - C++ 上的 std::map 问题

multithreading - MFC 多线程与 delete[] ,dbgheap.c

C++:MsiOpenDatabase 失败并出现错误 110 0x6e ERROR_OPEN_FAILED 仅当提升/管理时

c++ - 什么会导致程序异常终止?

c++ - 如何在启动时将 gdbserver 附加到进程?

c++ - C/C++ : How does this inline if get parsed?

c++ - graphviz 渲染到 gdiplus

windows - 从我的应用程序发送消息 Ctrl+Alt+Del

c++ - 将值均匀分布到数组中