[C++] Complex address (multi-level pointers), what's wrong?
Posted: Wed Feb 17, 2010 10:20 pm
Hi all, i'm coding my trainer to mmorpg game in visual c++ mfc application.
I don't know why but my WriteProcessMemory crashes application and sometimes game. Can someone tell me what's wrong?
And sorry if this is wrong section :/
GetModuleBase:
And my initialization code:
I don't know why but my WriteProcessMemory crashes application and sometimes game. Can someone tell me what's wrong?
And sorry if this is wrong section :/
- Code: Select all
unsigned int speed = 16550;
// [[[BaseAddress + 0x26767C]+0x598]+0x1EC]+0x9F2
//Pointer to base address
DWORD Base = GetModuleBase("TLoader.exe",proc_id);
PDWORD pdwAddress = ( PDWORD )*( PDWORD )(Base + 0x26767C);
PDWORD pdw2ndAddress = ( PDWORD )*( PDWORD )( pdwAddress + 0x598 );
PDWORD pdw3rdAddress = ( PDWORD )*( PDWORD )( pdw2ndAddress + 0x1EC );
PDWORD pdwFinalAddress = ( PDWORD )*( PDWORD )( pdw3rdAddress + 0x9F2 );
WriteProcessMemory(hProcess, (void*)pdwFinalAddress, &speed, sizeof(speed), NULL);
GetModuleBase:
- Code: Select all
DWORD GetModuleBaseAddress(DWORD iProcId, char* DLLName)
{
HANDLE hSnap;
MODULEENTRY32 xModule;
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, iProcId);
xModule.dwSize = sizeof(MODULEENTRY32);
if (Module32First(hSnap, &xModule))
{
while (Module32Next(hSnap, &xModule))
{
if (strcmp(xModule.szModule, DLLName) == 0)
{
CloseHandle(hSnap);
return (DWORD)xModule.modBaseAddr;
}
}
}
CloseHandle(hSnap);
return 0;
}
And my initialization code:
- Code: Select all
void memory()
{
HWND hWnd = FindWindow(NULL, "4Story");
GetWindowThreadProcessId(hWnd, &proc_id);
hProcess = OpenProcess(PROCESS_ALL_ACCESS|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, proc_id);
if (hWnd!=0)
{
MessageBox(NULL, "Process not found", "4Story", MB_ICONWARNING_MB_OK);
}else{
MessageBox(NULL, "Process found!", "4Story", MB_ICONWARNING_MB_OK);
}
}