ReadProcessMemory PROBLEM ! :(



  • hey ich hab eine problem mit readprocessmemory
    unzwar hab ich einen script der mir den HP wert aus einem spiel auslesen soll , diesen habe ich anhand eines videos bei youtube erstellt
    das problem ist aber das dort immer -8XXXXXXXX rauskommt meine pointer und offsets die ich dadrine habe sind aufjedenfall richtig nur woran liegt es dan :o
    vllt kann mir ja jemand helfen

    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    //---------------------------------
    //Offsets
    #define PLAYERBASE_PTR          0x6EFFFC
    #define PLAYERBASE_OFFSET       0x5F0
    
    #define PLAYER_HEALTH          0x194
    
    //---------------------------------
    
    //Andere Sachen die wir noch brauchen
    HWND hwnd;
    HANDLE handle;
    DWORD ID;
    LPCTSTR lpWindowName = L"4Story_GSP";
    
    bool SetDebugPrivileges();
    
    int main(){
    
            int puffer = 0;
            DWORD rw=0;
    
            //--------- Injection ------------
    
            // Suche Prozess 
            while(!hwnd){
                    cout << "Suche nach dem Prozess und injecte..." << endl;
                    hwnd = FindWindow(NULL, lpWindowName);
                    if(!hwnd)
                            printf("\r");
                    Sleep(100);
            }
    
            // Prozess-ID besorgen
            GetWindowThreadProcessId(hwnd, &ID);
            //Rechte zum auslesen besorgen
            SetDebugPrivileges();
            // Prozess �ffnen mit allen Rechten
            handle = OpenProcess(PROCESS_ALL_ACCESS, false, ID);
    
            //---------------------------------
    
            /*
            An diesem Punkt beginnen wir nun mit dem eigentlichem auslesen aus dem Hauptspeicher
            Ich demonstriere das jetzt mal an der jeweiligen aktuellen HP Zahl
            */
    
            // Struct erstellen
            int hp;
            int hp_max;
    
            int hp_puff = 0;
            int mana_puff = 0;
    
            DWORD baseptr;
            DWORD pptr;
    
            while(hwnd)
            {
    
                    //Hier haben wir nun eine Schleife, die jede Sekunde die HP Zahl �berpr�ft
    
                    // Adresse auslesen
                    ReadProcessMemory(handle, (void*)PLAYERBASE_PTR, &baseptr, sizeof(baseptr), &rw);
                    // Player Addy auslesen
                    ReadProcessMemory(handle, (void*)baseptr, &pptr, sizeof(pptr), &rw);
                    // Aktuelle und max. HP auslesen auslesen
                    ReadProcessMemory(handle, (void*)(pptr+PLAYER_HEALTH), &hp, sizeof(hp), &rw);
                    ReadProcessMemory(handle, (void*)(pptr+PLAYER_HEALTH), &hp_max, sizeof(hp_max), &rw);
    
                    // HP ausgeben
                    if(hp != hp_puff)
                    {
                            cout << "HP: " << hp << " von " << hp_max << endl;
                            hp_puff = hp;
                    }
    
                    Sleep(1000);
    
            }
    
            // Anhalten f�r �berpr�fung
            system("pause");
    
            CloseHandle(handle);
            return 0;
    }
    
    bool SetDebugPrivileges()
    {
            HANDLE hToken;
            TOKEN_PRIVILEGES tokenPriv;
            tokenPriv.PrivilegeCount = 1;
    
            if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
                    return false;
    
            if(!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tokenPriv.Privileges[0].Luid))
                    return false;
            tokenPriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    
            if(!AdjustTokenPrivileges(hToken, false, &tokenPriv, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
                    return false;
            return true;
    }
    


  • Ich weiß zwar nicht ob das der Grund ist - aber ich würde dir empfehlen,die Rückgabewerte der verwendeten Funktionen auch auszuwerten, ob sie funktioniert haben.



  • danke das jemand sich die zeit genommen hat das anzusehen 😃
    was meins du genau damit ? 🙂



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • dangerking schrieb:

    was meins du genau damit ? 🙂

    Deine Funktion SetDebugPrivileges() gibt einen bool zurück, ob der Zugriffsversuch geklappt hat, ReadProcessMemory() hat ebenfalls einen Rückgabewert. Bei beiden Aufrufen solltest du sicherstellen, daß sie geklappt haben:

    //Rechte zum auslesen besorgen
    SetDebugPrivileges();
    ->
    if(!SetDebugPrivileges())
      cout << "Fehler beim Rechte Setzen " << GetLastError();
    


  • Überprüf deine Addressen/Offsets doch erst mal mit CheatEngine oä.



  • CStoll schrieb:

    dangerking schrieb:

    was meins du genau damit ? 🙂

    Deine Funktion SetDebugPrivileges() gibt einen bool zurück, ob der Zugriffsversuch geklappt hat, ReadProcessMemory() hat ebenfalls einen Rückgabewert. Bei beiden Aufrufen solltest du sicherstellen, daß sie geklappt haben:

    //Rechte zum auslesen besorgen
    SetDebugPrivileges();
    ->
    if(!SetDebugPrivileges())
      cout << "Fehler beim Rechte Setzen " << GetLastError();
    

    hab ich gemacht zeigt kein error an also scheint das ok zu sein 🙂
    ich habe die addresen mit cheat engine überprüft bzw ja gefunden hier mal ein bild

    http://www.imagebanana.com/view/po6ji1av/Aufzeichnen.JPG



  • Da steht 'Address of pointer' aber die ist doch uninteressant. Du suchst die eigentliche Addresse, die wäre: 0x03601BB8



  • geht leider immer noch nicht .. ich hab jetzt mal ne abfrage für processhandel eingehaubt und hab gemerkt das er immer 00000000000 anzeigt is das normal ? ne oder ? was muss ichtun 😃 hoffe aufn paar tipps



  • Poste mal den Errorcode den du von GetLastError bekommst.

    //Code direkt nach OpenProcess
    cout << GetLastError( ) << endl;
    

Anmelden zum Antworten