begin process at 2012 02 13 13:32:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

ReadprocessMemory & WriteFile


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

ReadprocessMemory & WriteFile

mercredi 29 juin 2005 à 14:27:29 | ReadprocessMemory & WriteFile

Deimos_

Salut à tous,

J'ai un petit problème avec les fonctions ReadProcessMemory() et WriteFile() !
En fait, je souhaiterais obtenir dans un fichier texte quelques opcodes d'un exécutable, seulement j'obtiens des caractères ASCII, ce que je ne veux pas !

Voilà un bout du code (le code en lui marche très bien, il faudrait juste rajouter une fonction pour convertir l'ASCII en hexadécimal) :

        BYTE buffer[1];
        unsigned long *NbrBytesOut = (unsigned long *)malloc(sizeof(unsigned long *));

        [...] // Récupère le handle du processusen l'ouvrant, création du fichier texte

        ReadProcessMemory(hProc,(LPVOID)0x00835234,buffer,1,NULL);

        if(!WriteFile(hFile,buffer,1,NbrBytesOut,NULL))
            return MessageBox(NULL,"Erreur","WriteFile()",MB_OK);

Si quelqu'un pouvait me dire comment faire, ce serait vraiment sympa !

Merci et @+,
Deimos

mercredi 29 juin 2005 à 14:51:37 | Re : ReadprocessMemory & WriteFile

vecchio56

Administrateur CodeS-SourceS
unsigned long *NbrBytesOut = (unsigned long *)malloc(sizeof(unsigned long *)); Un peu bête d'allouer 4octets, tu crois pas? Tu connais l'opérateur & ? Je ne comprends pas bien ton problème, les caractères ASCII peuvent s'exprimer en hexa...
mercredi 29 juin 2005 à 19:08:31 | Re : ReadprocessMemory & WriteFile

Deimos_

Ya pas grand chose à comprendre, je demande justement comment exprimer les caractères ascii en hexadécimal dans mon fichie ...
mercredi 29 juin 2005 à 19:33:28 | Re : ReadprocessMemory & WriteFile

vecchio56

Administrateur CodeS-SourceS
DWORD NbrBytesOut; BYTE b[2], buffer; ReadProcessMemory(hProc,(LPVOID)0x00835234,&buffer,1,NULL); b[0] = (buffer & 0xF0) >> 4; if(b[0] <= 9) b[0] += '0'; else b[0] += 'A' - '0'; b[1] = buffer & 0xF; if(b[1] <= 9) b[1] += '0'; else b[1] += 'A' - '0'; if(!WriteFile(hFile,b,2,&NbrBytesOut,NULL)) return MessageBox(NULL,"Erreur","WriteFile()",MB_OK);
mercredi 29 juin 2005 à 19:35:35 | Re : ReadprocessMemory & WriteFile

vecchio56

Administrateur CodeS-SourceS
Au fait, quand tu fais ca tu t'en sors bien: unsigned long *NbrBytesOut = (unsigned long *)malloc(sizeof(unsigned long *)); car (sizeof unsigned long) est idem que (sizeof unsigned long*),mais logiquement, il faudrait écrire unsigned long *NbrBytesOut = (unsigned long *)malloc(sizeof(unsigned long));
mercredi 29 juin 2005 à 19:50:09 | Re : ReadprocessMemory & WriteFile

Deimos_

Il me met cette erreur là quand je tente de compiler ton code !
error C2664: 'ReadProcessMemory' : cannot convert parameter 3 from 'unsigned char' to 'void *'

Merci,
Deimos

mercredi 29 juin 2005 à 20:28:24 | Re : ReadprocessMemory & WriteFile

vecchio56

Administrateur CodeS-SourceS
Essaie ca: ReadProcessMemory(hProc,(LPVOID)0x00835234,(LPVOID)&buffer,1,NULL);
mercredi 29 juin 2005 à 21:46:50 | Re : ReadprocessMemory & WriteFile

Deimos_

Ok, merci beaucoup, ça marche !
Maintenant je voudrais donc récupérer par exemple 10bytes d'opcodes hexadécimaux dans mon fichier, j'ai fait ça, mais ça me retourne des trucs assez bizarres :

BYTE buffer_ascii,buffer_hexa[2];
unsigned long *NbrBytesOut = (unsigned long *)malloc(sizeof(unsigned long *));
DWORD addr = 0x00835234;

for(int x=0;x<10;x++) {
    ReadProcessMemory(hProc,(LPVOID)addr,(LPVOID)&buffer_ascii,1,NULL);

    buffer_hexa[0] = (buffer_ascii & 0xF0) >> 4;
    if(buffer_hexa[0] <= 9) buffer_hexa[0] += '0';
    else buffer_hexa[0] += 'A' - '0';

    buffer_hexa[1] = buffer_ascii & 0xF;
    if(buffer_hexa[1] <= 9) buffer_hexa[1] += '0';
    else buffer_hexa[1] += 'A' - '0';

    if(!WriteFile(hFile,buffer_hexa,1,NbrBytesOut,NULL))
        return MessageBox(NULL,"Erreur Write","Voilà",MB_OK);

    memset(buffer_hexa,0x00,1);
    addr++;
    }

J'ai vérifié si l'incrémentation de l'adresse marchait, et tout se déroule bien à ce niveau là, j'ai fait afffiché les adresses dans une MessageBox !

Merci
Deimos

mercredi 29 juin 2005 à 23:01:02 | Re : ReadprocessMemory & WriteFile

Deimos_

Tu n'as pas une idée de ce qui pourrait faire buffer ce code ?


Cette discussion est classée dans : buffer, long, unsigned, writefile, readprocessmemory


Répondre à ce message

Sujets en rapport avec ce message

ptit probl with:WriteFile() et ReadFile() [ par oudkaramla ] salut tout le monde,J'ai un petit problem avec WriteFile() et ReadFile().lors de la compilation j'ai les deux suivantes erreures:********************* WriteFile() et le port série [ par oudkaramla ] salut tout le mondej'ai un petit problème avec writefile()en fait je fais un programme avec paramètres bref je transmis le troisième paramètre à une f pb avec les pointeurs [ par oudkaramla ] salut, j'ai un problème dont je ne sais l'origine: en fait j'ai définis la fonction : int EnvoyerAvecReponse(char *g_buffer, unsigned long nBytesToWri Buffer avec WriteFile ??????????? [ par nanalye ] Bonjour tout le monde !J'ai regardé sur le forum ce qui était mis sur ce sujet mais je n'ai pas tout compris.Je dois envoyer des entiers par le biais Chaine de caractere [ par xarier ] voila je veut recuperé le numero de serie de c:\ et j'ai pas pu car a la place que la variable nex recuperele la valeur de serial il recupere un autre problème Win32 Api [ par Toadstool ] J'ai Visual C++ 6 Introductory Edition et j'ai programmé une classe censée représenter une fenetre mais quand dans le constructeur de la classe j'ecri conversion constante en hexa ->unsigned long ou int ??? [ par andrealphus ] 4ndr&@lphu$rebonjour à tous et toutes,mon nouveau probleme est ridicule mais gênant...comment peut on convertir un nombre hexadécimal (du style l'adre Probleme avec le registre [ par punx120 ] Voila j'aimerais recuperer la valeur d'une chaine dans la base des registres, mais je n'y arrive pasvoici le code que j'utilise : #include #include vo conversion en unsigned long [ par flatou ] voila j'ai un type de donnée défini comme suit :typedef unsigned long long my_ulonglong;#endifc'est un type de donnée MySQL. Or j'ai vu que pour utili Convertion d'un unsigned long Double en string [ par yves_r ] Bonjour, J'ai besoin de convertir le résultat d'un calcul en string (char *). Si j'utilise sprintf( s, "%Ld", mon_double), j'obtient une chaine


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,265 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales