Контакты

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

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

И так, с форматом исполняемых файлов «РЕ» мы разобрались (ведь так? ;-) Приступим к следующей части. Я попробую описать общий принцип работы будущего вируса. (небольшое отступление: советую вам читать статьи в «печатном варианте», кнопка над статьей позволяет это сделать. Просто из-за дизайна на нашем сайте «выравнивание» текста делает статью не очень удобной для чтения) Для написания вируса нам конечно же понадобится компилятор Ассемблера, и пользоваться мы будем FASM`ом (FlatAssembler - ссылка внизу). Почему не МАСМ? Не знаю, когда я начал изучать Ассемблер я долго не мог разобраться в нем. ФАСМ намного проще, он маленького размера и имеет все те же возможности что и любой другой компилятор.

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

Вирус – а что это такое? В пределах моего цикла под вирусом понимается: Вирус – это сегмент кода (обыкновенный набор команд) основной функцией которого является размножение. Надо понимать что вирус – это не ЕХЕ файл, ЕХЕ файл является носителем вируса, но никак не самим вирусом. Наша задача создать ЕХЕ файл в котором будет находиться Код вируса независящий от самой программы. Разделим вирус на составные части и их функции:

1. Адаптация – надо иметь ввиду, что свою деятельность вирус начинает внутри зараженной программы. К данному этапу мы относим: - находим адрес загрузки вируса (адрес секции вируса) – это необходимо для адресации данных используемых вирусом. - поиск адресов API функций. Если вы внимательно изучили формат «РЕ» там было сказано про загрузчик ЕХЕ файлов который заполняет таблицу импорта, так программа узнает адреса нужных ей функций. Т.к. код вируса у нас должен быть полностью не зависим от программы носителя, мы не можем позволить себе таблицу импорта, поэтому придется находить адреса вручную.

2. Поиск жертвы:

      - Процедура поиска файлов по маске «ЕХЕ». 
           - Проверка файла на соответствие формату «РЕ».
           - Проверка на зараженность. Обязательный этап, иначе наш вирус
           будет заражать файл многократно. 

3. Заражение жертвы – самый сложный и объемный этап выполнения вируса.

           - Открытие ЕХЕ файла на запись.
           - Правка заголовка «РЕ» и создание записи  о новой секции в
           ObjectTable.              
           - Запись вируса в тело жертвы.

4. Передача управления носителю вируса.

- обыкновенный jmp на Прежний EntryPoint.

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

Рассмотри первую часть этапа адаптации. Поиск адреса загрузки. Рассмотрим понятие База-независимого кода – код должен быть не зависим от адреса его загрузки, данная технология используется при составлении Шел кодов (ака эксплойтов) при уязвимостях переполнения буфера. Данная технология также имеет название: «Программирование в shell-code стиле». Вирус получая управление должен определить адрес загрузки, это необходимо для определения смещения к данным используемым вирусом, которые кстати расположены сразу за кодом вируса. Для этого применяется понятие Дельта смещения и техника определения Дельта смещения. Рассмотрим пару примеров:

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

          format PE GUI 4.0
          entry START:
          section '.code' code writeable readable executable
          START:

Что это за параметры и зачем они нужны вы можете узнать в документации к ФАСМу, которую найдете в Гугле ;-). При компиляции получиться ЕХЕ файл Формата «РЕ» с кодом который следует сразу за меткой Старт. И так пример:

        lea eax, Stroka
        NOP
        NOP
        Stroka db 'Hello'

Скомпилируйте код Run > Compile.(данный файл если его запустить выдаст ошибку. Потому что после выполнения команд, процессор дойдет до бессмысленного набора команд а именно байты слова Hello) Я думаю вы Разместили наш код сразу за меткой старт предыдущего кода, ведь так? Получившийся файл откроем в Olly (у вас он конечно же уже есть) Что мы видим? Мы видим что в EAX компилятор поместил 00401007h (lea eax, 00401007h). Это адрес данных Stroka. Вроде бы все правильно, так и есть Компилятор рассчитал этот адрес верно. А теперь представьте что наш код будет находиться не по адресу 00401000h (См. в отладчик) а допустим по адресу 00404000h. Вот тут в Регистр ЕАХ уже подойдут совсем другие данные(00401007h), он не будет указывать на строку Hello. Реальные данные находятся по адресу 00404007h. Вот с этой проблемой мы и будем бороться. Методом Дельта смещения. Смотрим следующий код:

  Delta: 
              call $+5           
              pop edx                   
              sub edx,5 

Как известно команда call помещает адрес возврата в стек. «$+5» - указывает на следующую команду. Происходит вызов след команды. Затем поднимаем из стека адрес <данной команды> pop edx. Отнимаем от EDX 5 теперь в EDX находится точный адрес Метки Delta. Мы определили свое местонахождение. Вот таким будет начало нашего вируса. При этом адресация данных уже будет происходить иначе:

   lea eax, [edx+Stroka-Delta]
        NOP
        NOP
        Stroka db 'Hello'

Смотрим в отладчик: lea eax, [edx+E]. Еh – это разница между Смещением Строки и Смещением всего кода в целом. Советую вам внимательно изучить этот код и постараться в него вдуматься. Ничего сложно в нем нет. Куда бы не попал наш код в EDX всегда будет находиться реальный адрес самого кода. И EAX точно будет указывать на слово «Hello» . Попробуйте переместить этот код средствами отладчика в любое другое места этой же программы, получив управление он не заблудится ;-). Вот это пример база-независимого кода. (На все возникшие проблемы буду рад ответить на нашем форуме в разделе «Ассемблер»)

компилятор фасм


© EvilCoder 05.04.2006

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

[Цитатко] Целью вируса является: остаться не замеченным хотя бы до полного
заражения системы, поэтому следует учитывать работоспособность жертвы. Чтоб
пользователь ничего не заметил. С каждым запуском носителя вирус будет поражать
только один файл, этого будет достаточно, чтоб остаться не замеченным.[/Цитатко]
Не проще ли поставить таймаут, дабы заставить заразить всю сисему, иначе юзер может запустить один вирь носитель тот заразит другой файл, но юзер более эти два файла может не трогать. Тобишь не проще ли сделать так чтоб вирь просто заражал все файлы но с таймаутом к примеру в 30 секунд (каждые полминуты новый exe файл), хотя учитывая сегодняшние мощи машин имхо можно обойтись и без этого.

EvilCoder написал:

Цель статьи, показать как происходит заражение. Да и вообще давно это было =) мы тогда еще многого не знале.

Ник:

Текст:
P Br B I Qute



Код: обновить
Последние комментарии
26.07.2017 15:18:53 Flossiefal написал:
Принципиально новое обновление "XRumer 16.0 + XEvil": решение бесплатно и быстро...
Релиз
26.07.2017 14:40:32 Flossiefal написал:
Революционное обновление "XRumer 16.0 + XEvil": распознавание бесплатно и быстро captchas...
Новый релиз
26.07.2017 12:58:08 Flossiefal написал:
Революционное обновление "XRumer 16.0 + XEvil": взлом бесплатно и быстро captcha...
Новая статья
Реклама

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

Rambler's Top100