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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

aussitôt à l’emplacement mémoire pointé par<br />

EDI. Enfin nous incrémentons EDI, les allocations<br />

mémoire étant réalisées les unes après les<br />

autres (si l’on se réfère à notre code) en incrémentant<br />

EDI de 4, nous pointons maintenant<br />

sur l’espace alloué à aCreateFileA. Cependant<br />

pour trouver l’adresse de la chaîne de caractères<br />

qui pointe vers "CreateFileA", ce n’est pas aussi<br />

simple. En effet il va falloir trouver la fin de la<br />

chaine "CloseHandle", qui est terminée comme<br />

il se doit pas un octet nul, afin de pointer vers<br />

le début de la chaine "CreateFileA", d’où mon<br />

morceau de code incrémentant ESI et cherchant<br />

l’octet nul. Une fois l’octet nul trouvé, on recommence<br />

le processus afin de trouver l’adresse de<br />

la seconde fonction et ainsi de suite. En ce qui<br />

concerne la ligne comparant ESI à 0FFh, il s’agit<br />

en fait d’une sentinelle, elle est nécessaire car<br />

notre procédure de recherche doit s’arrêter<br />

une fois toutes les fonctions trouvées, 0FFh<br />

est donc la valeur qui indique à notre procédure<br />

de se stopper une fois son travail achevé.<br />

MessageBox<br />

<strong>HZV</strong> <strong>Mag</strong> <strong>#3</strong><br />

Infecteur Win32: - par Kernel Junky<br />

A partir de ce moment, nous avons récupéré<br />

quasiment toutes les fonctions nécessaires,<br />

sauf notre fonction MessageBox, qui permet<br />

l’affichage d’une boîte de dialogue. En fait c’est<br />

parce qu’elle ne se trouve pas dans la librairie<br />

kernel32.dll, mais dans user32.dll, une autre<br />

librairie du système Microsoft. C’est pour cela<br />

qu’il va falloir que nous fassions une autre<br />

procédure permettant un scan des fonctions<br />

de user32.dll, rassurez-vous cela sera plus facile<br />

que lors du scan de kernel32.dll, car nous<br />

avons dorénavant tous les outils nécessaires<br />

en main. Pour commencer il faut que nous<br />

trouvions l’adresse de user32.dll, nous allons<br />

donc utiliser pour cela la fonction LoadLibrary<br />

pour récupérer l’adresse de celle-ci.<br />

Le code est plutôt simple, nous faisons pointer<br />

EAX sur la chaîne de caractères correspondant<br />

à "user32.dll" puis nous la mettons sur la<br />

pile, nous appelons par la suite LoadLibraryExA<br />

afin de récupérer son adresse (plus facile que<br />

l’exploration du PEB, hein ?). Ensuite nous faisons<br />

pointer EDI sur la chaîne de caractères<br />

correspondant à "MessageBoxA" que nous plaçons<br />

sur la pile, ainsi que l’adresse de user32.<br />

dll. Puis nous appelons GetProcAddress, nous<br />

nous retrouvons donc avec l’adresse de MessageBoxdans<br />

EAX, que nous sauvegardons.<br />

:<br />

HMODULE WINAPI LoadLibraryEx(<br />

__in LPCTSTR lpFileName,<br />

__reserved HANDLE hFile,<br />

__in DWORD dwFlags<br />

);<br />

:<br />

GetMessageBox:<br />

lea eax, sUser32<br />

push 2h<br />

push 0<br />

push eax<br />

call aLoadLibrary<br />

mov aUser32, eax<br />

lea edi, sMessageBox<br />

push edi<br />

push aUser32<br />

call aGetProcAddress<br />

mov aMessageBox, eax<br />

Recherche d’exécutables<br />

Ç retour au sommaire<br />

Maintenant, nous allons doter notre virus d’une<br />

fonction lui permettant de trouver des cibles,<br />

mais attention, pas n’importe quels fichiers, des<br />

fichiers exécutables. Pour cela nous allons utiliser<br />

deux fonctions : FindFirstFile et FindNextFile.<br />

Comme nous pouvons le constater, la fonction<br />

FindFirstFile prend en paramètre une chaine de<br />

caractères. Cette chaine peut être un nom de<br />

fichier ou une wildcard, ici le plus intéressant<br />

serais de passer "*.exe" afin de récupérer les<br />

exécutables du répertoire courant. La fonction<br />

prend également en paramètre un pointeur<br />

vers une structure que la fonction va se<br />

charger de remplir (Je vous laisse faire des recherche<br />

pour plus de détails sur la structure).<br />

10

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

Saved successfully!

Ooh no, something went wrong!