代码-QZQ)
import pymem import pymem.process import tkinter as tk from tkinter import ttk, messagebox import threading import time class PVZTrainer: def __init__(self, root): self.root root self.root.title(PVZ 原版修改器 (1.0.0.1051)) self.root.geometry(420x320) self.root.resizable(False, False) self.pm None self.base_address None self.process_name PlantsVsZombies.exe # 原版 1.0.0.1051 偏移链 self.offsets { 阳光: {base: 0x2A9EC0, chain: [0x768, 0x5560]}, 金币: {base: 0x2A9EC0, chain: [0x82C, 0x28]}, } self.god_mode False self._build_ui() self.attach() def _build_ui(self): status_frame tk.Frame(self.root) status_frame.pack(filltk.X, padx10, pady5) tk.Label(status_frame, text状态:).pack(sidetk.LEFT) self.status_label tk.Label(status_frame, text未附加, fgred) self.status_label.pack(sidetk.LEFT, padx5) main ttk.LabelFrame(self.root, text修改功能) main.pack(filltk.BOTH, expandTrue, padx10, pady5) # 阳光 f1 tk.Frame(main) f1.pack(filltk.X, padx10, pady8) tk.Label(f1, text阳光:, width6).pack(sidetk.LEFT) self.sun_var tk.StringVar(value9999) tk.Entry(f1, textvariableself.sun_var, width10).pack(sidetk.LEFT, padx5) tk.Button(f1, text写入, commandlambda: self.write_value(阳光, self.sun_var)).pack(sidetk.LEFT, padx2) tk.Button(f1, text读取, commandlambda: self.read_value(阳光)).pack(sidetk.LEFT, padx2) # 金币注意金币显示值 内存值 / 10 f2 tk.Frame(main) f2.pack(filltk.X, padx10, pady8) tk.Label(f2, text金币:, width6).pack(sidetk.LEFT) self.coin_var tk.StringVar(value9999) tk.Entry(f2, textvariableself.coin_var, width10).pack(sidetk.LEFT, padx5) tk.Button(f2, text写入, commandlambda: self.write_coin()).pack(sidetk.LEFT, padx2) tk.Button(f2, text读取, commandlambda: self.read_value(金币)).pack(sidetk.LEFT, padx2) # 日志 log_frame ttk.LabelFrame(self.root, text日志) log_frame.pack(filltk.BOTH, expandTrue, padx10, pady5) self.log_text tk.Text(log_frame, height6, statetk.DISABLED) self.log_text.pack(filltk.BOTH, expandTrue, padx5, pady5) def log(self, msg): self.log_text.config(statetk.NORMAL) self.log_text.insert(tk.END, f[{time.strftime(%H:%M:%S)}] {msg}\n) self.log_text.see(tk.END) self.log_text.config(statetk.DISABLED) def attach(self): try: self.pm pymem.Pymem(self.process_name) module pymem.process.module_from_name( self.pm.process_handle, self.process_name ) self.base_address module.lpBaseOfDll self.status_label.config(textf已附加 (PID: {self.pm.process_id}), fggreen) self.log(f基址: 0x{self.base_address:X}) except Exception as e: self.status_label.config(text附加失败, fgred) self.log(f失败: {e}) def _resolve(self, name): if not self.pm or not self.base_address: return None cfg self.offsets[name] addr self.base_address cfg[base] for offset in cfg[chain]: addr self.pm.read_int(addr) offset return addr def read_value(self, name): addr self._resolve(name) if not addr: return try: val self.pm.read_int(addr) if name 金币: self.log(f金币(内存值): {val}, 显示值约: {val // 10}) else: self.log(f{name}: {val}) except Exception as e: self.log(f读取失败: {e}) def write_value(self, name, var): addr self._resolve(name) if not addr: return try: value int(var.get()) self.pm.write_int(addr, value) self.log(f{name} 已写入 {value}) except Exception as e: self.log(f写入失败: {e}) def write_coin(self): # 金币需要 x10 写入 addr self._resolve(金币) if not addr: return try: value int(self.coin_var.get()) * 10 self.pm.write_int(addr, value) self.log(f金币已写入 (内存值 {value})) except Exception as e: self.log(f写入失败: {e}) if __name__ __main__: root tk.Tk() app PVZTrainer(root) root.mainloop()python语言-PVZ 植物大战僵尸原版-修改器源代码.ziphttps://download.csdn.net/download/qq_32257509/93805607