教育目的で 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);
}
これが、Icy Tower Clock を停止する関数です。
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 を実行したため、同じアドレスに正確に書き込むことはできず、うまく機能します。
誰かが理由を知っていますか?ありがとうございました。
ちなみに、これは教育目的のみです。