将编译的 C++ 文件检测为木马的防病毒软件

Antivirus detecting compiled C++ files as trojans

我已经用 MinGW 安装了 windows 的 c++ 编译器。我试着做了一个简单的程序:

#include <iostream>
using namespace std;

int main() {
   cout << "Hello World!";
   return 0;
}

并保存为try.cc。之后我在文件夹中打开cmd和运行 g++ try.cc -o some.exe。它生成 some.exe 但我的防病毒软件 (avast) 将其识别为恶意软件。我还以为是误报呢,结果明明说是木马

我从病毒箱中删除了文件并上传到“https://www.virustotal.com/” 结果:

72 个引擎中有 24 个将其检测为恶意软件,其中很多检测为特洛伊木马。

这是误报吗?为什么会被检测为木马?如果是,如何避免每次创建新程序时都收到此警告?

编辑:

感谢大家的帮助,我 运行 对我的计算机进行了全面扫描,使用了 2 个防病毒软件,一切看起来都很干净。我还对 MinGW 文件夹进行了扫描,但什么也没有。

每次我做一个新的c++程序都会出现这个问题。我尝试修改代码和名称,但 AV 一直将其检测为病毒。有趣的是,更改代码会更改 av 报告的病毒类型。

我仍然不能 100% 确定编译器是干净的,所以我不知道是否应该忽略它和 运行 程序。我从“https://osdn.net/projects/mingw/releases/”

下载了 MinGW

如果有人知道如何完全确定创建的可执行文件不是病毒,只有误报我会很高兴他们分享它。

编辑 2:

我突然想到,如果编译器被感染并且它正在添加代码,那么我可能能够通过 decompiler/disassembler 看到它,向它提供可执行文件。我下载了在这里 "snowman" 找到的 c++ 反编译器,并在文件中使用了它。问题是代码从原始可执行文件中的 7 行变成了 5265 行,有点难以理解。如果有人有逆向工程经验,可以在下面的评论中找到原始文件的 link。

这可能是由两件事造成的

  1. 它真的是一个木马,你从一些地方下载了你的mingw,它的代码被修改为在你创建的每个程序中添加病毒。几乎所有商业编译器都这样做,所有“免费”(破解)版本都包含该代码,每次编译代码时,病毒都会添加到您的 exe 中。

  2. 出于某种原因,您的 exe 的哈希值与现有病毒匹配,您可以通过更改代码中的一个字符来确认是否匹配,例如“hello world!”到“你好世界?”看看它是否仍然被认为是病毒,如果是,则很有可能是您的编译器将病毒添加到您的程序中。

这个问题以前出现过。使用 mingw 编译的程序往往会触发偶尔的万金油(即防病毒程序)警报。这可能是因为 mingw 是病毒作者的流行工具链,因此它的输出匹配出现在真阳性中的通用模式。这已经一遍又一遍地出现,也在 SE 上(例如 https://security.stackexchange.com/questions/229576/program-compiled-with-mingw32-is-reported-as-infected)。 [咆哮] 在我看来,这是 AV 公司无能的真实证据,因为它很容易修复,并且让你怀疑他们程序的核心功能是否得到了更好的实现。 [/咆哮]

不过你的情况有点可疑,因为触发的反病毒程序数量太多了。虽然我从未听说过 mingw 遭到破坏,粗略的 google 搜索也没有改变这一点,但这并非不可能。破坏编译器当然是传播病毒的有效方法;添加了间接级别的最著名示例是 Ken Thompson hack.

当然也有可能您的计算机感染了非 mingw 源病毒,该病毒会简单地将自身插入到它在磁盘上找到的新可执行文件中。这应该很容易通过通常的方式找到。一个起点可能是让一些其他(非 mingw)新的可执行文件接受在线检查;他们应该触发相同的 AV 程序。

请注意,虽然我有一些一般的 IT 经验,但我没有特殊的 IT 安全知识;把我说的一切作为你自己研究和行动的起点。

更新:

实际上是某种哈希冲突,编译器没有被感染。我确实按照建议多次更改了打印函数中的字符串,甚至添加了换行符,但每次,我的 AV 都将其检测为恶意软件。我还尝试删除一些代码行(包含和打印),它也将其检测为恶意软件。

有趣的是,当我向代码添加更多行时,AV 不再将其识别为病毒。让你想知道所使用的散列函数是如何工作的,以及它与程序的实际内容有什么关系。

所以已经解决了,一切都很好,只是一些 AV 草率(我想这是有原因的)。