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'
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
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
trouver le bon process ID!!! [ par anthraxx ]
Je voudrais terminer un processus (avec TerminateProcess) dont je ne connais que le nom du fichier executable (mdm.exe par exemple), et le processus n
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : WIN APIRE : WIN API par racpp
Cliquez pour lire la suite par racpp
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|