vendredi 28 décembre 2007

Process Dumper

Bonjour/Bonsoir,
le titre de l'article parle de lui-même... On va voir comment faire un dump d'un processus en cours d'execution. Voici comment on va s'organiser :
1.On énumère tous les processus et on selectionne celui qu'on veut dumper. Pour celà nous avons besoin de l'API CreateToolhelp32Snapshot() :

HANDLE WINAPI CreateToolhelp32Snapshot(
__in DWORD dwFlags,
__in DWORD th32ProcessID
);

2.On récupère ensuite l'id de notre processus pour obtenir un handle dessus. On remplis pour celà la structure PROCESSENTRY32 :

typedef struct tagPROCESSENTRY32 {
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID;
ULONG_PTR th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
TCHAR szExeFile[MAX_PATH];
} PROCESSENTRY32,
*PPROCESSENTRY32;

avec les APIs Process32First() et Process32Next(). Dans cette structure ce qui nous interresse est DWORD th32ProcessID qui contiendra l'id de notre processus. Ensuite on récupère l'handle du processus grace à OpenProcess() :
HANDLE WINAPI OpenProcess(
__in DWORD dwDesiredAccess,
__in BOOL bInheritHandle,
__in DWORD dwProcessId
);

3.On lit le processus en mémoire avec l'API ReadProcessMemory():

BOOL WINAPI ReadProcessMemory(
__in HANDLE hProcess,
__in LPCVOID lpBaseAddress,
__out LPVOID lpBuffer,
__in SIZE_T nSize,
__out SIZE_T* lpNumberOfBytesRead
);

4.On écrit le tout dans le fichier qui fera office de dump.

Le code source : dumper.cpp

Pour l'utilisation il faut :
-connaitre l'Original Entry Point du processus.
-rétablir la table des imports (IAT) sinon vous ne pourrez pas executer le dump.

Have Fun ;)
lilxam.

Ouverture du blog

Bonjour/Bonsoir,
nouveau dans la sécurité informatique, je me propose d'ouvrir un blog à ce sujet. Ainsi je partagerais mes quelques codes et "trouvailles".
Je tiens à remercier toutes les personnes qui ont aidés à mon évolution dans le domaine, je ne les cite pas, elles se reconnaitront :)
Voilà j'espère que ce blog vous plaira.
Have Fun ;)
lilxam.