Я пытаюсь создать тренажер для Icy Tower 1.4 для образовательных целей.
Я написал функцию, которая сокращает функцию WriteProcessMemory следующим образом:
void WPM(HWND hWnd,int address,byte data[])
{
DWORD proc_id;
GetWindowThreadProcessId(hWnd, &proc_id);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id);
if(!hProcess)
return;
DWORD dataSize = sizeof(data);
WriteProcessMemory(hProcess,(LPVOID)address,&data,dataSize,NULL);
CloseHandle(hProcess);
}
и это функция, которая должна остановить Часы ледяной башни:
void ClockHack(int status)
{
if(status==1)//enable
{
//crashes the game
byte data[]={0xc7,0x05,0x04,0x11,0x45,0x00,0x00,0x00,0x00,0x00};
WPM(FindIcyTower(),0x00415E19,data);
}
else if(status==0)//disable
{
byte data[]={0xA3,0x04,0x11,0x45,0x00};
}
}
в операторе else есть оригинальный AOB кода операции.
Когда я вызываю функцию ClockHack с параметром состояния, установленным в 1, игра вылетает.
В Cheat Engine я написал для этого скрипт, который точно не записывает по тому же адресу, потому что я сделал Code Cave, и он прекрасно работает.
Кто-то знает почему? Спасибо.
Кстати: только для образовательных целей .