Считывание памяти процесса с помощью pywin32, дающее неверный результат - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь прочитать память из игрового процесса (так же, как Cheat Engine).Я изучал различные посты, например:

А затем я могу создать свой первый скрипт чтения из памяти.В основном, это имеет 2 шага.Получение дескриптора процесса, а затем считывание адреса памяти из дескриптора.

Но я получаю неправильное значение.

Мой код

import win32gui,win32com.client
import win32api
import ctypes
import win32ui
import win32process 
from ctypes import wintypes

### Initializing functions and permissions ###
OpenProcess = ctypes.windll.kernel32.OpenProcess
ReadProcessMemory = ctypes.windll.kernel32.ReadProcessMemory # Method 1

PROCESS_ALL_ACCESS = 0x1F0FFF
PROCESS_QUERY_INFORMATION = 0x0400
PROCESS_VM_OPERATION = 0x0008
PROCESS_VM_READ = 0x0010
PROCESS_VM_WRITE = 0x0020
### End of Initializing session

### Getting process handle ###
HWND = win32ui.FindWindow(None,'My Game').GetSafeHwnd()
PID = win32process.GetWindowThreadProcessId(HWND)[1]
processHandle = OpenProcess(PROCESS_ALL_ACCESS, False, PID) # Why is it zero
### End of Getting process handle ###

### Reading value of a Memory Address ###

ADDRESS = 0x0111FF62
buffer = ctypes.c_char_p("Hello, World".encode('utf-8'))
bufferSize = len(buffer.value)
bytesRead = ctypes.c_ulong(0)

memory_value = ReadProcessMemory(processHandle, ADDRESS, buffer, bufferSize, ctypes.byref(bytesRead)) # Why is it zero
print('Memory Value = ', memory_value)

Значение памяти= 0

Истинное значение, которое я получаю из программы сканирования памяти

enter image description here

Я дважды проверил, является ли мое значение HWNDисправить с помощью функции win32gui.SetForegroundWindow(HWND ).Это приносит окна на передний план.Так что я почти уверен, что моя программа неверна, пока не появится строка для HWND.

1 Ответ

0 голосов
/ 25 апреля 2019

OpenProcess сбой, вероятно, потому что PROCESS_ALL_ACCESS не предоставлен.Вам нужен только доступ для чтения, поэтому измените PROCESS_ALL_ACCESS на PROCESS_VM_READ, проверьте возвращаемое значение, чтобы убедиться, что оно не равно нулю.

Документация для OpenProcess

Если функция завершается успешно, возвращаемое значение является открытым дескриптором указанного процесса.

Если функция завершается ошибкой, возвращаемое значение равно NULL.Чтобы получить расширенную информацию об ошибке, позвоните GetLastError.

Обратите внимание, что Windows хранит текст в формате UTF16, а не UTF8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...