Чтение памяти из приложения, которое не позволяет

В настоящее время я пытаюсь прочитать всю память игры, которая блокирует вызовы OpenProcess а также ReadProcessMemory (Я считаю, что это делается через драйвер / службу Windows, хотя я не уверен, как).

Я использую следующий код, чтобы попытаться открыть процесс и прочитать его память в файл:

HANDLE process = OpenProcess(PROCESS_VM_READ, 0, pid);
if (!process) {
cout << "Failed to open process.";
return 1;
}
cout << "Successfully opened processs." << endl << "Dumping memory to mem.dmp..." << endl;

ofstream fout;
fout.open("mem.dmp");

char *base = (char *)0;
char *readCount = (char *)0;
do {
char buffer[PAGE_SIZE];

if (ReadProcessMemory(process, base, buffer, PAGE_SIZE, NULL) != 0)
{
fout << buffer;
}

base += PAGE_SIZE;
readCount++;
} while (base != 0);
if (readCount == 0) {
cout << "Warning: No memory was read from the process." << endl;
}
fout.flush();
fout.close();

Однако при запуске это не может даже открыть процесс.

Единственный способ обойти драйвер, блокирующий открытие процесса для чтения из памяти, — это сбросить всю физическую память в файл. Я понятия не имею, как это сделать, кроме того, что нужно настроить окна для сброса всей физической памяти на синем экране, а затем заставить компьютер выключиться с синим экраном. Это очевидно довольно неудобно, так как я хочу анализировать память приложения довольно часто.

Есть ли способ вывести всю физическую память без использования этого метода в Windows? Я практически ничего не знаю о драйвере или о том, как он работает, так что было бы почти невозможно найти другой способ обойти его.

0

Решение

Вы пытаетесь получить доступ к «0-й» позиции памяти, что невозможно (SO не позволяет вам это сделать):

char *base = (char *) 0;

Вам следует правильно установить адрес, по которому вы хотите прочитать, и этот адрес должен быть читаемым. Проверьте документ ReadProcessMemory Вот

lpBaseAddress [in]: Указатель на базовый адрес в указанном
процесс, из которого читать. Перед любой передачей данных
Система проверяет, что все данные в базовом адресе и памяти
указанный размер доступен для чтения, а если нет
Доступно, функция не работает.

Проверьте также примеры в этом посте
Вот

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]