Pergunta

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

Tenho guardado este programa como virus.cpp. Estou usando o compilador Turbo C para compilar este programa e executado a partir de Turbo C (Ctrl + F9).

Estou usando o Windows 7 e eu ter instalado sistema de vírus Avira AntiVir.

Quando eu tentei correr acima programa, ele cria um verme (DOS / doces). Eu acredito que não há nada de errado no programa.

alt texto

Agora, aqui é algo especial. Executar o mesmo programa com seguinte diferença. Aqui, a única diferença é espaço entre \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();
}

A diferença é apenas \ n e espaço. A minha pergunta é, porque é o meu programa simples é detectado como vírus?

Aqui está outro exemplo de código, desta vez para 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();
}

Quando eu executar este programa dá "Aviso Virus" - Mesmo que não é um vírus. Agora, a tragédia é quando você remove destruidores, não vai detectá-lo como vírus.

Aqui está a captura de tela e pergunta semelhante:

Linguagem C - \ n - a criação de vírus

alt texto

A questão é como e por quê?

Foi útil?

Solução

Parece um falso-positivo. Como os vírus modernos usam polimorfismo se esconder de programas anti-vírus, o programa anti-vírus tem de comunicar partidas, mesmo parciais, e aparentemente seu compilador com o dado código fonte produz uma correspondência parcial para que o malware.

Outras dicas

scanners

Vírus usar heurísticas e assinaturas para detectar vulnerabilidades. Os falsos positivos são inevitáveis. Seu programa parece desencadear a heurística. Presumivelmente seu checksum, tamanho ou outras características correspondem a um vírus conhecido. Isto é destacado pelo fato de que uma pequena mudança é suficiente para resolver o problema.

Editar Chamando o aplicativo virus.exe é uma escolha muito infeliz, e eu presumo que irá desencadear a maioria dos scanners de vírus rapidamente (embora certamente não é um nome perfeito para um vírus real ...).

I think you have a real virus somewhere, that perhaps have modified the standard libraries :D Or simply the antivirus detects a pattern in the executable.

See http://www.viruslist.com/en/viruses/encyclopedia?virusid=1857 .

My guess is that Antivir scans through text strings that DOS/Candy contains, and since the one in the second piece of code is like the one it's looking for, Antivir detects the compiled executable as a virus.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top