C++ 为什么AVG(防病毒软件)检测到由Dev-C++;作为一种病毒?

C++ 为什么AVG(防病毒软件)检测到由Dev-C++;作为一种病毒?,c++,antivirus,dev-c++,C++,Antivirus,Dev C++,我创建了一个默认的Dev-C++项目,而不是通常的返回0,返回退出成功编译并运行它时,我的防病毒软件提醒我该可执行文件是病毒 我用Visual C++、伊柯丽斯和CODBOLD开发了相同的代码,它们都成功编译了…所以我在这里有点困惑… -为什么AVG会检测Dev-C++生成的可执行文件,并返回EXIT_SUCCESS会变成病毒?当你在谷歌上搜索“define EXIT\u SUCCESS”时,你会看到它应该是“0” 尝试使用IDA Pro反汇编程序+Hex-Rays反编译程序反编译您的可执行文件

我创建了一个默认的Dev-C++项目,而不是通常的
返回0
,返回退出成功编译并运行它时,我的防病毒软件提醒我该可执行文件是病毒

我用Visual C++、伊柯丽斯和CODBOLD开发了相同的代码,它们都成功编译了…所以我在这里有点困惑…

-为什么AVG会检测Dev-C++生成的可执行文件,并返回EXIT_SUCCESS会变成病毒?

当你在谷歌上搜索“define EXIT\u SUCCESS”时,你会看到它应该是“0”

尝试使用IDA Pro反汇编程序+Hex-Rays反编译程序反编译您的可执行文件,看看那里到底发生了什么:)

可能会减轻整个问题,因为AVG似乎不喜欢(可能)旧版本gcc的组合(因为Dev-C++不再开发了)一个空程序.< /p>为什么AVG给我的C++程序贴上病毒标签?

例如,这里是一个C++程序,AVG检测为病毒:

#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
    cout << "done";
    return 0;
}
AVG所做工作的屏幕截图:

小结,这是怎么回事? AVG antivirus是一个在您的计算机上运行的程序,它使用启发式和其他不精确的算法来识别哪些程序具有不需要的恶意议程。AVG将可执行文件的内容作为输入,并判定您的程序不安全

杀毒软件的作者们正在使用这一策略来识别世界上的恶意软件,而它又回来攻击他们,因为这是检测恶意软件问题的错误方法。列举不良事件的一个问题是误报,这是您现在遇到的问题

为更好地理解问题而采取的步骤: 步骤1。首先,您需要非常确定AVG抱怨的是什么文件。要执行此操作,请转到平均->工具菜单->扫描文件。选择威胁窗口中定义的有问题的可执行文件或文件。AVG将立即扫描该文件,并建议将其添加到vault中。在这一点上,你可以知道AVG认为这个文件本身就是恶意软件

第2步。获得关于此恶意软件/病毒文件的第二意见,最好是获得50个独立的第二意见。转到网站
https://www.virustotal.com
,在那里你可以免费上传你的文件,大约50个不同的防病毒程序将对其进行分析,如果大多数程序认为这是一种病毒,那么AVG做得很好。但如果只有少数抗病毒药物将您的文件标记为邪恶,那么AVG有可能出现假阳性

<强>步骤3。< /强>一个简单的方法来说服AVG你的C++程序是安全的,就是添加C++语句:<代码>系统(“暂停”);代码>在C++程序的开始,并重新编译和重新运行。对我来说,AVG然后警告我,我点击忽略,然后它让我无论如何运行它。另外,尝试在主函数末尾使用“return 1”而不是“return 0”。它会让你运行它。如果这看起来很奇怪,那就是。病毒编写者比反病毒编写者更聪明,因为他们可以让反病毒软件看到许多误报

第4步。查看是否可以将您的程序列为白名单。进入平均值->历史菜单->病毒库中的“病毒库”。找到表示你的冒犯C++程序并从病毒库中释放它们的条目,或者将它们列表为白色,然后重试。 解决:
选项1:确认病毒编写者正在赢得反病毒软件的战争。隐藏一些东西要比调查所有的事情和发现所有的不好的地方容易得多。AVG无法分辨出合法病毒和C++程序之间的区别。获取新的防病毒软件,或者获取不需要防病毒软件(linux)的操作系统,或者完全不使用防病毒软件,并保留大量离线异地备份

选项2:告诉AVG停止分析扩展名为.EXE的文件。警告:这将降低AVG保护您的计算机免受真实病毒/恶意软件攻击的能力。转到AVG控制台->工具->高级设置->防病毒->常驻盾牌->专家设置。您将看到一个带有标签的文本框:“始终扫描具有以下扩展名的文件”。删除
EXE从该文本框。保存并尝试重新运行您的程序。AVG将不再抱怨您的something.exe可执行文件

< >强>选项3:用C++编程,直到它不再被标记为病毒。添加一些
#包括
库,不包括其他库。一个无关紧要的改变可能会使AVG决定你的文件是恶性的

如果AVG的任何人对追踪这个bug感兴趣,那么对于上面的问题,我也面临着类似的问题

为什么:我不知道

如何避免:请阅读下面的内容

快速解决方案:不影响您的外部防病毒功能

您知道您的代码在哪个驱动器中

您知道可执行文件将在哪个驱动器中生成[因为我们可以配置它]

将其放入防病毒例外列表中

瞧。。
没有弹出窗口

可能有人恶意替换了你的头文件,并重新定义了
EXIT_SUCCESS
来做一些卑鄙的事:)我非常怀疑,没有人可以访问我的机器。
EXIT_SUCCESS
通常被定义为
0
,因此@SethCarnegie的建议是唯一合理的选择;也许它被重新定义为
(install_rootkit(),0)
。查看stdlib.h并将其视为#define EXIT_SUCCESS 0定义了它,该程序现在很好,但我想不出为什么AVG会在编译器不使用uristics时选择它。假阳性是可以预料的。谢谢。我搜索了我的标题,在stdlib.h中找到了它
AVG Resident Shield Alert
Threat detected!
File name: c:\Documents and Settings\eleschinski\Desktop\workspace\CppApplication_2\dist\Debug\MinGW-Windows\cppapplication_2.exe
Threat name:  Trojan horse Agent3.CJAI (More Info)
Move to Vault (Reccommended)
Go to file
Ignore the threat