27.11.2014 Views

HZV Mag #3 - HZV / Hackerzvoice / The Hackademy

HZV Mag #3 - HZV / Hackerzvoice / The Hackademy

HZV Mag #3 - HZV / Hackerzvoice / The Hackademy

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!