C语言程序被检测为病毒
题
#include<stdio.h>
#include<conio.h>
union abc
{
int a;
int x;
float g;
};
struct pqr
{
int a;
int x;
float g;
} ;
void main()
{
union abc b;
struct pqr c;
clrscr();
b.a=10;
textbackground(2);
textcolor(6);
cprintf(" A = %d",b.a);
printf("\nUnion = %d",sizeof(b));
printf("\nStructure = %d",sizeof(c));
getch();
}
我已保存此程序作为virus.cpp。我使用的Turbo C编译器来编译该程序,并从涡轮C(Ctrl + F 9)上运行。
我使用的是Windows 7和我已经安装则Avira AntiVir病毒系统。
当我试图上述程序运行,它创建一个蜗杆(DOS /糖果)。我相信这是没有错的程序。
现在这里是一些特别的东西。执行与以下区别相同的程序。这里唯一的区别是\n
之间空间:
#include<stdio.h>
#include<conio.h>
union abc
{
int a;
int x;
float g;
};
struct pqr
{
int a;
int x;
float g;
} ;
void main()
{
union abc b;
struct pqr c;
clrscr();
b.a=10;
textbackground(2);
textcolor(6);
cprintf(" A = %d",b.a);
printf("\n Union = %d",sizeof(b));
printf("\n Structure = %d",sizeof(c));
getch();
}
不同的是仅\ n和空间。我的问题是,为什么我的简单的程序被检测为病毒?
下面是另一个代码示例,此时为C ++:
#include<iostream.h>
#include<conio.h>
class A
{
int a,b;
public:
A()
{
a=0;b=0;
}
A(int x)
{a=x;
b=0;
}
A(int x,int y)
{
a=x;
b=y;
}
~A()
{
cout<<"All things are deleted.";
}
void get()
{
cout<<"\nA = "<<a;
cout<<"\nB = "<<b;
}
};
void main()
{
A a1(5,10);
clrscr();
a1.get();
getch();
}
当我运行这个程序,它提供了“病毒警告” - 即使它不是一个病毒。现在,悲剧的是,当你删除析构函数,它不会将其检测为病毒。
下面是屏幕截图和类似的问题:
现在的问题是怎么了,为什么?
解决方案
看起来像一个假阳性。由于现代病毒使用多态,从防病毒程序隐藏,防病毒程序必须报告甚至部分匹配,显然与给定的源代码编译器产生一个部分匹配到的恶意软件。
其他提示
病毒扫描器使用试探法和签名来检测安全漏洞。误报是不可避免的。你的程序似乎触发启发。据推测它的校验和,文件大小或其他特征与已知病毒。这是由以下事实:一个小的变化是足以解决问题借调。
修改调用应用程序的 Virus.exe 是一个非常不幸的选择,我会假设它会迅速引发大多数病毒扫描程序(虽然它肯定不是一个完美的名字对于一个真正的病毒...)。
我认为你有一个真正的病毒的某处,也许已经修改了标准库:d 或简单地防病毒检测在可执行的图案。
请参阅 http://www.viruslist.com/en/viruses/百科全书?virusid = 1857 。
我的猜测是的AntiVir扫描通过DOS /糖果包含文本字符串,因为一个在第二部分的代码是这样的一个它在寻找和AntiVir检测为病毒编译的可执行文件。