1. 程式人生 > 其它 >20182228 實驗四《Python程式設計》實驗報告

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)

實驗結果截圖