IPB
ЛогинПароль:

> Пишем вирус..., Наконец написал.
сообщение
Сообщение #1


-
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +


Почти каждый, кто изучает язык ассемблера, рано или поздно пишет вирус, некоторые люди пишут вирус, когда заканчивают изучать какой-нибудь язык программирования... Прежде чем читать то, что я буду писать ниже и понимать хоть что-нибудь, вы должны:
а) знать основные команды ассемблера
б) уметь пользоватся АПИ-функциями
в) взять где-нибудь (можно и у меня) TASM32 (можно и другой, но каждый компилятор имеет свои особенности).
г) отладчик (если собираетесь собственноручно создать зверька, то без отладки довольно трудно найти ошибки)
д) прогу, которая прикреплена (на неё вопит касперский, но это не вирус!!!! )
е) иметь здоровую голову (если вы хотите испортить все компы на Земле, то ваше место в больнице, а не здесь)
ё) ПОМНИТЬ, ЧТО ЭТОТ МАТЕРИАЛ ПРЕДСТАВЛЕН ТОЛЬКО В ЦЕЛЯХ ОБУЧЕНИЯ, И ЗА ПОСЛЕДСТВИЯ Я НИКАКОЙ ОТВЕТСТВЕННОСТИ НЕ НЕСУ
Вроде всё.

Теперь план обучения:
1) формат заголовка файла РЕ
2) разбор основных полей заголовка РЕ
3) методика заражения
4) дельта-смещение.
5) поиск АПИ
6) разбор используемых АПИ
7) пишем код
8) Reserved smile.gif


Прикрепленные файлы
Прикрепленный файл  Pewrsec.exe ( 8.62 килобайт ) Кол-во скачиваний: 3


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


-
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +


4. Дельта смещение.
При линковке программы происходит замена имён меток, переменных на их адреса в памяти. Таким образом строка
mov eax, offset message

превращается в
mov eax, xxxxxxxx
где xxxxxxxx - смещение переменной message. Для примера набейте такую прогу и сохраните в папке с ТАСМом:

includelib import32.lib
extrn ExitProcess: near

.386
.model flat
.data
db 0
.code
start:
mov eax, aaaa
push 0
call ExitProcess
aaaa dd 0
end start


Скомпилируйте её. Для компиляции создайте ВАТ-файл в папке с ТАСМом и заполните его следующим содержимым:
Tasm32.exe /m3 /ml /zi iasdf.asm , , ;
Tlink32.exe /Tpe /aa /v iasdf, iasdf, ,import32.lib


В данном случае iasdf.asm - имя файла примера. Запустите ВАТ файл.
В результате в папке появится файл iasdf.exe. Если вы посмотрите в отладчике этот файл, то увидите что-то типа:


00401000 A10C104000 mov eax,[0040100C] ;mov eax, aaaa
00401005 6A00 push 00000000 ;push 0
...
0040100C 0000 add [eax],al ;значение переменной,
0040100E 0000 add [eax],al ;"истолкованное" отладчиком как команда.

То есть аааа - это место в памяти.

Теперь посмотрим на это более внимательно... Программа, которую мы написали выше, будет выполнятся без проблем из-за того, что будет грузится с одного и того-же адреса в памяти (поле ImageBase заголовка) и после запуска в eax будет заноситься значение по адресу 0040100C. Когда тело вируса находится в конце заражаемого файла, в память его, скорее засунут тоже не в начало. Допустим, мы записали вирус (допустим это вышенаписанная прога), в конец файла. Файл имеет такую структуру в памяти:
Секция		смещение(VA)	размер
код 00401000 1000
данные 00402000 2000
неиниц 00404000


Так как мы в конце файла, то, скорее всего и в последней секции. Допустим, она была пустая, когда мы поселились, тогда у нас будет такая картина:

...
00404000 A10C104000 mov eax,[0040100C] ;mov eax, то_что_по_адресу_0040100C
00404005 6A00 push 00000000 ;push 0
...
0040400C 0000 add [eax],al ;значение переменной,
0040400E 0000 add [eax],al ;"истолкованное" отладчиком как команды.


Неувязка - переменная оказалась по адресу 0040400С, а в регистр попадает чёрти-что по смещению 0040100C.
Проблема эта решается нахождением так называемого дельта смещения. Это значение, на которое отличается значение адреса при линковке от того, которое получилось в силу тех или иных обстоятельств. В нашем случае адреса изменились на 00404000-0401000=3000. Это и есть дельта. Как её использовать для получения реального адреса - 0401000+3000=00404000, просто добавить к обычному адресу.


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
FreeMan   Пишем вирус...   4.01.2005 14:23
FreeMan   1. Формат заголовка РЕ Заголовок - это структура,…   4.01.2005 14:25
FreeMan   2. Разбор основных полей РЕ заголовка. Итак, вы п…   4.01.2005 14:31
FreeMan   3. Методика заражения Пишу в виде алгоритма, хотя…   4.01.2005 14:33
FreeMan   4. Дельта смещение. При линковке программы происхо…   5.01.2005 14:17
FreeMan   3.1 В поисках дельты. Может вам показалось, что по…   5.01.2005 14:17
FreeMan   5) Поиск АПИ. Когда Винда загружает файл, она в ад…   5.01.2005 14:20
FreeMan   [b]5.1. Поиск адреса кернела Кернел висит в памяти…   5.01.2005 15:38
FreeMan   [b]5.2 Поиск АПИ... Теперь адрес кернела мы знаем…   5.01.2005 17:07
FreeMan   [b]6. Pазбор используемых АПИ Разбор сводится к ко…   7.01.2005 16:51
FreeMan   FindFirstFileA - ищет файл в текущей директории …   7.01.2005 17:13
FreeMan   FindNextFileA - ищет следующий файл hFindFile -…   7.01.2005 17:30
FreeMan   MapViewOfFile - помещает промэппированный файл в п…   7.01.2005 17:45
FreeMan   UnmapViewOfFile - полная противоположность MapView…   12.01.2005 21:37
FreeMan   [b]7. Пишем код В исполняемый файл добавляем код …   12.01.2005 21:38
FreeMan   То есть, для успешного заражения надо пофиксить ещ…   12.01.2005 21:41
FreeMan   [b]7.1 Пишем код Для разминки напишем прогу, котор…   12.01.2005 21:42
FreeMan   Кстати, вышел номер 29А... http://www.vx.netlux.or…   12.01.2005 22:03
FreeMan   Теперь пришло время писать код. includelib import…   14.01.2005 20:51
FreeMan   ls_found: ; сюда попадём после того, как найдена …   14.01.2005 20:52
Тоха   ЭТО КРУТО! Спасибо большое.   26.02.2009 17:09


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 13:13
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name