def get_pids(process_name):
pids = []
for proc in psutil.process_iter(['pid', 'name']):
if proc.info['name'] == process_name:
pids.append(proc.info['pid'])
return pids
def GetPtrAddr(base, offsets):
addr = pm.read_uint(base)
for i in offsets:
if i != offsets[-1]:
addr = pm.read_uint(addr + i)
else:
addr += i
return addr
def read_value(pm, address, data_type):
if data_type == 'byte':
return pm.read_uchar(address)
elif data_type == 'string':
return pm.read_bytes(address, 72).decode('utf-8')
else:
return None
process_names = ['NostaleClientX.exe']
variables = [
{"name": "StringValue", "base_address": 0x004B329C, "offsets": [0x0], "data_type": 'string'},
]
while True:
for process_name in process_names:
pids = get_pids(process_name)
for pid in pids:
try:
PROCESS_ALL_ACCESS = (0x000F0000 | 0x00100000 | 0xFFF)
handle = ctypes.windll.kernel32.OpenProcess(PROCESS_ALL_ACCESS, False, pid)
pm = pymem.Pymem()
pm.process_handle = handle
gameModule = pymem.process.module_from_name(pm.process_handle, process_name).lpBaseOfDll
for variable in variables:
try:
address = GetPtrAddr(gameModule + variable['base_address'], variable['offsets'])
hex_value = read_value(pm, address, variable['data_type'])
print(f"{variable['name']} value is {hex_value}")
def get_pids(process_name):
pids = []
for proc in psutil.process_iter(['pid', 'name']):
if proc.info['name'] == process_name:
pids.append(proc.info['pid'])
return pids
def GetPtrAddr(base, offsets):
addr = pm.read_uint(base)
for i in offsets:
if i != offsets[-1]:
addr = pm.read_uint(addr + i)
else:
addr += i
return addr
def read_value(pm, address, data_type):
if data_type == 'byte':
return pm.read_uchar(address)
elif data_type == 'string':
return pm.read_bytes(address, 72).decode('utf-8')
else:
return None
process_names = ['NostaleClientX.exe']
variables = [
{"name": "StringValue", "base_address": 0x004B329C, "offsets": [0x0], "data_type": 'string'},
]
while True:
for process_name in process_names:
pids = get_pids(process_name)
for pid in pids:
try:
PROCESS_ALL_ACCESS = (0x000F0000 | 0x00100000 | 0xFFF)
handle = ctypes.windll.kernel32.OpenProcess(PROCESS_ALL_ACCESS, False, pid)
pm = pymem.Pymem()
pm.process_handle = handle
gameModule = pymem.process.module_from_name(pm.process_handle, process_name).lpBaseOfDll
for variable in variables:
try:
address = GetPtrAddr(gameModule + variable['base_address'], variable['offsets'])
hex_value = read_value(pm, address, variable['data_type'])
print(f"{variable['name']} value is {hex_value}")