#c
#c
Вопрос:
Я пытаюсь изменить денежный адрес на то, что я хочу, но когда я пытаюсь это сделать, я получаю ошибку 998, которая является ERROR_NOACCESS. Я запустил Visual Studio от имени администратора.
#include <windows.h>
using namespace std;
int main()
{
HWND hWnd = FindWindowA(NULL, "PC Building Simulator");
if (hWnd == NULL)
{
cout << "App not found" << endl;
Sleep(3000);
exit(-1);
}
else
{
DWORD proccess_ID;
GetWindowThreadProcessId(hWnd, amp;proccess_ID);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proccess_ID);
if (hProcess==NULL)
{
cout << "App not found" << endl;
Sleep(3000);
exit(-1);
}
else
{
int newdata = 500;
DWORD newdatasize = sizeof(newdata);
WriteProcessMemory(hProcess, (LPVOID)0x1B13B498FB0, amp;newdata, newdatasize, 0);
cout << GetLastError() << endl;
}
}
return 0;
}
Комментарии:
1. Возможно
0x1B13B498FB0
, это неправильный адрес. Помните, что Windows рандомизирует адресное пространство при каждом запуске. https://en.wikipedia.org/wiki/Address_space_layout_randomization#Microsoft_Windows2. Я использовал cheat engine для получения адреса, и если я изменю значение в cheat engine, это также изменится в игре, я также вообще не закрыл игру, поэтому адрес не мог быть случайным
3. Вы вызываете
GetLastError()
без проверки возвращаемого значения функции, чтобы узнать, допустима ли ошибка. Нередко функции изменяют значение ошибки, даже если они преуспевают.4. Ну, это определенно не изменило значение в игре, поэтому я не думаю, что это работает в любом случае. Возможно, я неправильно понял, что вы имеете в виду, хотя
5. Обычно вам приходится
VirtualProtectEx()
изменять память, которую вы хотите. Вероятно, это не такPAGE_READWRITE
. Как только вы это сделаете, затем вы измените его. Вы должны помнить, чтобы изменить его обратно на то, что было , когда вы закончите.
Ответ №1:
Проблема для меня была легко решена, но не так просто ее найти. Мне пришлось зайти в Configuration Manager и изменить платформу с Win32 на x64, и это заставило ее работать