【CE入门教程】使用Cheat Engine(CE)修改游戏“植物大战僵尸”之植物篇
目錄
?1.單卡片無CD
1.1 思路一
1.2?思路二
2.全卡片無CD
3.豌豆射手射速修改(修改植物射速)
4.實現豌豆射手發射“玉米加農炮”(思路)
上一期教程中,我們學習了修改植物大戰僵尸的陽光數量、向日葵生產陽光速率以及實現“太陽雨”PS:上篇鏈接:(38條消息) 【CE入門教程】使用Cheat Engine(CE)修改游戲“植物大戰僵尸”之陽光篇_Fly1ng.M的博客-CSDN博客
首先,用CE打開植物大戰僵尸。
?此時我們可以直接導入上次找出的三個基址:
?導入成功!
?1.單卡片無CD
為了方便我們繼續,首先現將陽光數量改為9999。
1.1 思路一
分析:植物在CD結束后卡片可選狀態和鼠標點擊卡片但不松手是兩種相反的狀態,我們可以利用這點通過1/0搜索排查。
游戲剛開始時,豌豆射手處于可選狀態,我們在CE中搜索“1”。
注:因為此次搜索的值為0和1,在0~255之間,所以在搜索前必須將“數值類型”改為“字節”。
?切回游戲,鼠標點擊豌豆射手但不種下,使豌豆射手處于純黑背景狀態,我們切出CE,搜索“0”。
?
重復上述步驟,直到數量結果不再減少。此時結果數量可能還是很多,我們可以Ctrl+A全部選中,將所有地址都添加到CT表中。(如下圖,全選后點擊紅色箭頭添加到CT表)
?此時,我們可以同時選中很多地址,對他們的數值進行更改,此時數值為1,我們雙擊數字1,修改為0,如果豌豆射手進入不可選中狀態,則可說明豌豆射手CD在選中的這些地址中;如果沒有變化,則繼續篩選。
?最終,我們終于找到了豌豆CD的地址(其實就是最后一個)。
?接下來我們尋找基址,右鍵->“找出是什么改寫了這個地址”,然后我們切回游戲,點擊豌豆射手再放回去。能得到如下結果:
?通過分析可知,下面那一行“01”代表了豌豆無冷卻的狀態,我們雙擊它(或查看詳細信息)。
?可知“可能的地址”為1D3250E8,雖然是[eax+ecx+70],但是仔細觀察可以發現EAX=0,所以一級偏移量為70,我們記下這個值,后面要用。
右鍵“可能的地址是”后面的地址可以直接復制:
?點擊新的掃描,因為我們要搜索地址,地址的表示形式為16位,所以我們要勾選搜索框前面的Hex,還要注意的一點,搜索地址時別忘了把數值類型改為4字節!
?
?如圖,可知可能的地址為1D296218,二級偏移量為144,記錄。
這次掃描會出現很多地址,前幾個與其他地址明顯不同的都有可能,一般像這種指令比較工整的就是我們要尋找的方向。
?
?
?如圖,可知可能的地址為02879B88,三級偏移量為768,記錄。
再次搜索地址時,就會發現綠色的基址了。
?雙擊任意一個基址添加到CT表中,可以看到基址地址為006A9EC0。
我們點擊“手動添加地址”,?因為有三層偏移,所以我們點擊“指針”-->“添加偏移”。下面一欄輸入006A9EC0,三行偏移從上至下依次填入先前記錄的70、144、768,單擊確定。
?這樣我們就成功找到了豌豆射手單卡片CD的基址,我們把數值改為1并鎖定,可以看到實現了豌豆射手的無CD!
1.2?思路二
分析:植物在剛種植后進入冷卻,此時植物不可選,直到冷卻結束才能再次種植,我們可以通過CD變化搜索“變動的數值”不斷查找該植物的CD(至于為什么不用“減少的數值”,一會就知道了)。
首先,種下豌豆射手,搜索“未知的初始值”。
?
?切換到游戲狀態讓游戲運行一會,再切換回CE,搜索“變動的數值”。
當冷卻結束后,我們也可以搜索幾次“未變動的數值”篩選更少的結果,然后再種一顆豌豆射手,重復上述步驟。
通過觀察可以發現,當豌豆射手在CD時,該地址當前值一直在變化;而當豌豆射手冷卻完畢后,該地址為0,由此推斷出,該地址就是存放豌豆射手CD的地址,仔細觀察就會發現,植物卡片的CD并不是一直減少到0,而是先增大后變為0,所以“減少的數值”是搜不到的。
2.全卡片無CD
我們在1中已經找到了第一張卡片CD的基址,那么其他卡片的CD基址可以找到嗎?每個卡片依次按照上述方法一步一步找基址當然能找到,可以這樣太浪費時間了。這里提供一種思路:通過觀察可知,植物槽上相鄰卡片的地址應該離得很近,所以我們可以直接右擊第一張卡片CD基址,選擇“瀏覽相關內存區域”。
打開地址區域后,我們點擊第二張卡片再放下,仔細看,內存區域中有一個地址在隨著我們點擊進行00/01的切換,可知,這個地址為第二張卡片的地址。
?右鍵該地址,將它添加到列表中:
?我們依然用第一次查找第一張卡片CD的基址時所用的方法,此處不在贅述。三次查找的線索如下:
?
?仔細看!第一次偏移時,EAX的值變為了50,而在第一張卡片的第一次偏移值里EAX=0,我們可以大膽推斷下一格植物卡片比上一格偏移量多了50!
將第二個植物的CD基址添加一下:
?為了保險起見,我們可以繼續驗證一下,第三張卡片進行查找后第一次偏移為:A0+70
?沒看懂不要緊,通過計算器算一下可知,A0-50=50!也就是說第三張的確比第二張偏移多了50!
?所以第三張卡片的基址也可以直接手動添加了:
?綜上所述,通過這種方法我們就可以求出任何一張植物卡片的基址了!
第n張卡片的基址第一次的偏移量:70+50*(n-1)
(PS:第二次和第三次偏移量不變!)
?3.豌豆射手射速修改(修改植物射速)
思路:豌豆射手打僵尸會發射豌豆,我們假設豌豆射手應該有一個內置“計時器”,每當射出一粒豌豆后,計時器開始減小,不斷循環(類似CD不斷減少)
?注:為了方便操作,建議開啟變速精靈,把游戲速度調慢!
?此時,搜索未知的初始值。
?然后切回游戲,“讓子彈飛一會”,再切回CE搜索“減少的數值”,當豌豆射出下一發時再搜索“增大的數值”,然后重復上述步驟。
注:此處容易失誤!原因是:看起來豌豆射手好像沒有發出下一發,但是計時器其實已經刷新了,(可以理解成蓄力的動畫時已經開始計時了,但這個動畫并不明顯)所以建議快打到僵尸的這段時間不要繼續“再次掃描”了!
?我們右鍵,“找出是什么訪問了這個地址”,如果沒有切回游戲讓豌豆射一會。
?分析可知,這個“-01”可能代表著豌豆的涉及射擊頻率,可是怎么把這個指令以代碼或腳本的形式提取出來呢?接下來我們學習CE的進階知識:代碼注入。點擊這行指令-->“顯示反匯編程序”。
?我們在工具欄里找到“自動匯編”。
?
?框架代碼注入后,我們再選擇代碼注入,因為之前選中的就是這行指令,所以我們不用管,“OK”就好。
?
?如圖,把-01改為-04,這會增加豌豆射手的發射速度。
好了,我們已經生成好了自己的腳本,不要急著關閉,點擊“文件”-->“分配到當前的CT表”
?
?鎖定該腳本后,可以明顯發現豌豆射手的射速變快了。
?右鍵該腳本點擊“創建熱鍵”,可以實現選擇性的開關腳本。
?
4.實現豌豆射手發射“玉米加農炮”(思路)
首先,我們點擊“查看內存”。
?右鍵任一地址,點擊“轉到地址”。
?地址欄輸入:004672A5。
?“工具”-->“自動匯編”。
?引入CT表框架代碼:
代碼注入,當前地址確定即可。
?
?然后我們在下圖中位置插入幾行代碼,稍后會逐行進行講解:
注釋:
cmp [ebp+24],#0 //cmp是判斷,0代表豌豆射手,這句話用來判斷植物是不是豌豆射手。#的意思是10進制,否則為16進制
je h?//je是等于跳轉,表示如果是豌豆射手就跳轉到h
jne originalcode //jne是不等于跳轉,表示如果不是豌豆射手就仍然按照原來的代碼執行
h: //由上,如果是豌豆就跳轉至此
mov eax,#11 //mov是賦值,表示把11放到EAX里。這里的11代表的是子彈類型(玉米加農炮),大家也可以嘗試換成其他數字,看看會出現什么效果(注意:如果數字超出界限游戲會崩潰)
然后我們可以分配到當前CT表了:
?
?激活腳本,如下圖,成功了!
總結
以上是生活随笔為你收集整理的【CE入门教程】使用Cheat Engine(CE)修改游戏“植物大战僵尸”之植物篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入解析ThreadLocal源码
- 下一篇: ps基础学习:更改证件照的背景色