Sommaire

Obfuscation de l’utilisation de l’API Windows

1. Introduction

Il est également possible de cacher les appels à l’API Windows. Dans ce cas, l’analyste ne pourra pas lire le nom d’une fonction appelée par le programme. Il existe plusieurs manières pour cacher les utilisations de l’API, l’une d’entre elles consiste à créer sa propre fonction GetProcAddress(). Cette fonction, fournie par Microsoft, permet de connaître l’adresse mémoire d’une fonction particulière. Voici le prototype de cette fonction :

FARPROC WINAPI GetProcAddress( 
 _In_   HMODULE hModule, 
 _In_   LPCSTR lpProcName 
);

Le premier argument contient la bibliothèque à interroger et le second argument contient le nom de la fonction. Cette fonction retourne l’adresse de la fonction passée en second argument.

Voici un exemple simple d’utilisation de cette bibliothèque :

 PGNSI pGNSI; 
pGNSI = (PGNSI) GetProcAddress( 
   GetModuleHandle(TEXT("kernel32.dll")),  
   "CreateProcessW");

Il est simple de comprendre que GetProcAddress() retournera l’adresse de la fonction CreateProcessW() disponible dans le fichier kernel32.dll.

Une des techniques très répandues pour cacher les appels aux bibliothèques est donc de créer sa propre fonction GetProcAddress() qui prendra en argument non pas le nom de la fonction, mais un identifiant (un hash, ...