Контакты

Для связи с нами можно использовать:
irc://irc.chatnet.ru:#gfs
icq://546460
email://cobalt[@]gfs-team.ru

Все материалы предоставлены только с ознакомительной целью
ГлавнаяСтатьиВирусологияВведение
© EvilCoder 01.04.2006

Введение.

Хочу вам представить цикл статей по написанию Вирусов под ОС семейства Вин32. Писать вирус мы будем естественно на Ассемблере. Почему? Если вы не знаете ответа на этот вопрос, то я думаю эта статья не для вас. Статья предназначена для лиц знакомых с Ассемблером, но я постараюсь максимально подробно объяснять все моменты, так что для незнающих асма тоже плохо не будет. Хотелось бы сделать замечание: сам я далеко не профи в области VX-кодинга, однако мне удалось написать Вирус заражающий ЕХЕ файлы формата РЕ. И я думаю, никто не сможет упрекнуть меня в незнании. Я не исключаю допущения ошибок в моих статьях и прошу не судить меня строго. Буду очень благодарен, если вы сообщите мне о допущенных ошибках. Статей я намериваюсь написать немало, поэтому появляться они будут не сразу. И так начнем…

Формат РЕ.

Заражать наш вирус будет исполняемые (ЕХЕ) файлы формата PortableExecutables (PE). Это формат исполняемых файлов ОС семейства Win32 (Win95/98/XP/NT и т.д.). Документации по «PE EXE» в инете достаточно, и составлены они очень умными людьми. Но, из всего объема этой документации для написания вируса, необходимо знать не очень много. Я настоятельно рекомендую для понимания всего изложенного материала ознакомиться с документацией (ссылка внизу). Стоит сказать, что приводимое мной описание формата является не совсем «правильным описанием» просто я пытаюсь все представить так, чтоб было более понятно и легко именно для написания инфектора. РЕ ЕХЕ файл состоит из множества различных частей входящие одни в другие. Вот как я выделяю основные части любого РЕ ЕХЕ файла:

   +-----------------+     
                |   Заголовок     |     Заголовок всегда один
                +-----------------+

                +-----------------+     
                |   секция кода   |
                +-----------------+
                +-----------------+     
                |  секция .....   |
                +-----------------+
                +-----------------+     
                |  секция .....   |
                +-----------------+
                +-----------------+     
                |секция вируса ;-)|     <-- эту секцию добавит наш вирус        
                +-----------------+
В заголовок входят:
1. DOS header   - старый «com» подробнее в док-ции
        2. PE header            - РЕ заголовок. (!) вот это нам пригодится
        3. Object Tables        - Таблица описания всех секций.

То, что касается DOS header мы затрагивать не будем потому, что нам он не понадобиться. Единственное что здесь нужно знать, это то, что начало DOS header это два байта «MZ»(символ “М”=4Dh и “Z”=5Ah). Вот PE header нам действительно нужно знать подробно (см. Док). Начало PE header это два байта «PE»(символ “P”=50h и “E”=45h).Здесь располагается всz необходимая нам в дальнейшем информация, это и EntryPoint и ImageBase и ImageSize и т.д. Прежде чем описывать Object Tables, следует понять что такое Секция. Секция в банальном понимании – это простой набор большого количество байт. Секции бывают: кода, данных, импорта, экспорта и т.д (назначение секции так же задается ее «флагами»). Возможное количество секций от 1 до «пока ЕХЕ файл не достигнет 4 ГБ». Первая секция почти всегда «секция кода», полноценный РЕ ЕХЕ файл не может быть без нее (ведь что-то же должно «выполнятся»), а присутствие остальных секций необязательно.

Object Tables – это структура данных (о каждой секции)

Object Tables:

                +-----------------+
                | "описание"      |
                |   секция кода   |
                +-----------------+
                +-----------------+
                | "описание"      |     
                |  секции .....   |
                +-----------------+
                +-----------------+
                | "описание"      |     
                |  секции вируса  |   <-- Это добавит наш вирус.
                +-----------------+

Очень надеюсь на то, что вы понимаете :-). В это самое «описание» входят такие характеристики секции как: Размер, Адрес Начала Секции, Адрес загрузки, Флаги секции.

Наш вирус создаст свою секцию, плюс к уже имеющимся секциям (при изучении документации к «РЕ» следует уделить особое внимание описанию секций). Поэтому нам следует поменять заголовок жертвы так, чтобы новая секция была «легальной» ;-). Нам следует изменить:

1. [$+6h] NumberOfSection – Количество секций. Плюс один к уже имеющимся.

2. [$+28h] AddressOfEntryPoint – Вот именно по этому адресу программа начнет «выполнятся». Наша задача адрес точки входа в программу поменять на адрес указывающий на код вируса. Затем наш вирус передаст управление на легальную точку входа.

3. [$+50h] SizeOfImage - Размер всего образа в памяти выровненный на SectionAlignment (сумма размера всех секций + РЕ заголовок). К этому значению следует прибавить размер нашей секции.

4. [$+D0h] BoundImportTableAdress – Вот тут придется немного по сложнее (см. Док.). Этот адрес указывает на некоторые данные которые расположены в заголовке сразу за описанием последней секции. Нас не интересует для чего нужны эти данные, главное знать что для чего то они нужны ;-). Наша задача сдвинуть эти данные так, чтобы описание нашей секции не затерло эти данные. К данному значению прибавим 28h (равно столько необходимо для описания каждой секции). Далее когда мы будем писать сам инфектор мы уделим этому внимание и переместим эти данные так как надо, и чтоб Адрес указывал на правильную структура этих данных.

5. Здесь уже следует создание «описания» новой секции. Создаем новую секцию, секцию вируса. ;-)

[$+XXh] – Это смещение от $ ($=”PE Header”) + XX байт. Смещение в байтах относительно Заголовка РЕ.

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

Наличие отладчика обязательно! А лучше если это отладчик Olly, найти его не составит труда.

Конечно лучше всего для понимания посмотреть на реальный заголовок. Для этого открываем в OllyDbg любой ЕХЕ файл. Далее View -> Memory / выбираем строку с название открытой программы + PE header. Перед вами откроется заголовок РЕ со всеми подробностями, читаем документацию параллельно просматривая реальный Заголовок в отладчике. Кстати там же (View -> Memory) вы увидите как расположен образ ЕХЕ файла в памяти, все его секции.

(!) Документация к РЕ расположена здесь: http://www.wasm.ru/docs/2/pe_docs.zip

Буду рад ответить на все ваши вопросы. Заходите к нам на форум в раздел Ассемблер.




© EvilCoder 01.04.2006

e-Commerce Partners Network
icegex написал:

Хек стотья коротко и ясно =)
Ссылку только подправьте, а то не красиво =

EvilCoder написал:

та... фигня. лучше на тот же васм.ру зайти, там ребята пограмотнее все уже давно расписали..

Cobalt написал:

EvilCoder - можно счесть за рекламу ;). Хоть бы ссылки выложел, раз уж на то пошло.

Ник:

Текст:
P Br B I Qute



Код: обновить
Последние комментарии
26.06.2017 07:33:17 DeweyAloma написал:
If you have a desire to learn how to earn from...
XSS Часть II
26.06.2017 07:09:03 DeweyAloma написал:
If you have a desire to learn how to earn from...
Взлом приложений WEB 2.0 из Firefox
26.06.2017 04:42:47 DeweyAloma написал:
If you have a desire to learn how to earn from...
HTTP. Описание протокола
Реклама

Тут должна была быть ваша реклама, но мы потеряли глиняную табличку с ее текстом. SapeId: 665044

Rambler's Top100