| FreeMan |
4.01.2005 10:23
Сообщение
#1
|
|
- ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: 4 |
Почти каждый, кто изучает язык ассемблера, рано или поздно пишет вирус, некоторые люди пишут вирус, когда заканчивают изучать какой-нибудь язык программирования... Прежде чем читать то, что я буду писать ниже и понимать хоть что-нибудь, вы должны:
а) знать основные команды ассемблера б) уметь пользоватся АПИ-функциями в) взять где-нибудь (можно и у меня) TASM32 (можно и другой, но каждый компилятор имеет свои особенности). г) отладчик (если собираетесь собственноручно создать зверька, то без отладки довольно трудно найти ошибки) д) прогу, которая прикреплена (на неё вопит касперский, но это не вирус!!!! ) е) иметь здоровую голову (если вы хотите испортить все компы на Земле, то ваше место в больнице, а не здесь) ё) ПОМНИТЬ, ЧТО ЭТОТ МАТЕРИАЛ ПРЕДСТАВЛЕН ТОЛЬКО В ЦЕЛЯХ ОБУЧЕНИЯ, И ЗА ПОСЛЕДСТВИЯ Я НИКАКОЙ ОТВЕТСТВЕННОСТИ НЕ НЕСУ Вроде всё. Теперь план обучения: 1) формат заголовка файла РЕ 2) разбор основных полей заголовка РЕ 3) методика заражения 4) дельта-смещение. 5) поиск АПИ 6) разбор используемых АПИ 7) пишем код 8) Reserved Прикрепленные файлы -------------------- бб
|
![]() ![]() |
| FreeMan |
12.01.2005 17:38
Сообщение
#2
|
|
- ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: 4 |
7. Пишем код
В исполняемый файл добавляем код вируса. Этим действием мы увеличиваем "длину" файла на "длину" вируса. Если такой файл запустить, то, скорее всего, вы увидите сообщение о том, что файл не является приложением под винду. Это происходит из-за того, что длина файла больше, чем та, которая указана в заголовке. Если мы увеличим величину Size of Image на длину вируса (которую выровняем на SectionAlignment), то опять получим сообщение об ошибке. В чём же дело, ведь все поля заголовка исправлены на нужные? Дело в том, что в файле есть ещё несколько структур, которые надо пофиксить. РЕ файл поделен на секции (секция кода, данных...). Для каждой секции есть структура, которая описывает её (object entry). Все структуры находятся одна за другой за заголовком и имеют такой формат: Object Entry: = 28h bytes Я пометил * те поля, которые нас больше всего интересуют. Виртуальный размер секции - это размер секции (когда она загружена в памяти), выравненный по SectionAlignment. Если мы записали в последнюю секцию код, то должны увеличить это поле для последней секции (не для каждой секции). Кстати, загрузчик контролирует выполнение равенства HeaderSize+Summa(VirtualSize[i],i)=Size Of Image (все значения выровнять по SectionAlignment) Section RVA - это адрес (RVA относительно ImageBase) начала секции, когда она загружена в память. Используется для нахождения новой точки входа Physical Size - размер секции, когда она в файле. Выровненное по File Alignment. Должно быть увеличено на длину виря, выровненную по File Alignment Physical Offset - смещене cекции относительно начала файла. Используем для поиска секции в файле. Object Flags - флаги. Могут иметь следующие значения или их комбинацию. Object Flags: *00000020h Секция содержит программный код 00000040h Секция содержит инициализированные данные 00000080h Секция содержит неинициализированные данные *20000000h Секция является исполняемой (см. флаг 00000020h) 40000000h Секция только для чтения *80000000h Секция может использоваться для записи и чтения Мы же будем устанавливать это поле в 0A0000020h (это комбинация отмеченных полей). Кстати pewrsec.exe, который я прикрепил в начале туториала, изменяет флаги всех секций на 0A0000020h, что позволяет нам работать с переменными, которые находятся в секции кода (и чего на него так ругаться?). Если боитесь использовать эту программу, то можете сделать для этого свою (когда мы закончим писать вирус вы будете в состоянии это сделать самостоятельно, хотя по просьбам трудящихся могу накодить и выложить код). -------------------- бб
|
FreeMan Пишем вирус... 4.01.2005 10:23
FreeMan 1. Формат заголовка РЕ
Заголовок - это структура,... 4.01.2005 10:25
FreeMan 2. Разбор основных полей РЕ заголовка.
Итак, вы п... 4.01.2005 10:31
FreeMan 3. Методика заражения
Пишу в виде алгоритма, хотя... 4.01.2005 10:33
FreeMan 4. Дельта смещение.
При линковке программы происхо... 5.01.2005 10:17
FreeMan 3.1 В поисках дельты.
Может вам показалось, что по... 5.01.2005 10:17
FreeMan 5) Поиск АПИ.
Когда Винда загружает файл, она в ад... 5.01.2005 10:20
FreeMan [b]5.1. Поиск адреса кернела
Кернел висит в памяти... 5.01.2005 11:38
FreeMan [b]5.2 Поиск АПИ...
Теперь адрес кернела мы знаем... 5.01.2005 13:07
FreeMan [b]6. Pазбор используемых АПИ
Разбор сводится к ко... 7.01.2005 12:51
FreeMan FindFirstFileA - ищет файл в текущей директории
... 7.01.2005 13:13
FreeMan FindNextFileA - ищет следующий файл
hFindFile -... 7.01.2005 13:30
FreeMan MapViewOfFile - помещает промэппированный файл в п... 7.01.2005 13:45
FreeMan UnmapViewOfFile - полная противоположность MapView... 12.01.2005 17:37
FreeMan То есть, для успешного заражения надо пофиксить ещ... 12.01.2005 17:41
FreeMan [b]7.1 Пишем код
Для разминки напишем прогу, котор... 12.01.2005 17:42
FreeMan Кстати, вышел номер 29А... http://www.vx.netlux.or... 12.01.2005 18:03
FreeMan Теперь пришло время писать код.
includelib import... 14.01.2005 16:51
FreeMan ls_found:
; сюда попадём после того, как найдена ... 14.01.2005 16:52
Тоха ЭТО КРУТО!
Спасибо большое. 26.02.2009 13:09![]() ![]() |
|
Текстовая версия | 8.11.2025 4:12 |