20182228 實驗四《Python程式設計》實驗報告
阿新 • • 發佈:2021-06-30
課程:《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)