#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();
}

当我运行这个程序,它提供了“病毒警告” - 即使它不是一个病毒。现在,悲剧的是,当你删除析构函数,它不会将其检测为病毒。

下面是屏幕截图和类似的问题:

c语言 - \ n - 能创造病毒

替代文字

现在的问题是怎么了,为什么?

有帮助吗?

解决方案

看起来像一个假阳性。由于现代病毒使用多态,从防病毒程序隐藏,防病毒程序必须报告甚至部分匹配,显然与给定的源代码编译器产生一个部分匹配到的恶意软件。

其他提示

病毒扫描器使用试探法和签名来检测安全漏洞。误报是不可避免的。你的程序似乎触发启发。据推测它的校验和,文件大小或其他特征与已知病毒。这是由以下事实:一个小的变化是足以解决问题借调。

修改调用应用程序的 Virus.exe 是一个非常不幸的选择,我会假设它会迅速引发大多数病毒扫描程序(虽然它肯定不是一个完美的名字对于一个真正的病毒...)。

我认为你有一个真正的病毒的某处,也许已经修改了标准库:d 或简单地防病毒检测在可执行的图案。

请参阅 http://www.viruslist.com/en/viruses/百科全书?virusid = 1857

我的猜测是的AntiVir扫描通过DOS /糖果包含文本字符串,因为一个在第二部分的代码是这样的一个它在寻找和AntiVir检测为病毒编译的可执行文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top