C程序意外制造病毒..?为什么?

3
#include <conio.h>
#include <stdlib.h>

main() {
    printf("hello");
    getchar();
}

当我编译上述代码时,AVG杀毒软件会检测到创建的二进制文件,并立即将其删除。
我收到了威胁:Trojan Horse BackDoor.Generic16.BOCF 为什么会出现这种情况?

5
可能是一个不好的假阳性。 - paulm
8
很可能是“误报”。一些杀毒软件会监控可执行文件的创建,建议将编译器添加到安全区域或排除列表中。 - NetVipeC
与您的问题无关,但 main 的正确定义是 int main(void) { /* ... */ }。您还缺少必需的 #include <stdio.h>。更重要的是,尝试对程序进行一些更改,看看是否会产生相同的行为。 - Keith Thompson
问题在于,无论你创建的内容是什么,都与防病毒软件正在寻找的“签名”匹配。我曾经为了我的 Nokia 模拟器软件与某些防病毒软件打了很多交道,因为每个生成的模块都被标记为“病毒”。不得不放弃这款防病毒软件。 - Hot Licks
3个回答

3
我同意paulm和NetVipeC的看法,因为这看起来像是一个误报。误报是指将正常或预期行为识别为异常或恶意行为。当杀毒软件错误地将一个无害文件分类为病毒时,就会使用误报这个术语。 您可以查看详细信息
误报所造成的主要问题是它们很容易淹没合法的IDS警报。单个规则引起的误报在短时间内就可以轻松创建数千个警报。如果假定分析员每五分钟可以审查一个警报,则分析员每天可以审查约100个警报。每五分钟审查一个警报对于彻底分析来说太快了,但我们可以假设一些警报不需要彻底分析,从而降低平均分析时间。从这些数字来看,很明显只有少数误报就足以淹没合法警报。那些引起重复误报的规则警报通常会被忽略或禁用。

0

我从未听说过这种情况,但也许你的C运行库被感染了?这可能会导致每个通过静态库链接生成的程序都带有病毒。为了测试这一点,请使用“动态库链接”重新编译和链接。

虽然误报是可能的,但我怀疑它会在新创建的程序中被检测到。(除非是一个奇特的杀毒软件包。)

运行全盘病毒扫描以检查所有文件。或者切换到不容易受到病毒攻击的操作系统(Linux、MacOS等),这样你就不必运行防病毒软件。


2
  1. "Virii" 不是 "virus" 的正确复数形式,应该是 "viruses"。
  2. "更换操作系统" 不是解决这个问题的合理回答。
- Kyle Strand
@KyleStrand:1)我已经将措辞去除了拉丁语的影响。2)使用天然抗病毒的操作系统是一种长期解决方案。 - wallyk
如果这是一台工作机器,而Windows是必需的开发环境怎么办?如果OP需要(或想要)使用某种仅限于Windows的软件怎么办?如果OP正在使用Windows框来学习更多关于MFC编程的知识怎么办?如果OP只是喜欢Windows怎么办?事实上,真正的问题几乎肯定不是病毒,因此没有理由建议采取激烈的反病毒对策 - 是的,切换到另一个操作系统是激烈的。 - Kyle Strand

0

我已经完全复制了你的代码,并在我的Mac终端上成功运行。我必须说,你的问题是你正在创建一个被你的反病毒软件拦截的可执行文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接