WriteProcessMemory не изменяет значения в памяти
#include <Windows.h>
#include <iostream>
#include <stdio.h>
int main()
{
DWORD pid = 16644;
HANDLE handle = OpenProcess(PROCESS_VM_READ, FALSE, pid);
if (handle == NULL) {
std::cout << "Error: Dont open the process" << std::endl;
return 1;
}
LPVOID address_money = (LPVOID)0x27F2887509C;
LPVOID address_actions = (LPVOID)0x27F9D427AE0;
int buffer;
int give = 100000;
SIZE_T bytesRead;
BOOL result_money = ReadProcessMemory(handle, address_money, &buffer, sizeof(buffer), &bytesRead);
if (result_money == 0) {
std::cout << "Dont reading money" << std::endl;
return 2;
}
std::cout << "Money:" << buffer << std::endl;
BOOL result_actions = ReadProcessMemory(handle, address_actions, &buffer, sizeof(buffer), &bytesRead);
if (result_actions == 0) {
std::cout << "Dont reading actions" << std::endl;
return 3;
}
std::cout << "Actions:" << buffer << std::endl;
HANDLE handle2 = OpenProcess(PROCESS_VM_WRITE, FALSE, pid);
if (handle2 == NULL) {
std::cout << "Error: Dont open the Writeprocess" << std::endl;
return 6;
}
BOOL result_give_money = WriteProcessMemory(handle2, address_money, &give, sizeof(give), &bytesRead);
if (result_give_money == 0) {
std::cout << "Dont giving money" << GetLastError() <<std::endl;
CloseHandle(handle);
return 4;
}
std::cout << "Money:" << buffer << std::endl;
BOOL result_give_actions = WriteProcessMemory(handle2, address_actions, &give, sizeof(give), &bytesRead);
if (result_give_actions == 0) {
std::cout << "Dont giving actions" << std::endl;
CloseHandle(handle);
return 5;
}
std::cout << "Actions:" << buffer << std::endl;
return 0;
}
ReadProcessMemory работает и показывает значения, а WriteProcessMemory нет. Запускал консольное приложение от имени администратора, пробовал ставить переменной give типы: float, double, int и byte. GetLastError показывает цифру 5. Скрипт крашится на попытке изменить блок выделенной памяти с денежным балансом героя. Игра: Grand Theft Auto 5, Сюжетный режим
Ответы (1 шт):
Автор решения: santexnik228
→ Ссылка
PROCESS_ALL_ACCESS вместо PROCESS_VM_READ в первом handl'e, удали второй handle и поставь в функциях WriteProcessMemory изменённый handle вместо handle2