Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MODIFIER UN PROCESSUS EN MÉMOIRE


Information sur la source

Catégorie :API Classé sous : readprocessmemory, processus, mémoire, modifier, process Niveau : Initié Date de création : 12/04/2007 Date de mise à jour : 12/04/2007 19:19:24 Vu : 4 635

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

Description

Ce code permet d'accéder à un processus actif et de modifier son contenu grace aux APIs ReadProcessMemory et WriteProcessMemory.
Have Fun
lilxam
 

Source

  • #include <iostream>
  • #include <windows.h>
  • #pragma comment(lib, "ws2_32.lib")
  • using namespace std;
  • int main()
  • {
  • cout<<"\nReadProcessMemory\n\n\n";
  • STARTUPINFO StartupInfo; //Structure STARTUPINFO
  • memset(&StartupInfo, 0, sizeof(StartupInfo)); //On complète StartupInfo de 0
  • PROCESS_INFORMATION ProcessInfo; //Structure PROCESS_INFORMATION
  • memset(&ProcessInfo, 0, sizeof(ProcessInfo));
  • char memread[100];
  • char *cmdline;
  • int offset = 0x400000; //On prend un offset de départ
  • cmdline = GetCommandLine();
  • cout<<"Command Line : \n"<<cmdline<<"\n\n\n"; //Pour comprendre vous même l'utilitée de GetCommandLine()
  • CreateProcess("programme.exe", cmdline, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &StartupInfo, &ProcessInfo); //On démarre le processus, notre programme
  • cout<<"\n\nMemory Read : \n";
  • while(ReadProcessMemory(ProcessInfo.hProcess, (LPVOID) offset, memread, 1, NULL)) //On lit son conten
  • {
  • printf("%d", memread[0]);
  • offset ++; //On incrémente l'offset
  • if(memread[0] == 0x0) //On remplace les 0 par des 1, aucune utilitée, c'est juste pour l'exemple
  • {
  • WriteProcessMemory(ProcessInfo.hProcess, (LPVOID) offset, "0x1", 1, NULL);
  • }
  • }
  • CloseHandle(ProcessInfo.hProcess);
  • CloseHandle(ProcessInfo.hThread);
  • system("pause");
  • return 0;
  • }
#include <iostream>
#include <windows.h>

#pragma comment(lib, "ws2_32.lib")
using namespace std;

int main()
{
    cout<<"\nReadProcessMemory\n\n\n";
    
    STARTUPINFO StartupInfo; //Structure STARTUPINFO
    memset(&StartupInfo, 0, sizeof(StartupInfo)); //On complète StartupInfo de 0
    
    PROCESS_INFORMATION ProcessInfo; //Structure PROCESS_INFORMATION
    memset(&ProcessInfo, 0, sizeof(ProcessInfo));
    
    char memread[100];
    char *cmdline;
    
    int offset = 0x400000; //On prend un offset de départ
    
    cmdline = GetCommandLine();    
    cout<<"Command Line : \n"<<cmdline<<"\n\n\n"; //Pour comprendre vous même l'utilitée de GetCommandLine()
    
    CreateProcess("programme.exe", cmdline, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &StartupInfo, &ProcessInfo); //On démarre le processus, notre programme
    cout<<"\n\nMemory Read : \n";
    while(ReadProcessMemory(ProcessInfo.hProcess, (LPVOID) offset, memread, 1, NULL)) //On lit son conten
    {
    
        printf("%d", memread[0]);
        offset ++; //On incrémente l'offset
        if(memread[0] == 0x0) //On remplace les 0 par des 1, aucune utilitée, c'est juste pour l'exemple
        {
                      WriteProcessMemory(ProcessInfo.hProcess, (LPVOID) offset, "0x1", 1, NULL);

        }
    }
    
    CloseHandle(ProcessInfo.hProcess);
    CloseHandle(ProcessInfo.hThread);
    
    system("pause");
    return 0;
}

Historique

12 avril 2007 19:19:24 :
Correction de l'orthographe.

Commentaires et avis

signaler à un administrateur
Commentaire de Ombitious_Developper le 13/04/2007 14:06:27

Salut:

c'est propre comme code, facile à le lire et le comprendre. (8/10)

J'ai une petite question:

Est ce qu'on choisit l'offset aléatoirement ou il y des contraintes?

signaler à un administrateur
Commentaire de Ombitious_Developper le 13/04/2007 14:10:23

Autres question:

Pourquoi ajouter la bibliothèque ws32_32.lib, si je ne me trompe pas c'est la bibliothèque pour WinSocket. Pourquoi faire?

signaler à un administrateur
Commentaire de lilxam le 13/04/2007 20:09:39

Salut et merci pour ton commentaire et t'as note :).
Pour t'as premiere question, ici j'ai pris un offset de départ arbitrairement puis je l'incrémente. Mais je ne sais pas encore comment faire pour trouver le point de départ du programme en question (Entry Point). Je mettrais à jour ce code si je trouve la solution.

Pour t'as deuxième question, tu confond la lib ws2_32 avec wsock32 étant effectivement la lib permettant l'utilisation des sockets. Celle-ci permet l'utilisation des APIs windows.

signaler à un administrateur
Commentaire de Ombitious_Developper le 13/04/2007 23:34:22

Salut:

Personnellement, (si je ne me trompe pas) je ne vois pas aucune fonction qui a besoin de cette lib.

signaler à un administrateur
Commentaire de nickydaquick le 15/04/2007 19:34:27

Salut
wsock32  Winsock
ws2_32   Winsock 2

signaler à un administrateur
Commentaire de max12 le 18/04/2007 08:55:34 administrateur CS

Sa peut être pratique pour cheater dans les jeux :P

signaler à un administrateur
Commentaire de skonsoft le 30/04/2007 17:24:49

salut y a t il quelqu'1 qui peut m'aider à realiser mon mini projet: Serveur FTP

signaler à un administrateur
Commentaire de mat1597530406950 le 14/08/2007 15:12:14

Alors pour cette source bravo, ca m'aide beaucoup ! sinon j'ai essayé avec un programme de modifié les 0 avec les 1 et avec un if, j'ais vus qu'il n'y arrive pas c'est ce que me renvoie la fonction et pour etre sur je re "read" ca ne change rien...
Merci :)

signaler à un administrateur
Commentaire de dj328i le 05/11/2007 22:57:39

max12

pour ca il y a deja un logiciel qui existe. "TSearch"

Tu peut recherché et modifier tout valeur dans un processus en cours d'utilisation.

Ajouter un commentaire

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 &#224; tousSuite &#224; la lecture des deux articles de Krust sur "comment cr&#233;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 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 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 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 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' 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 Mémoire partagée et pointeur [ par darsh99 ] Bonjour,J'essai de faire passer un tableau dynamique, un pointeur donc, d'un programme à un autre, l'adresse est bien passée et les champs non dynamiq


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version


HTC Magic

Entre 429€ et 429€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,686 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.