HZV Mag #3 - HZV / Hackerzvoice / The Hackademy
HZV Mag #3 - HZV / Hackerzvoice / The Hackademy
HZV Mag #3 - HZV / Hackerzvoice / The Hackademy
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>HZV</strong> <strong>Mag</strong> <strong>#3</strong><br />
Infecteur Win32: - par Kernel Junky<br />
Push n°4 : Pointeur de structure, elle n’est<br />
pas nécessaire si l’on ouvre un fichier déjà<br />
existant.<br />
Push n°5 : Correspond au paramètre<br />
FILE_SHARE_READ, c'est-à-dire que Create-<br />
File pourra nous renvoyer un handle même<br />
si l’application que l’on tente d’ouvrir est<br />
déjà exécutée par un processus.<br />
Push n°6 : Correspond auxparamètres<br />
GENERIC_READ / GENERIC_WRITE, c'est-àdire<br />
les accès que l’on désire sur le handle,<br />
étant donné que l’on va modifier notre fichier,<br />
les deux paramètres sont nécessaires.<br />
Push n°7 : Le nom du fichier que l’on<br />
tente d’ouvrir.<br />
Notons également l’instruction CMP comparant<br />
EAX à -1, il s’agit simplement du contrôle d’erreur:<br />
en cas d’échec de la fonction on quitte et<br />
on passe au fichier suivant. Une fois le handle<br />
récupéré, nous allons avoir besoin de connaître<br />
la taille du fichier que nous allons mapper, cela<br />
va nous permettre d’allouer un espace mémoire<br />
suffisant pour le stockage en mémoire de celuici.<br />
La fonction qui permet cela est GetFileSize.<br />
Elle prend en paramètre un des champs de<br />
la structure renvoyé par FindFirstFile ainsi<br />
que le handle précédemment obtenu. Encore<br />
:<br />
xor ecx, ecx<br />
mov ecx, win32FindData.<br />
nFileSizeHigh<br />
push ecx<br />
push eax<br />
call aGetFileSize<br />
cmp eax, -1<br />
je InfectCloseFileHandle<br />
mov FileSize, eax<br />
une fois, il y a un contrôle d’erreur permettant<br />
de clore le handle et de quitter la procédure.<br />
Nous allons maintenant obtenir un deuxième<br />
handle afin de mapper notre fichier.<br />
Cette fonction ne mappe pas le fichier en mémoire,<br />
elle donne uniquement un handle sur le<br />
fichier et initialise les permissions que l’on a sur<br />
celui-ci. Elle nous permet également de configurer<br />
la taille du fichier à mapper, ici nous ajoutons<br />
2000h à la taille original du fichier afin d’être<br />
sur d’avoir la place de copier notre code viral.<br />
:<br />
push 00h<br />
mov eax, FileSize<br />
add eax, 2000h<br />
push eax<br />
push 00h<br />
push 04h<br />
push 00h<br />
mov eax, fileHandle<br />
push eax<br />
call aCreateFileMappingW<br />
cmp eax, 0<br />
je InfectCloseFileHandle<br />
mov mapHandle, eax<br />
Rapides explications des paramètres de<br />
notre appel (dans l’ordre des PUSH) :<br />
Push n°1 : Par défaut, donc nul<br />
Push n°2 : Correspond à la taille du fichier +<br />
2000h afin d’assurer nos arrières pour la copie<br />
du virus.<br />
Push n°3 : Paramètre utile en cas de gros<br />
fichier (non utilisé, donc nul)<br />
Push n°4 : Correspond au paramètres PAGE_<br />
READWRITE, c'est-à-dire l’équivalant des paramètres<br />
passés à CreateFile afin de pourvoie<br />
lire et modifier le fichier.<br />
Push n°5 : Par défaut, donc nul<br />
Ç retour au sommaire<br />
Push n°6 : le handle obtenu via l'appel à<br />
CreateFile.<br />
Encore une fois, un contrôle d’erreur pour quitter<br />
proprement notre procédure en fermant<br />
les handles ouverts est implémenté. Une fois<br />
notre handle récupéré, nous allons enfin pouvoir<br />
mapper notre exécutable en mémoire,<br />
12