【问题标题】:Why does AVG(antivirus) detect an executable produced from Dev-C++ as a virus?为什么 AVG(antivirus) 将 Dev-C++ 生成的可执行文件检测为病毒?
【发布时间】:2011-12-20 17:22:19
【问题描述】:

我创建了一个默认的 Dev-C++ 项目,而不是通常的 return 0;,它有 return EXIT_SUCCESS;,在编译和运行它时,我的防病毒软件警告我可执行文件是病毒。

我用 Visual C++、Eclipse 和 Codeblocks 尝试了相同的代码,它们都成功编译了它……所以我在这里有点困惑..

— 为什么 AVG 将 Dev-C++ 生成的带有 return EXIT_SUCCESS; 行的可执行文件检测为病毒,而其他类似的宏运行良好?

【问题讨论】:

  • 可能有人恶意替换了你的头文件并重新定义了EXIT_SUCCESS来做一些卑鄙的事:)
  • 我非常怀疑,没有人可以访问我的机器..
  • 由于EXIT_SUCCESS 通常被定义为0,@SethCarnegie 的建议是唯一看起来合理的选择;也许它被重新定义为(install_rootkit(), 0)
  • 在 stdlib.h 中窥视并看到它是 #define EXIT_SUCCESS 0 定义的,程序现在很好,但我想不出任何原因为什么 AVG 会在编译器没有的情况下选择它
  • 启发式。会出现误报。

标签: c++ antivirus dev-c++


【解决方案1】:

我遇到了类似的问题。

为什么:我不知道

如何避免:请阅读下文

快速解决方案:不影响您对外界的杀毒软件

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

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

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

瞧.. 没有更多的弹出窗口

【讨论】:

    【解决方案2】:

    为什么 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 了解上述情况

    【讨论】:

    • 完美答案,非常清晰准确。我的 Delphi XE8 和 Avast Antivirus 也有这个问题。
    • “或者得到一个不需要杀毒软件的操作系统(linux)”我忍不住笑了。没有操作系统对病毒免疫。这完全取决于病毒作者针对特定操作系统的可能性有多大。 Windows 似乎是最大的目标,所以这就是他们编写的目的。如果我愿意,我可以为 Linux、OS-X、iOS 和 Android 编写病毒/恶意软件。
    【解决方案3】:

    也许this 会减轻整个事情,因为似乎 AVG 不喜欢(可能)旧版本的 gcc(因为 Dev-C++ 不再开发)和空程序的组合。

    【讨论】:

      【解决方案4】:

      当你谷歌“define EXIT_SUCCESS”时,你会看到它应该是“0”。

      尝试使用 IDA Pro Disassembler + Hex Rays Decompiler 反编译您的可执行文件,看看到底发生了什么:)

      【讨论】:

      • 谢谢。我搜索了我的标题并在 stdlib.h 中发现它为 0,它现在可以工作,但我想知道它是如何逃脱 Dev 和 AVG 将它作为错误捡起的。未定义的宏或其他东西。奇怪的奇怪。
      猜你喜欢
      • 2011-03-15
      • 2020-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      相关资源
      最近更新 更多