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

C++ VS2015可执行文件变成病毒(有可能的解决方案,但不知道为什么),c++,mfc,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 BitDe

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

我正在从事一个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
*剩下的都是明确的结果

我有一些配置,这只发生在其中一个。然后我比较了设置差异,发现问题出在
链接器--Debug--Generate Debug Info
上。当它是“否”时,不是病毒,当它是“是”时,是病毒。
然后我看看它到底做了什么,它说“这个选项允许创建.exe文件或DLL的调试信息。” MS的详细描述 我不认为这会使我的可执行文件变成病毒

您可能想问的更多:

  • 硬盘驱动器被多个著名的防病毒程序扫描清除

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

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


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

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

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

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


    您已经提到,当您在没有调试信息的情况下构建程序时,防病毒软件不会对其进行标记或报告。你能在没有调试信息的情况下发布你的程序吗?几乎所有的软件都是这样分发的。如果你可以,那么你就可以清楚地告诉你的用户;您的无调试信息程序将不会被报告为病毒。

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

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

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

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


    您已经提到,当您在没有调试信息的情况下构建程序时,防病毒软件不会对其进行标记或报告。你能在没有调试信息的情况下发布你的程序吗?几乎所有的软件都是这样分发的。如果你可以,那么你就可以清楚地告诉你的用户;您的无调试信息程序将不会被报告为病毒。

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

    Symantec Endpoint Protection检测到病毒为Heur.AdvML.B

    奇怪的是,添加ATL和/或MFC的头会生成一个“无病毒”的exe

    此外,在VS2013中创建一个类似的项目(没有ATL/MFC)也会生成一个“干净”的exe


    希望这有助于其他人不要浪费半天的时间进行搜索。

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

    Symantec Endpoint Protection检测到病毒为Heur.AdvML.B

    奇怪的是,添加ATL和/或MFC的头会生成一个“无病毒”的exe

    此外,在VS2013中创建一个类似的项目(没有ATL/MFC)也会生成一个“干净”的exe


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

    病毒扫描器检测到的是不是有遥测技术/打电话回家?有关VS2015中发现的更多信息,请参阅本博客。

    病毒扫描程序检测到的是否存在遥测/呼叫总部?有关VS2015中该发现的更多信息,请参阅本博客。

    。h不能包含病毒。它们只是标题。c库