Итак, я пытаюсь написать программу на C++, чтобы изменить значение в другой программе. В моем случае - калькулятор Windows. Вот код:Memory Hacking/Modifying in C++
#include <iostream>
#include <windows.h>
using namespace std;
int main(void) {
int nVal = 2000;
HWND hWnd = FindWindowA(0, "Calculator");
if(hWnd == 0){
cerr << "Could not find window." << endl;
} else {
DWORD PID;
GetWindowThreadProcessId(hWnd, &PID);
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, false, PID);
if(!hProc) {
cerr << "Cannot open process." << endl;
} else {
int stat = WriteProcessMemory(hProc, (LPVOID)0xC6A0EB922C, &nVal, (DWORD)sizeof(nVal), NULL);
if(stat > 0){
clog << "Memory written to process." << endl;
} else {
cerr << "Memory couldn't be written to process." << endl;
}
CloseHandle(hProc);
cin.get();
}
}
return 0;
}
Программа пытается перезаписать одно значение, сохраненное с помощью кнопки «MS» в калькуляторе. Проблема в том, что программа не может этого сделать. Я пытался запустить исполняемый файл как администратор, но ничего не изменилось. Я нашел этот код на видео YouTube, парень использовал XP, я использую Windows 8.
Я нашел 0xC6A0EB922C адрес, используя Чит Engine, а также попытался изменить значение внутри и она работала отлично!
Если кто-нибудь может мне помочь, пожалуйста. Благодаря!
Предполагая, что 'WriteProcessMemory' не удается, вы использовали GetLastError попробовать узнать больше о том, почему он не работает? –
FWIW, документы для 'WriteProcessMemory' указывают, что он возвращает ненулевое значение при успешном завершении и ноль при ошибке, но не более, чем при успешном завершении. – Dan