1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| void widget::DoubleMoneyFunc(int state) { if (state == Qt::Checked) {
const wchar_t* targetProcess = L"gamemd.exe"; std::pair<HANDLE, DWORD> result = OpenTargetProcess(targetProcess);
HANDLE hProcess = result.first; if (hProcess) { BYTE searchPattern[] = { 0xDA, 0x86, 0x0C, 0x03, 0x00, 0x00 }; DoubleMoney = FindPatternInAllocatedMemory(hProcess, baseAddr, moduleSize, searchPattern, sizeof(searchPattern), 1, 0xCC);
if (DoubleMoney) { InitializeHookMemory(hProcess); BYTE BlankPattern[] = { 0x90, 0x90, 0x90, 0x90 }; LPVOID BlankAddr = FindPatternInAllocatedMemory(hProcess, HookAddr, 4096, BlankPattern, sizeof(BlankPattern), 100, 0xCC); if (BlankAddr) { BYTE NewCode[] = { 0xE9,0x00,0x00,0x00,0x00,0x90 }; DWORD OffSet = (DWORD)BlankAddr - (DWORD)DoubleMoney - 5; memcpy(&NewCode[1], &OffSet, 4); ChangeOriginalCode(hProcess, DoubleMoney, NewCode, sizeof(NewCode)); BYTE HookCode[] = { 0x3B, 0x35, 0x4C, 0x3D, 0xA8, 0x00, 0x0F, 0x85, 0x02, 0x00, 0x00, 0x00, 0xD8, 0xC0, 0xDA, 0x86, 0x0C, 0x03, 0x00, 0x00, 0xE9, 0x00, 0x00, 0x00, 0x00 }; AddHookCode(hProcess, DoubleMoney, BlankAddr, HookCode, sizeof(NewCode), sizeof(HookCode));
CloseHandle(hProcess); } else { QMessageBox::information(NULL, "错误", "未找到空白地址"); CloseHandle(hProcess); } } else { QMessageBox::information(NULL, "错误", "未找到地址"); CloseHandle(hProcess); } } } else { const wchar_t* targetProcess = L"gamemd.exe"; std::pair<HANDLE, DWORD> result = OpenTargetProcess(targetProcess); HANDLE hProcess = result.first; BYTE OriginalCode[] = { 0xDA, 0x86, 0x0C, 0x03, 0x00, 0x00 }; ChangeOriginalCode(hProcess, DoubleMoney, OriginalCode, sizeof(OriginalCode)); CloseHandle(hProcess); } }
|