2D游戲輔助 - 植物大戰僵屍
2.繪制僵屍方框
我們要做的工作就是這些
獲取僵屍位置
僵屍出現 , 我們搜索未知的浮點數
僵屍移動 , 搜索變動的數值
僵屍沒移動 , 搜索未變動的數值 , 發現搜索完了之后 , 還是有好多數值 , 我們換條思路縮小范圍
設置CE搜索的起始地址 為陽光的的地址 因為運氣好, 所以我沒有將地址改在 11FF3AC8之前 , 應該要分段搜索(陽光值和僵屍坐標值地址在同一個段) 其實僵屍的int類型也有一個x坐標 , 和這個float類型的一樣 , 但是int類型的坐標是讀取float類型的地址 . 修改它,無效
X坐標有了 , Y坐標呢? 對僵屍X坐標欄, Ctrl+B打開內存窗口 , 設置顯示類型 , 可以看到僵屍X坐標地址+4 , 有個250 , 修改一下他
修改成功 , 但是僵屍會被拉回原Y坐標 , 我想僵屍還存有一個 對應列表的數值
將數據類型改成4字節10進制顯示 , 發現120(X) 1(Y) , 2 , 修改一下他,改成5
僵屍就跑到了草坪外面了 , 哈哈 , 看來X,Y坐標附近 , 就是僵屍的結構體 , 大家自行研究 float類型 , 不同版本的CE可能識別的不一樣 , 我的是CE 7.0 , 如果單浮點數勾選了簡單值,那么將更快找到....
我們使用截圖工具看一下僵屍對於,植物大戰僵屍窗口的坐標(這一步無法截圖)發現僵屍的坐標大概是 Window_x + 20+ 僵屍x 就是DrawWindow_x , Window_y+標題欄的y 就是僵屍y
獲取僵屍的數量
獲取僵屍數量 , 分析結構可能更方便 , 這里不寫(我也不會),思路是跟蹤回調
出現一只僵屍 , 就搜索int 1 ,兩只就2,如此往復....
HOOK存放僵屍位置的地址
CE對僵屍坐標欄 , F5 , 查詢誰訪問了他
0052D9E1 - D9 41 2C - fld dword ptr [ecx+2C] , 轉到0052D9E1地址
找出這條指令訪問了誰
出現第二只僵屍 , 出現了新的地址 , 這個地址就是第二只僵屍X坐標 , 我們要做的就是HOOK 0052D9E1這個地址 , 讀取地址ecx+0x2c存放的值 , 開始寫代碼
讀取僵屍坐標 , EasyHOOK是我瞎寫的一個跨進程HOOK庫 , 沒有進程通信的功能,故讀取僵屍的地址變動快的話, 我的坐標跟不上 , 關於HOOK , 確保程序正確執行就行
讀取僵屍的坐標
繪制僵屍方框
繪制庫我用的是EasyX , 創建窗口及相關設置的代碼 ,EasyX下載地址 easyx.cn,很方便,同時也很簡陋.... 對於我來說夠用了
繪制僵屍方框代碼
效果圖: 因為畫布沒有清除 , 所以出現一堆我是僵屍 , 但是網上說的 易語言Imgui, 閃爍 , 繪制不上的問題沒有出現
不爽的話 , 在繪制僵屍的代碼后 ,添加清除函數
效果圖: 這樣的代碼仍需優化(如僵屍死后,依舊繪制 , 大家可以判斷X是否變化 , 也可以換個地址進行HOOK(誰改寫了他)我們的代碼是誰訪問了他) 同時 , EasyX創建的窗口,畫布大小也需改變.......
源碼鏈接
提取碼:0000