为什么 AVG 将我的 C++ 程序标记为病毒?
例如,下面是一个被 AVG 检测为病毒的 C++ 程序:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
cout << "done";
return 0;
}
运行可执行文件,我得到带有以下文本的 AVG 弹出窗口:
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
AVG 功能的屏幕截图:
总结,这里发生了什么?
AVG 防病毒是一个在您的计算机上运行的程序,它使用启发式算法和其他不精确的算法来识别哪些程序具有不需要的恶意议程。 AVG 将您的可执行文件的内容作为输入,并确定您的程序不安全。
防病毒作者正在使用Enumerating Badness 策略来识别世界上的恶意软件,但它又回来咬他们,因为这是检测恶意软件问题的错误方法。枚举不良的一个问题是误报,这是您现在遇到的问题。
为更好地理解问题而采取的步骤:
第 1 步。 首先,您要非常确定 AVG 抱怨的文件是什么。为此,请转到 AVG -> 工具菜单 -> 扫描文件。选择威胁窗口中定义的有问题的可执行文件或文件。 AVG 将立即扫描文件并建议将其添加到保管库中。此时您可以知道 AVG 认为仅此文件就是恶意软件。
第 2 步。 获得有关此恶意软件/病毒文件的第二意见,更好的是,获得 50 个独立的第二意见。去网站https://www.virustotal.com,在那里你可以免费上传你的文件,它会被大约50个不同的杀毒程序分析,如果大多数人认为它是病毒,那么AVG做得很好。但是,如果只有少数防病毒软件将您的文件标记为恶意文件,那么 AVG 可能会误报。
第 3 步。 让 AVG 相信您的 C++ 程序是安全的一种简单方法是在 C++ 程序的开头添加 c++ 语句:system("pause");,然后重新编译并重新运行。对我来说,AVG 会警告我,我点击忽略,然后它让我运行它。另外,请尝试在 main 函数的末尾使用“return 1”而不是“return 0”。它会让你运行它。如果这看起来很奇怪,那就是。病毒编写者比杀毒软件编写者更聪明,因为它可以让防病毒软件发现许多误报。
第 4 步。 看看您是否可以将您的程序列入白名单。进入 AVG 中的“病毒库”。 AVG -> 历史菜单 -> 病毒库。找到代表有问题的 C++ 程序的行项目并将它们从病毒库中释放,或者将它们列入白名单,然后重试。
解决方案:
选项 1: 承认病毒编写者正在赢得与防病毒软件的战争。隐藏某事比调查一切并发现所有不良情况更容易。 AVG 无法区分合法病毒和您刚刚制作的某些 c++ 程序。获取新的杀毒软件,或者获取不需要杀毒软件 (linux) 的操作系统,或者完全不使用杀毒软件并保留大量离线异地备份。
选项 2: 告诉 AVG 停止分析带有 .EXE 扩展名的文件。警告这将降低 AVG 保护您的计算机免受真正病毒/恶意软件侵害的能力。转到 AVG 控制台 -> 工具 -> 高级设置 -> 防病毒 -> Resident Shield -> 专家设置。您将看到一个带有标签的文本框:“始终扫描具有以下扩展名的文件”。从该文本框中删除 EXE;。保存并尝试重新运行您的程序。 AVG 将不再抱怨您的 something.exe 可执行文件。
选项 3: 摆弄你的 C++ 程序,直到它不再被标记为病毒。添加一些#include 库,不包括其他一些。一个无关紧要的更改可能会导致 AVG 决定您的文件是恶意文件。
如果 AVG 的任何人有兴趣追查此错误,请here is the false positive executable 了解上述情况