20182228 实验四《Python程序设计》实验报告

课程:《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)
复制代码

实验结果截图

 

posted on 2021-06-30 21:00  坑坑爽  阅读(78)  评论(0编辑  收藏  举报