编译的 C 可执行文件被 Windows Defender 检测为病毒

Posted

技术标签:

【中文标题】编译的 C 可执行文件被 Windows Defender 检测为病毒【英文标题】:Compiled C executable is detected as a virus by windows defender 【发布时间】:2022-01-07 21:44:13 【问题描述】:

我使用命令行使用 MinGW 编译器用 C 语言编译了一个简单的 hello world 程序。编译完成后,windows defender 弹出并检测到病毒(***:Win32/Fuery.C!cl)。

#include <stdio.h>
#include <stdlib.h>
int main() 
    printf("Hello World");
    return 0;

https://imgur.com/a/05yDjw5

我已经按照 Windows Defender 的建议对此采取了行动(已删除),但是当我再次编译时,同样的情况发生了多次。

我下载了一个防病毒软件 (Malwarebytes) 并扫描了我的整个系统,它检测到一些注册表项错误,但不是这个。

我也尝试过编译 C++ 文件,但 Windows Defender 没有检测到任何病毒。这只发生在我用 C 编译时。

我还尝试在 VirusTotal 上检查编译后的可执行文件。 https://www.virustotal.com/gui/file/476d47215dad80db49c9fd508ab5e10e5aeb5b623248ca156830a28b70affe5f/detection

我尝试了 CodeBlock 的 MinGW 编译器,0 个引擎检测到它。 (相同的 C 文件) https://www.virustotal.com/gui/file/8ba4b0fa24b1b6b69152acce2353fcca8447bbecbfc4e5ec48d33cc75d94f2f1/detection

编辑:我删除了 C:/MinGW 的路径变量并添加了 CodeBlock 的 MinGW 编译器。然后我使用命令行再次编译相同的 C 文件并将 .exe 文件上传到 VirusTotal。这次,检测到 0 个引擎。所以我得出的结论是,我安装的 MinGW 编译器造成了这个问题。 https://www.virustotal.com/gui/file/34d383f6c09f897d8c9a44ed0e7850574320e50fdf439eeb1f06705fdcc95386/detection

我不知道为什么会这样。我的计算机中是否存在影响我的 C 程序的恶意软件或者这是错误检测?

【问题讨论】:

听起来像是 Windows Defender 误报。 我打算将此定义为错误检测,但如果有人有答案请告诉我!! @Evg,是的,我之前也尝试过,但没有提及。我又做了一次,31 个引擎检测到它不安全 安装 Windows 10 Defender 后扫描了我的所有驱动器,删除了我自己创建的 每个 可执行文件,没有任何警告。不久之后,我又回到了 Windows 7 和 AVG,它会警告我,直到我将其配置为忽略某些文件夹(及其子文件夹)。 @tan 有趣的是,听起来与here for VC++ 报告的问题非常相似。 【参考方案1】:

我遇到了同样的问题,编译器 tdm gcc v9.2。

以下编译会触发警告 (kaspersky)。

gcc temp.c -o temp.exe

以下没有

gcc -O3 temp.c -o temp.exe

temp.c 在哪里

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main() 
    int a, b;
    scanf("%d %d", &a, &b);
    printf("mod %4d, %4d is %4d\n", a, b, a%b);
    return 0;

使用 g++ 的相同代码通过两种编译的测试。防病毒软件在其他地方没有检测到相同的病毒,而仅在 temp.exe(第一次编译)中检测到。

【讨论】:

【参考方案2】:

我在 01-08-20(dd-mm-yy) 安装 MinGW 后遇到了这个问题。 对我来说,它也是 Windows Defender,希望暂时摆脱这种情况的方法是为编译输出所在的文件夹添加一个例外。 Microsoft 网站说明了添加排除项的以下步骤:

    转至开始 > 设置 > 更新和安全 > Windows 安全 > 病毒和威胁防护。 在病毒和威胁防护设置下,选择管理设置,然后在排除项下,选择添加或删除排除项

【讨论】:

【参考方案3】:

我可能已经解决了我的问题。

这就是我所做的:我删除了 C:\MinGW 的 PATH 变量并添加了 CodeBlock 的 MinGW 编译器(CodeBlocks/MinGW/bin)。我使用命令行编译了相同的 C 文件,并将 .exe 上传到 VirusTotal。没有引擎检测到这个文件! https://www.virustotal.com/gui/file/34d383f6c09f897d8c9a44ed0e7850574320e50fdf439eeb1f06705fdcc95386/detection

所以我得出的结论是,MinGW 是导致此问题的编译器。我已将其删除。

但是,我不太确定这个问题是否已完全解决。恶意软件仍有可能影响我的可执行文件(或者可能不会)。我不能确定。

如果有人有任何答案,请评论或回答

【讨论】:

这不排除你原来的 mingw-gcc 被破坏了。用它编译更多的源文件,看看它们是否都被标记——如果没有,那么它可能是一个误报问题。如果他们都被感染了——你仍然有问题...... 是的,我会的......如果问题仍然存在,我会告诉你 您好,已经 3 天了,我还没有检测到。我想我的问题已经解决了,我的问题也得到了解答。 PS:*** 很棒!!【参考方案4】:

没有恶意软件,这是误报。您的 MinGW 版本生成的可执行文件与特定病毒非常相似。

为避免此问题,请将构建代码的目录添加到防病毒软件的排除列表中。

还可以考虑使用 mingw-w64 代替 mingw.org。

【讨论】:

【参考方案5】:

您的系统受到严重感染。由于此时您的系统基本上掌握在恶意软件编写者的手中,因此无论您对小 .exe 做什么都无关紧要。你没有展示一个最小的例子。您只需要一个包含一行的.c 文件:int main() 。您可以在另一台(未受感染的)计算机上编译它,将其复制到您的计算机上,它会立即被感染。您无法控制写入该可执行文件的内容。碰巧可执行文件在到达文件系统的那一刻就被感染了。您拥有的恶意软件就是这样做的。

备份不包括任何可执行文件的数据文件,然后擦除您的系统,重新安装 Windows,安装来自可靠来源的应用程序(从受信任的站点下载),安装所有 Windows 更新,使用 Windows 内置对备份运行病毒扫描- 在反恶意软件解决方案中,然后恢复备份。此时您的系统已完成,我不相信 Malwarebytes 能够清理它。这很可能会给你一种虚假的安全感,最终只会浪费大量时间,而且你最终还是不得不把所有东西都擦干净。那么为什么要浪费时间呢?第一次就做好。

并且不要安装任何其他防病毒软件或“更清洁”的解决方案——你显然对什么是合法的没有感觉,这就是你最有可能陷入这个麻烦的原因。 99.9% 的恶意软件删除和清理实用程序搜索结果本身就是恶意恶意软件,或者至少是垃圾软件,它们无济于事,只是敲诈勒索。如果你的上网行为是合理的,除了 Windows 默认包含的之外,你不需要任何解决方案。

【讨论】:

我同意,我以前从不相信使用防病毒软件,只是这次我发现它可以立即解决我的问题。我将不得不考虑你的建议,因为我认为我没有能力重新安装我的窗户(我以前搞砸了)。我所能做的就是转储我当前的硬盘并从一个新的开始 还有另一件事:我尝试了 CodeBlock 的 MinGW 编译器。我编译了相同的 C 程序并将 .exe 文件上传到 virustotal。我将编辑我的原始帖子并添加链接。这一次,零引擎检测到了它。所以我认为我安装在 C 驱动器上的 MinGW 编译器可能存在问题。你能澄清一下吗? Your system is badly infected 这是一个非常有力的声明,没有太多(任何?)证据。你所描述的是一种可能性,它已经够糟糕了,值得关注。但这不是唯一的可能性。最近在 VC++ 版本中发生了 Defender 提出并被多个引擎“检测到”的非常相似的误报,报告(并确认)here。 这是个笑话贴吧?您声称系统被严重感染,但神秘地系统上的所有文件和内存都通过了扫描,除了 OP 使用特定编译器构建的可执行文件? 我同意 dxiv 和 M.M 我不认为我的系统受到严重感染。我的计算机被“黑客攻击”的可能性很小,如果不是很小的话。它要么是我安装的 MinGW 编译器,要么是 Windows Defender(或两者兼而有之?)。我现在不知道该怎么做。【参考方案6】:

应该考虑的一种可能性是您的计算机上已经存在恶意软件,并且该恶意软件只是将自己的代码注入您创建的 .exe 文件中。然后,您的防病毒软件可能会检测到新 .exe 中的有害代码。当您从众多值得信赖的供应商处获得如此多的 Virustotal 检测时,这是一个真正的可能性。

注册表清理程序通常是恶作剧。声称包含注册表清理程序的防病毒软件是可疑的。你用的软件叫什么名字?

卸载您使用的任何防病毒软件并安装Malwarebytes。在设置中启用 rootkit 检测,使用它运行完整扫描,然后使用 Windows Defender 进行完整扫描。

【讨论】:

您无法卸载 Windows Defender,而且这也不太可能是真正的恶意软件。 @JosephSible-ReinstateMonica 我显然没有说要卸载 Windows Defender,如果可能的话。海报说“我下载了一个防病毒软件......它检测到一些注册表项错误”。没有值得信赖的防病毒软件声称可以检测注册表错误,因此应该删除该软件。 howtogeek.com/171633/… 我使用的防病毒软件实际上是恶意软件字节,我用它扫描了我的整个系统并启用了所有功能,包括 rootkit 检测!它只检测到注册表错误,我已经删除了它们。但 Windows Defender 仍将 C 程序检测为恶意软件。我将再次对恶意软件字节进行全面扫描,然后在 Windows Defender 上运行,看看会发生什么,谢谢 我不认为这是问题所在。我不认为我的电脑是由其他人拥有或“入侵”的。因为它只是 C 程序可执行文件.. 其他一切都很好 @tan 如果您同时使用 Malwarebytes 和 Windows Defender 进行了扫描,我认为排除恶意软件是安全的。防病毒软件可能正在考虑如何编译可执行文件是恶意软件的典型特征。在这种情况下,您所能做的就是以其他可行的方式编译可执行文件。【参考方案7】:

既然您编写了该程序并且您知道它实际上不是木马,那么它显然是误报。您应该通过https://www.microsoft.com/wdsi/filesubmission 将文件提交给他们,以便他们找出触发误报的原因并进行修复。 (如果您编译的所有内容都发生这种情况,只需向他们发送一个就足够了。)同时,您应该为您编译可执行文件的文件夹添加 Windows Defender 的排除项。

【讨论】:

如果您对误报缺乏信心,将二进制文件 objdump 并检查生成的汇编代码也可能会有所启发。 @l.k 如果有任何有用的信息,我会感到非常惊讶。 主要是我希望大家放心,一切都很好。 “既然你写了那个程序” 谁写了这个程序是无关紧要的。该系统此时归第三方所有,并且其上写入的所有可执行文件此时都已被感染。谁写它们并不重要。比较典型。开发人员机器并不能神奇地免疫恶意软件。对它们进行任何开发的事实毫无意义。这是一个典型的系统签名,名义上只是你的,但实际上是在窃取你的所有数据并感染所有可见的东西。这基本上是只剩下一个来自轨道的象征性核武器的情况。

以上是关于编译的 C 可执行文件被 Windows Defender 检测为病毒的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 C 语言中的 SIMD 示例代码可以用 minGW 编译,但可执行文件不能在我的 Windows 机器上运行?

Windows下怎样编译出可在Linux上执行的程序

C语言编译器,神奇的魔法师

C语言编译和链接详解(通俗易懂,深入本质)

不同 C 编译器生成的可执行文件的差异

C语言——编译器如何将C源文件编译成可执行代码?