Как отслеживать значения игровых адресов? - PullRequest
0 голосов
/ 14 января 2019

После попытки сломать код из GitHub и найти любые видео на YouTube, которые рассказывают об этом, я начинаю сдаваться, поэтому я надеюсь, что один из вас может помочь мне. Все, что я хочу сделать, это контролировать значение адресов памяти игр. Например, скажем, в игре Minecraft значение здоровья и адрес памяти:

Адрес: 001F6498

Значение: 20

Как мне превратить это значение в переменную в Python?

Процесс кодовой мысли:

import pywin32

pid = 5601
address = 001F6498 

ReadProcessMemory(pid, address):
    print(Value)

#In this example i would like it to print 20

1 Ответ

0 голосов
/ 25 мая 2019

Сначала вам нужно разобраться с процессом. Вот некоторый код, который делает это, используя OpenProcess () FindWindow () и GetWindowThreadProcessId (), чтобы получить дескриптор процесса. Также включена небольшая функция для правильного считывания правильной переменной размера и ее правильного хранения. Этот метод можно использовать для чтения указателей, используя «i» для обозначения целочисленного типа.

import win32api
import win32gui
import win32process

from ctypes import *
from pymem import *

PROCESS_ALL_ACCESS = 0x1F0FFF
ReadProcessMemory = windll.kernel32.ReadProcessMemory

def read_memory(procId, address, type):
    buffer = (ctypes.c_byte * getlenght(type))()
    bytesRead = ctypes.c_ulonglong(0)
    readlenght = getlenght(type)
    ReadProcessMemory(procId, address, buffer, readlenght, byref(bytesRead))
    return struct.unpack(type, buffer)[0]


hWnd = win32gui.FindWindow(0, ("WINDOW NAME HERE"))

pid=win32process.GetWindowThreadProcessId(hWnd)
handle = pymem.Pymem()
handle.open_process_from_id(pid[1])
procBaseAddress = handle.process_base

hProc = windll.kernel32.OpenProcess(PROCESS_ALL_ACCESS, 0, pid[1])

value = ReadProcessMemory(hProc, ADDRESS_OF_VARIABLE_TO_READ, "i")

print(value)

Кредиты другу, мастеру кукол, который научил меня, как это сделать

...