from ctypes import * # 数据类型封装 操作windows的数据类型 获取和windows兼容的数据类型 import win32process # 进程模块 用来操作windows中的进程 用来操作进程 import win32api # 调用动态链接库函数的功能模块 dll lib windows中存储函数的 外挂必备 import win32gui # 操作windows界面 获取指定窗口+ # 在windows编程中需要指定权限打开对应的进程 # 最高权限附加进程 管理员权限打开进程 PROCESS_ALL_ACCESS=0X1F0FFF # Kernel32.dll 北斗内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理 # 加载kernel32 kernel32 = windll.LoadLibrary("C:\\Windows\\System32\\kernel32.dll") # 准备工作完成 # 寻找到指定窗口 win32gui 找窗口 (窗口类名,窗口名称) window_handle = win32gui.FindWindow(None,"Diablo II") print("进程ID为 %x"%window_handle) # 获取线程 句柄id 和 进程ID 返回值是两个,我们需要第二个 pid hid,pid = win32process.GetWindowThreadProcessId(window_handle) print("pid"+str(pid)) # phand 打开一个进程(参数意思是使用最高权限非安全打这个进程) phand = win32api.OpenProcess(PROCESS_ALL_ACCESS,False,pid) print(phand) # 拿到id就相当于拿到身份证了 # 阳光值内存修改 sun = int(input("请输入要金币值:")) print("修改成功") # 写入内存数据 # 北斗内核级文件写入对应的阳光值 # 四个参数 1:写入哪个进程 2:写入地址 3:写入内容 byref传递这个值的内存地址 4:写入大小int为4字节 5:实际写入大小 # 不断的写入当前内存地址,保证数据不会再变动 while True: kernel32.WriteProcessMemory(int(phand),0x03128064, byref(c_int(sun)),4,bytes(c_int(0)))