课程:《Python程序设计》
班级: 201822
姓名: 李卓伦
学号:20182228
实验教师:王志强
实验日期:2020年6月30日
必修/选修: 公选课
1.实验内容
python综合实践——游戏(破解)
2. 实验过程及结果
(1)
利用import win32gui,获取找到这个窗口的进程,利用win32process.GetWindowThreadProcessId获取应用的进程id
利用win32api.OpenProcess读取内存(打开应用进程)
利用ctypes.windll.LoadLibrary保存数据的缓冲区,再利用Cheat Engine 7.0工具进行分析其阳光的地址所在,然后用ReadProcessMemory进行读进程的地址,最后用WriteProcessMemory修改想要的阳光的值,就可以实现游戏的破解
源文件
(1)植物大战僵尸的破解
import ctypes import win32gui import win32process import win32api window_handle=win32gui.FindWindow(None,'植物大战僵尸中文版') #找到这个窗口的进程 print(window_handle) process_id=win32process.GetWindowThreadProcessId(window_handle)[1] #找到进程id print(process_id) #进程句柄 process_handle=win32api.OpenProcess(0x1F0FFF,False,process_id) #读写内存 kernel32=ctypes.windll.LoadLibrary(r"C:\Windows\System32\kernel32.dll") #用来保存数据的缓冲区 data1=ctypes.c_long() kernel32.ReadProcessMemory(int(process_handle),0x006A9EC0,ctypes.byref(data1),4,None) print(data1.value) data2=ctypes.c_long() kernel32.ReadProcessMemory(int(process_handle),data1.value+0x768,ctypes.byref(data2),4,None) print(data2.value) data3=ctypes.c_long() kernel32.ReadProcessMemory(int(process_handle),data2.value+0x5560,ctypes.byref(data3),4,None) print(data3.value) sun=input() kernel32.WriteProcessMemory(int(process_handle),data2.value+0x5560,ctypes.byref(ctypes.c_long(int(sun))),4,None)
实验结果截图