一.基本介紹
CE的全稱為Cheat Engine,是一款內存修改編輯工具,其官網是http://www.cheatengine.org,可以在其官網下載到最新的CE工具,目前最新版本是Cheat Engine6.5。CE同時也是一款開源的工具,使用者可以在git中下載源代碼: https://github.com/cheat-engine/cheat-engine。
CE的功能包括有16進制編輯,反匯編程序,內存查找工具。與同類修改工具相比,它具有強大的反匯編功能及調試功能,可以附加到游戲中進行調試,所以是分析游戲的工具之一。
二.CE內存搜索功能的使用
1. 精確搜索:
CE的主界面如下圖所示,使用CE搜索游戲數據,首先需要將CE附加到游戲進程中。
點擊左上角菜單下發的綠色方框的按鈕,打開進程列表對話框。
選擇相應的游戲並點擊打開,此時,就可以在數值搜索框中輸入需要搜索的數據。比如搜索游戲中顯示角色血量值的存放地址:
如上圖血量所示,在CE的搜索數值輸入框中輸入“生命值”12393,選擇掃描類型為“精確數值”,點擊“新的掃描”開始第一次掃描。
搜索出的匹配值有98個,由於結果較多,這個時候不能確定正確的存放地址,需要再次搜索。
這個時候被怪打一下(使血量變化),輸入新的生命值,點擊“再次搜索”,此時的搜索值可以縮小到3個。
此時經過測試就可以發現第一個地址就是存放游戲界面中血量顯示的地址。
2. 模糊搜索
如果搜索數值不確定的話,就需要使用模糊搜索的方法。使用模糊搜索的情況主要有具體數值不顯示在游戲界面上,比如血量用百分比表示。模糊搜索的類型比較多,如下圖所示:
同樣以搜索生命值為例,首次掃描時選擇“未知的初始值”
點擊“首次掃描”,這個時候會出現非常多的掃描結果。這個時候去被怪物打一下減少血量后,由於此時數值是減小的,所以在掃描類型中選擇“減少的數值”,然后點擊再次掃描:
重復多次掃描后,即可找到存放的生命值的地址。
三.代碼跟蹤
代碼跟蹤比較常見的用途是找基址,游戲中任何數據都在內存中存在,比如角色的血,藍,等級等數據,這些數值存放的方式一般是對象+偏移,在C++就是以指針的方式表示,如果需要知道對象在內存中的存放地址,就需要找到對象的基址。
需要知道對象的地址或數據的偏移,常見的方法就是找到訪問或改變這個值的指令,可以使用Cheat Engine的反匯編及調試功能。
如上例的數據搜索找到的生命值存放的地址,將其放到CE最下方地址列表中,右鍵點擊列表中的地址項,如下圖所示,“找出是什么訪問了這個地址”和“找出是什么改下了這個地址”分別可以跟蹤生命值在代碼的什么地方被讀取和改寫。
例如需要找到在血量被改寫的地方,先在地址列表中右鍵點擊“找出是什么改寫了這個地址”,此時CE會附加到其內置的調試器,並自動列入對生命值進行寫入的代碼。
此時,ecx=0x22B96D34是對象的地址,血量通過eax賦值到+41Ch的地址漂移處。如上圖所示,所以一級指針ecx的偏移+41Ch地址處。Ecx的賦值為上一條指令mov ecx, [esi+10],其二級指針是esi的偏移+10h地址處,再往上一條指令mov esi, [esi+4FA0],可以確定三級指針為esi,偏移為+4FA0h,以此類推,就可以找到血量存放的基址。