#include\x3ciostream\x3e #include\x3cssstream\x3e #include\x3ciomanip\x3e #ifdef _WIN32 #include\x3cwindows.h\x3e #else #include\x3cunistd.h\x3e #endif

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;

// 显示变量的实时内存地址(以十六进制格式)
std::cout << "分数的内存地址: 0x" << getMemoryAddress(&score) << std::endl;
std::cout << "游戏结束标志的内存地址: 0x" << getMemoryAddress(&gameOver) << 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:
        // 结束游戏
        gameOver = 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("\x00")

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()

C++ 游戏数据修改器:修改游戏内存数据

原文地址: https://www.cveoy.top/t/topic/quNq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录