C++ 游戏数据修改器:实时内存访问和数据修改
#include
void displayProcessID() { // 获取当前进程的 PID #ifdef _WIN32 DWORD pid = GetCurrentProcessId(); #else pid_t pid = getpid(); #endif
std::cout << '进程ID: ' << pid << std::endl;
}
std::string getMemoryAddress(void* pointer) { std::stringstream ss; ss << std::hex << std::setw(sizeof(void*) * 2) << std::setfill('0') << reinterpret_cast<uintptr_t>(pointer); return ss.str(); }
int main() { displayProcessID();
// 初始化变量
int score = 0;
bool gameOver = false;
bool* gameOverAddress = &gameOver;
// 显示变量的实时内存地址(以十六进制格式)
std::cout << '分数的内存地址: 0x' << getMemoryAddress(&score) << std::endl;
std::cout << '游戏结束标志的内存地址: 0x' << getMemoryAddress(gameOverAddress) << std::endl;
while (!gameOver) {
// 显示当前分数和选项
std::cout << '当前分数: ' << score << std::endl;
std::cout << '1. 增加分数' << std::endl;
std::cout << '2. 游戏结束' << std::endl;
// 等待用户输入选项
int choice;
std::cin >> choice;
// 根据用户的选择执行相应操作
switch (choice) {
case 1:
// 增加分数
score += 10;
break;
case 2:
// 结束游戏
*gameOverAddress = true;
break;
default:
std::cout << '无效的选项!' << std::endl;
break;
}
}
std::cout << '游戏结束!最终分数: ' << score << std::endl;
return 0;
}
import sys import ctypes import tkinter as tk from tkinter import messagebox, ttk
class MemoryModifier: def init(self): if sys.platform.startswith('win32'): self.kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) else: raise NotImplementedError('Unsupported operating system')
def open_process(self, pid):
process_handle = self.kernel32.OpenProcess(0x1F0FFF, False, pid)
if not process_handle:
error_code = self.kernel32.GetLastError()
raise OSError(error_code, 'Could not open process')
return process_handle
def write_memory(self, process_handle, address, value):
buffer = (ctypes.c_byte * ctypes.sizeof(ctypes.c_int)).from_buffer(ctypes.c_int(value))
bytes_written = ctypes.c_size_t()
result = self.kernel32.WriteProcessMemory(process_handle, address, buffer, ctypes.sizeof(buffer), ctypes.byref(bytes_written))
if not result or bytes_written.value != ctypes.sizeof(buffer):
raise OSError('Failed to write memory')
def read_memory(self, process_handle, address, data_type):
if data_type == 'int':
buffer = ctypes.c_int()
result = self.kernel32.ReadProcessMemory(process_handle, address, ctypes.byref(buffer), ctypes.sizeof(buffer), None)
if not result:
raise OSError('Failed to read memory')
return buffer.value
elif data_type == 'float':
buffer = ctypes.c_float()
result = self.kernel32.ReadProcessMemory(process_handle, address, ctypes.byref(buffer), ctypes.sizeof(buffer), None)
if not result:
raise OSError('Failed to read memory')
return buffer.value
else:
buffer = (ctypes.c_byte * 256)()
result = self.kernel32.ReadProcessMemory(process_handle, address, ctypes.byref(buffer), ctypes.sizeof(buffer), None)
if not result:
raise OSError('Failed to read memory')
return buffer.value.decode().strip('�')
def close_process(self, process_handle):
self.kernel32.CloseHandle(process_handle)
class GameDataModifierGUI: def init(self, root): self.root = root self.root.title('游戏数据修改器') self.root.geometry('400x300')
self.process_id_label = tk.Label(self.root, text='进程ID:')
self.process_id_label.pack()
self.process_id_entry = tk.Entry(self.root)
self.process_id_entry.pack()
self.memory_address_label = tk.Label(self.root, text='内存地址:')
self.memory_address_label.pack()
self.memory_address_entry = tk.Entry(self.root)
self.memory_address_entry.pack()
self.data_type_label = tk.Label(self.root, text='数据类型:')
self.data_type_label.pack()
self.data_type_combobox = ttk.Combobox(self.root, values=['int', 'float', 'str'], state='readonly')
self.data_type_combobox.current(0)
self.data_type_combobox.pack()
self.new_value_label = tk.Label(self.root, text='新值:')
self.new_value_label.pack()
self.new_value_entry = tk.Entry(self.root)
self.new_value_entry.pack()
self.modify_button = tk.Button(self.root, text='修改游戏数据', command=self.modify_game_data)
self.modify_button.pack()
self.modifier = MemoryModifier()
def modify_game_data(self):
try:
pid = int(self.process_id_entry.get())
address = int(self.memory_address_entry.get(), 16)
data_type = self.data_type_combobox.get()
new_value = self.new_value_entry.get()
process_handle = self.modifier.open_process(pid)
if data_type == 'int':
self.modifier.write_memory(process_handle, address, int(new_value))
elif data_type == 'float':
self.modifier.write_memory(process_handle, address, ctypes.c_float(float(new_value)))
else:
self.modifier.write_memory(process_handle, address, new_value.encode())
messagebox.showinfo('成功', '内存值已修改')
except OSError as e:
messagebox.showerror('错误', str(e))
except ValueError:
messagebox.showerror('错误', '请输入有效的进程ID和内存地址')
finally:
self.modifier.close_process(process_handle)
def start_application(): window = tk.Tk()
game_data_modifier_gui = GameDataModifierGUI(window)
window.mainloop()
if name == 'main': start_application()
原文地址: https://www.cveoy.top/t/topic/quMg 著作权归作者所有。请勿转载和采集!