Problem mit Pointer auslesen (falscher Wert)

12/12/2015 00:15 Triky313#1
Hi Leute,
habe mir hier mal ein kleines Test-Script zusammengebaut und versuche seit einiger Zeit Werte aus einem Spiel auszulesen. Leider bekomme ich nie den Wert heraus, den die Adresse eigentlich hat.

Kann mir wer sagen ob ich etwas übersehen habe!?

PHP Code:
#include <iostream>
#include <windows.h>

#include <stdio.h> 
#include <stdlib.h>
#include <TlHelp32.h>
#include <tchar.h>
#include <atlconv.h>
using namespace std;


DWORD dwGetModuleBaseAddress(DWORD dwProcessIdentifierTCHAR *lpszModuleName)
{
    
HANDLE hSnapshot CreateToolhelp32Snapshot(TH32CS_SNAPMODULEdwProcessIdentifier);
    
DWORD dwModuleBaseAddress 0;
    if(
hSnapshot != INVALID_HANDLE_VALUE)
    {
        
MODULEENTRY32 ModuleEntry32 = {0};
        
ModuleEntry32.dwSize sizeof(MODULEENTRY32);
        if(
Module32First(hSnapshot, &ModuleEntry32))
        {
            do
            {
                if(
_tcscmp(ModuleEntry32.szModulelpszModuleName) == 0)
                {
                    
dwModuleBaseAddress = (DWORD)ModuleEntry32.modBaseAddr;
                    break;
                }
            } while(
Module32Next(hSnapshot, &ModuleEntry32));
        }
        
CloseHandle(hSnapshot);
    }
    return 
dwModuleBaseAddress;
}

int main()
{


    
// Fenstername einlesen
    
char windowName[100] = "Game";
    
HWND window FindWindow(0_T(windowName));
    if(
window == 0)
    {
        while(
true)
        {
            
cout << "Fenster \"" << windowName << "\" nicht gefunden!\n";
            
cout << "Gib einen neuen Fenster-Namen ein!\n";
            
cin.getline(windowNamesizeof(windowName));
            
LPCWSTR lpcwstr_string A2BSTR(windowName);
            if(
HWND window FindWindow(0_T(windowName)))
            {
                
cout << "Fenstername: " << windowName << "\n";
                break;
            }
        }
    }
    else
    {
        
cout << "Fenstername:\t" << windowName << "\n";
    }


    
DWORD pID 0;
    
GetWindowThreadProcessId(window, &pID);

    
DWORD baseAddr dwGetModuleBaseAddress(pID_T("Albion-Online.exe"));
    
cout << "pID:\t\t" << pID << " - " << &pID << "\n";
    
cout << "baseAddr:\t" << baseAddr << " - " << &baseAddr << "\n";
    
DWORD staticOffset 0x14fe8ca8;

    
HANDLE handle OpenProcess(PROCESS_ALL_ACCESSFALSEpID);
    
cout << "handle:\t\t" << handle << " - " << &handle << "\n";
    while(
true)
    {
        
DWORD value baseAddr staticOffset;
        
DWORD numBytesRead;
        
ReadProcessMemory(handle, (LPCVOID)value, &valuesizeof(DWORD), &numBytesRead);
        
value += 0x28;
        
ReadProcessMemory(handle, (LPCVOID)value, &valuesizeof(DWORD), &numBytesRead);
        
value += 0x1c;
        
ReadProcessMemory(handle, (LPCVOID)value, &valuesizeof(DWORD), &numBytesRead);
        
value += 0x38;
        
//ReadProcessMemory(handle, (LPCVOID)value, &value, sizeof(DWORD), &numBytesRead);
        //value += 0x710;
        //ReadProcessMemory(handle, (LPCVOID)value, &value, sizeof(DWORD), &numBytesRead);
        //value += 0x38c;
        
float result;
        
ReadProcessMemory(handle, (LPCVOID)value, &resultsizeof(float), &numBytesRead);
        
cout << result << endl;
        
Sleep(5000);
    }
    
CloseHandle(handle);

12/19/2015 16:15 hazejp#2
Ich würde sagen, PROCESS_VM_READ reicht für diesen Zweck aus; sollte jedoch nebensächlich sein.
Du solltest evtl. auch die Rückgabewerte von ReadProcessMemory() auf fehlerhafte Adressen überprüfen, da der Wert in lpBuffer im Fall eines solchen Fehlers wahrscheinlich undefiniert ist.