Problème avec WriteProcessMemory() ....

Résolu
MorbhAck Messages postés 127 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 août 2007 - 20 août 2006 à 20:56
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011 - 21 août 2006 à 00:41
Hello World !

J'ai un ptit problème avec la fonction WriteProcessMemory().
mon code est le suivant :

    HWND Wnd;                          // Hwnd de notre fenêtre
    LPDWORD PID;                        // Id du processus
    DWORD Proc;                       // Id du thread
    HANDLE Hproc;                       // Handle du processus
    DWORD Addr = 0x0000000 ;    // Addresse mémoire trouvée
    DWORD MWritte;
    BYTE PATCH[] = "\x90\x90\x90\x90"; // Notre patch (des NOP)

    Wnd = FindWindow(NULL,"mon prog");
    if(Wnd){
        Proc= GetWindowThreadProcessId(Wnd,(LPDWORD) &PID);
        if(Proc){
            Hproc= OpenProcess(PROCESS_ALL_ACCESS,NULL,(DWORD)PID);
            if(Hproc){
                if(WriteProcessMemory (Hproc, (LPVOID)Addr, PATCH, 3, &MWritte)){
                    MessageBox(hWindow,"Ecriture effectué !", "Succes", MB_OK|MB_ICONINFORMATION);
                }
            }
            else MessageBox(hWindow,"Ouverture du processus IMPOSSIBLE !", "Error", MB_OK|MB_ICONERROR);
        }
        else MessageBox(hWindow,"Process ID non trouvé !", "Error", MB_OK|MB_ICONERROR);
    }
    else MessageBox(hWindow,"NameWindow nom trouvé", "Error", MB_OK|MB_ICONERROR);

PUIS LA QUAND JE LANCE MON PROG IL SE PASSE RIEN DU TOUT
JE COMPRENDS PAS POURQUOI ! IL SE PASSE RIEN MAIS ALORS
RIEN DU TOUT !

Je ne vois pas ou est le problème ??!!
Aidez moi s'il vous plait !

8 réponses

wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
20 août 2006 à 21:16
addr 0x00000000 n'existe pas ^^^^ et tu sure des Nop, comprend tu l'asm et aussi

          if(WriteProcessMemory (Hproc, (LPVOID)Addr, PATCH, 3, &MWritte)){
                    MessageBox(hWindow,"Ecriture effectué !", "Succes", MB_OK|MB_ICONINFORMATION);

est inutile car MWritte contien le nom de Bits ecrite si sa marche
donc if(MWritte!=4) est plus correct.

sinon le system de recuperer le handle par le nom de la fenetre est perimee, utilise le nom de l'exe, tu fais un Enum Process jusqu'a ce que sa soit egale a mon prog.exe.

deplus BYTE Patch devrait mieux etre BYTE Patch[4] = .....
3
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
20 août 2006 à 21:18
aussi, juste un truc ^^ ta pas de procedure main();
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 août 2006 à 21:36
GetWindowThreadProcessId(Wnd,(LPDWORD) &PID);




GetWindowThreadProcessId demande simple DWORD en second paramètre pour stocker le PID c'est juste qu'il lui faut sont adresse. Donc il faut faire comme suit:






DWORD PID;



GetWindowThreadProcessId(Wnd, &PID);









C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 août 2006 à 21:39
En réalité, ce qu'il faut en second paramètre de GetWindowThreadProcessId c'est une adresse. Faire &PID va donner l'adresse de PID et donc, la fonction stockera la valeur à la location du second paramètre.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MorbhAck Messages postés 127 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 août 2007
20 août 2006 à 21:52
>>wxccxw
Oui je suis sur de vouloir Nopper, je comprend un tout ptit peu lassambleur

BYTE Patch[4] <- erreur de compilation

Puis je vais essayer de tester le if(MWritte!=4)
0
MorbhAck Messages postés 127 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 août 2007
20 août 2006 à 21:54
Ah oui sa marche !
MERCI ! MERCI !
0
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
21 août 2006 à 00:40
derien ^^
0
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
21 août 2006 à 00:41
fait les separer par des virgules

BYTE Nop4Bytes[4] = {0x90,0x90,0x90,0x90);
0
Rejoignez-nous