我正在尝试为 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。当我在 status 参数设置为 1 的情况下调用 ClockHack 函数时,游戏崩溃了。
在 Cheat Engine 中,我为此编写了一个脚本,该脚本并不完全写入同一个地址,因为我做了 Code Cave,而且效果很好。
有人知道为什么吗?谢谢你。
顺便说一句:它仅用于教育目的。