Программа на языке C определяется как вирус - PullRequest
1 голос
/ 14 марта 2010
#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 для компиляции этой программы и запуска из Turbo C (Ctrl + F9).

Я использую Windows 7 и установил антивирусную систему Avira AntiVir.

Когда я пытался запустить вышеуказанную программу, она создает червя (DOS / Candy). Я считаю, что в программе нет ничего плохого.

альтернативный текст

Теперь вот что-то особенное. Выполните ту же программу со следующим отличием. Здесь единственная разница - это пространство между \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 Warning» - даже это не вирус. Теперь трагедия в том, что вы удаляете деструкторы, но не обнаруживаете их как вирус.

Вот снимок экрана и похожий вопрос:

C Язык - \ n - создание вируса

альтернативный текст

Вопрос в том, как и почему?

Ответы [ 4 ]

19 голосов
/ 14 марта 2010

Вирусные сканеры используют эвристику и сигнатуры для обнаружения уязвимостей. Ложные срабатывания неизбежны. Кажется, ваша программа вызывает эвристику. Предположительно, его контрольная сумма, размер файла или другие характеристики соответствуют известному вирусу. Это подтверждается тем фактом, что для решения проблемы достаточно небольшого изменения.

РЕДАКТИРОВАТЬ Вызов вашего приложения Virus.exe - довольно неудачный выбор, и я бы предположил, что он быстро вызовет большинство антивирусных сканеров (хотя это определенно не идеальное название настоящий вирус ...).

12 голосов
/ 14 марта 2010

Похоже на ложное срабатывание. Поскольку современные вирусы используют полиморфизм для сокрытия от антивирусных программ, антивирусная программа должна сообщать даже о частичных совпадениях, и, очевидно, ваш компилятор с заданным исходным кодом производит частичное совпадение с этой вредоносной программой.

3 голосов
/ 14 марта 2010

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

Я предполагаю, что Antivir просматривает текстовые строки, содержащиеся в DOS / Candy, и поскольку второй фрагмент кода похож на тот, который он ищет, Antivir обнаруживает скомпилированный исполняемый файл как вирус.

3 голосов
/ 14 марта 2010

Я думаю, у вас где-то есть настоящий вирус, который, возможно, изменил стандартные библиотеки: D Или просто антивирус обнаруживает шаблон в исполняемом файле.

...