Accueil > > > PROCESS DUMPER
PROCESS DUMPER
Information sur la source
Description
Bonjour/Bonsoir, le titre de l'article parle de lui-même... Ce code montre comment faire un dump d'un processus en cours d'execution. Je vous renvoie ici pour les explications : http://lilxam.blogspot.com/2007/12/process-dumper. html
Source
- #include <windows.h>
- #include <iostream>
- #include <tlhelp32.h>
-
- using namespace std;
-
- /*
- ***** Structure de 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;
-
- ***** Prototype de la fonction CreateToolhelp32Snapshot() *****
-
- HANDLE WINAPI CreateToolhelp32Snapshot(
- __in DWORD dwFlags,
- __in DWORD th32ProcessID
- );
-
-
- ***** Prototype de la fonction OpenProcess() *****
-
- HANDLE WINAPI OpenProcess(
- __in DWORD dwDesiredAccess,
- __in BOOL bInheritHandle,
- __in DWORD dwProcessId
- );
-
- ***** Prototype de la fonction ReadProcessMemory() *****
-
- BOOL WINAPI ReadProcessMemory(
- __in HANDLE hProcess,
- __in LPCVOID lpBaseAddress,
- __out LPVOID lpBuffer,
- __in SIZE_T nSize,
- __out SIZE_T* lpNumberOfBytesRead
- );
-
- */
-
- int main()
- {
- /* Ce programme permet d'établir un dump d'un processus.
- Il vous faut donc connaitre l'Original Entry Point du processus.
- Il vous faudra également rétablir la table des imports (IAT) sinon vous ne pourrez pas executer le dump.
- */
-
- char process[] = "dumpme.exe"; //Le processus que vous voulez dumper
- char save[] = "dumped.exe"; //Le dump de votre processus
- int offset = 0x00400000; //L'offset à partir duquel on commence le dump. Mettez donc l'OEP du programme
-
-
- //Création d'un fichier vide que l'on va remplir par le code de notre processus à dumper
- FILE *pFile = NULL;
- pFile = fopen(save, "ab+");
-
- if(pFile != NULL)
- {
- //On liste tous les processus jusqu'à trouver celui qu'on cherche
- HANDLE hSnapShot;
- PROCESSENTRY32 uProcess;
-
- hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//On établi une liste de tous les processus
- uProcess.dwSize = sizeof(PROCESSENTRY32);
-
- int p;
- DWORD PID;
-
- p = Process32First(hSnapShot, &uProcess);//On récupère le premier processus de la liste en remplissant la strcture PROCESSENTRY32
- while(p)
- {
- if(strstr(uProcess.szExeFile, process)) //On a trouvé le processus à dumper
- {
- cout<<"\n\n[+]Process found : "<<uProcess.szExeFile;
-
- //On récupère l'id du processus
- PID = uProcess.th32ProcessID;
-
- //On récupère un handle sur le processus
- HANDLE hTemp = NULL;
- hTemp = OpenProcess(PROCESS_ALL_ACCESS, 0, PID);
-
- char buffer[1]; //buffer qui recevra les octets du programme en mémoire
- memset(buffer, 0, sizeof(buffer));
-
- int nul = 0x00; //null char
-
- if(hTemp != NULL)
- {
- while(ReadProcessMemory(hTemp, (LPVOID)offset, &buffer, 1, NULL)) //On lit chaque octet du programme en mémoire
- {
- if(!strcmp(buffer,""))//On rétabli tout les 0->0x00
- {
- fputc(nul, pFile);
- }
- else
- {
- fprintf(pFile, "%s", buffer); //On écris les octets un à un dans le fichier
- }
- offset += 0x01;
- memset(buffer, 0, sizeof(buffer));
- }
- }
- else
- cout<<"\n\n[-]Failed to get process handle\nError : "<<GetLastError();
- }
-
- p = Process32Next(hSnapShot, &uProcess); //On récupère le processus suivant de la liste en remplissant la strcture PROCESSENTRY32
- }
- fclose(pFile);
- CloseHandle(hSnapShot);
- }
- else
- cout<<"\n\n[-]Failed to create file\n---Error : "<<GetLastError();
-
- cout<<"\n\n";
- system("pause");
- return 0;
- }
-
#include <windows.h>
#include <iostream>
#include <tlhelp32.h>
using namespace std;
/*
***** Structure de 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;
***** Prototype de la fonction CreateToolhelp32Snapshot() *****
HANDLE WINAPI CreateToolhelp32Snapshot(
__in DWORD dwFlags,
__in DWORD th32ProcessID
);
***** Prototype de la fonction OpenProcess() *****
HANDLE WINAPI OpenProcess(
__in DWORD dwDesiredAccess,
__in BOOL bInheritHandle,
__in DWORD dwProcessId
);
***** Prototype de la fonction ReadProcessMemory() *****
BOOL WINAPI ReadProcessMemory(
__in HANDLE hProcess,
__in LPCVOID lpBaseAddress,
__out LPVOID lpBuffer,
__in SIZE_T nSize,
__out SIZE_T* lpNumberOfBytesRead
);
*/
int main()
{
/* Ce programme permet d'établir un dump d'un processus.
Il vous faut donc connaitre l'Original Entry Point du processus.
Il vous faudra également rétablir la table des imports (IAT) sinon vous ne pourrez pas executer le dump.
*/
char process[] = "dumpme.exe"; //Le processus que vous voulez dumper
char save[] = "dumped.exe"; //Le dump de votre processus
int offset = 0x00400000; //L'offset à partir duquel on commence le dump. Mettez donc l'OEP du programme
//Création d'un fichier vide que l'on va remplir par le code de notre processus à dumper
FILE *pFile = NULL;
pFile = fopen(save, "ab+");
if(pFile != NULL)
{
//On liste tous les processus jusqu'à trouver celui qu'on cherche
HANDLE hSnapShot;
PROCESSENTRY32 uProcess;
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//On établi une liste de tous les processus
uProcess.dwSize = sizeof(PROCESSENTRY32);
int p;
DWORD PID;
p = Process32First(hSnapShot, &uProcess);//On récupère le premier processus de la liste en remplissant la strcture PROCESSENTRY32
while(p)
{
if(strstr(uProcess.szExeFile, process)) //On a trouvé le processus à dumper
{
cout<<"\n\n[+]Process found : "<<uProcess.szExeFile;
//On récupère l'id du processus
PID = uProcess.th32ProcessID;
//On récupère un handle sur le processus
HANDLE hTemp = NULL;
hTemp = OpenProcess(PROCESS_ALL_ACCESS, 0, PID);
char buffer[1]; //buffer qui recevra les octets du programme en mémoire
memset(buffer, 0, sizeof(buffer));
int nul = 0x00; //null char
if(hTemp != NULL)
{
while(ReadProcessMemory(hTemp, (LPVOID)offset, &buffer, 1, NULL)) //On lit chaque octet du programme en mémoire
{
if(!strcmp(buffer,""))//On rétabli tout les 0->0x00
{
fputc(nul, pFile);
}
else
{
fprintf(pFile, "%s", buffer); //On écris les octets un à un dans le fichier
}
offset += 0x01;
memset(buffer, 0, sizeof(buffer));
}
}
else
cout<<"\n\n[-]Failed to get process handle\nError : "<<GetLastError();
}
p = Process32Next(hSnapShot, &uProcess); //On récupère le processus suivant de la liste en remplissant la strcture PROCESSENTRY32
}
fclose(pFile);
CloseHandle(hSnapShot);
}
else
cout<<"\n\n[-]Failed to create file\n---Error : "<<GetLastError();
cout<<"\n\n";
system("pause");
return 0;
}
Historique
- 20 janvier 2008 18:48:16 :
- Correction de fuites de mémoire.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
[C ou C++]écriture direct dans la mémoire d'un processus [ par supers03 ]
Salut à tousSuite à la lecture des deux articles de Krust sur "comment créer des cheats" (http://www.cppfrance.com/gma/tout/cheat) , j'
File Mapping entre deux processus [ par vinvay ]
Voilà, mon problème est que j'ai deux processus, un qui écrit dans la mémoire partagée et l'autre qui lit, et je voudrai que lorsque le processus qui
PATCH DLL NT/9X [ par ouranos ]
Bonjour à tous,J'ai réalisé un programme fonctionnant sous win NT/XP/2000 qui détourne des APIwindows afin de pouvoir contrôler le système (limitation
ReadProcessMemory [ par ymca2003 ]
Salut,J'essaye d'utiliser la fonction ReadProcessMemory pour lire le contenu de la mémoire d'un processus mais je n'y arrive pas.Lorsque j'appel cette
processus [ par sebseb42 ]
Bonjour,voila, j'utilise l'API Process Status (PSAPI) pour lister tout les process existant ainsi que leur modules...La seul information que j'arrive
temps d'exécution trop long [ par diable007 ]
bonjour, j'ai une application parallèle en c++ et MPI, j'ai une partie qui ne nécessite pas de communication avec mpi entre les processeurs. En séqu
Processus en cours d'execution? Psapi.lib et Psapi.h? `EnumProcesses@12` & `GetModuleBaseNameA@16` ? [ par wizard512 ]
Bonjour, J'essaie en vain de compiler un petit bout de code me permettant de vérifier si telle ou telle processus et bien en cour d'execution. Mais j'
Recherche d'adresse mémoire d'un DLL dans un processus [ par empathe ]
Bonjour, je recherche une fonction pouvant me retourner l'adresse mémoire Hexa d'ou est stocké une DLL d'un processus. le code: [code=cpp] #include
probleme droit d'acces sur processus [ par wisar ]
bonjours voila je suis en train de programmer une petite application sur l'injection de dll. Hors j'ai remarqué que j'ai un problème de droit d'accès
Gestionnaire de la mémoire [ par BabGirl ]
Bonjour à tous !Pourriez-vous me guider pour créer un petit gestionnaire de la mémoire. Ce petit gestionnaire doit connaître les parties libres et occ
|
Derniers Blogs
[TECHDAYS2012] OUI J'Y SERAI![TECHDAYS2012] OUI J'Y SERAI! par JeremyJeanson
Bonsoir, Certes, je l'annonce avec un peu de retard, mais je serai effectivement au Techdays demain. Comme l'an dernier, je participerai au programme ATE (Ask The Expert). Si vous avez des questions Workflow, WCF, AppFabric ou plus généralement .net, n'hé...
Cliquez pour lire la suite de l'article par JeremyJeanson TFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICESTFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICES par vfabing
Afin de s'assurer du bon fonctionnement des différentes synchronisations effectuées par les TFS Integration Tools, 2 rapports sont présents dès l'installation. Il suffit alors d'effectuer les manipulations suivantes pour pouvoir les visualiser : Loca...
Cliquez pour lire la suite de l'article par vfabing CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks
Forum
RE : ARBRE BINAIRERE : ARBRE BINAIRE par pacotheking
Cliquez pour lire la suite par pacotheking
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|