修改内存一共可分为9个步骤
输入进程
创建最高权限身份
找窗口
通过窗口找进程
使用最高身份进入进程
加载内核内存
读取内核中的内存
给定新值
修改值
例--修改植物大战僵尸分数
#1.输入进程模块
#process--进程
import win32process
#系统
import win32con
#窗体
import win32gui
#图形界面编辑
import win32api
#ctypes--访问C/C++动态链接
import ctypes
#2.定义进入程序的最高权限
(0x000F0000|0x00100000|0xFFF)是一个常量,标识最高权限打开一个程序;|是位运算符,不是位或;0x是16进制
PROCESS_ALL_ACCESS = (0x000F0000|0x00100000|0xFFF)
#3.找窗体
#使用工具spy
#输入:类,标题
win = win32gui.FindWindow('MainWindow','Plants vs. Zombies GOTY ')
#4.通过窗体找到进程
#hid--隐藏 pid--控制方式
#ThreadProcessId--线程ID
hid,pid = win32process.GetWindowTheardProcessId(win)
#5.以最高权限身份进入进程取到pid
p = win32.api.OpenProcess(PROCESS_ALL_ACCESS,False,pid)
#6.加载内核
#kernel--内核
#kernel.dll--电脑系统中的内核路径
md = ctypes.windll.loadLibrary(r'C:\Windows\System32\kernel32.dll')
#7.从内核中读取进程内存
#使用工具:memsearch,找到目标地址
#定义数据为底层的C语言的长度
#byref--传址
#4--以4字节的方式
data = ctypes.c_long()
md.ReadProcessMemory(int(p),595451192,ctypes.byref(data),4,None)
print('data=',data) #数据被修改后会将新值直接返回data
#8.定义新值
newData = ctype.c_long(30000)
#9.修改旧值
md.WriteProcessMemory(int(p),595451192,ctypes.byref(newData),4,None)