私はこのコードでプロセスのメモリに書き込もうとしています(チートコードを作成するため):
#include
int main()
{
HWND hWnd = FindWindow(0, "xyz");
if(hWnd == 0)
{
MessageBox(0, "Error cannot find window.", "Error", MB_OK|MB_ICONERROR);
}
else
{
DWORD proccess_ID;
GetWindowThreadProcessId(hWnd, &proccess_ID);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proccess_ID);
if(!hProcess)
{
MessageBox(0, "Could not open the process!", "Error!", MB_OK|MB_ICONERROR);
}
else
{
int newdata = 500;
DWORD newdatasize = sizeof(newdata);
if(WriteProcessMemory(hProcess, (LPVOID)0x57C2A4, &newdata, newdatasize, NULL))
{
MessageBox(NULL, "WriteProcessMemory worked.", "Success", MB_OK + MB_ICONINFORMATION);
}
else
{
MessageBox(NULL, "Error cannot WriteProcessMemory!", "Error", MB_OK + MB_ICONERROR);
}
CloseHandle(hProcess);
}
}
return 0;
}
たとえば、jnz を jz で上書きすると、両方とも同じサイズであるため、正常に動作します。しかし、たとえば pop を jmp で上書きしようとすると、これらのコマンドのサイズが異なるため、エラーが発生します。
ここで、WriteProcessMemory が検証を実行して、指定されたアドレスで使用可能なサイズを確認することを読みました。
私がやりたいことは、サイズチェックなしでメモリアドレスに書き込むことです。そのため、プログラムはコードに必要なバイト数を単純に上書きします。
Cheat Engine を使用すると、必要なバイトを上書きすることができたので、これを行うことができました。
だから私の質問は、チートエンジンと同じようにC ++で行う方法ですか?