CE修改器使用教程 [入门篇]
Cheat Engine 一般簡稱CE,是一個開放源代碼的作弊軟件,其功能包括:內存掃描、十六進制編輯器、調試工具,Cheat Engine 自身附帶了外掛制作工具,可以用它直接生成外掛工具,CE可以說是目前最優秀的游戲修改器不是之一,這個工具絕對值得你去學習(只要花一點時間就夠了)。
本章節內容將帶領小白學會使用CE,由于是入門教程所以不會講解一些太深奧的原理,其目的是教會你如何使用這款工具來修改一些游戲中的數據,快速上手操作,這里我們就以CE中內置的Tutorial-i386.exe工具來做教學演示,如果你能夠靈活掌握演示工具中每個關卡的通關過程,那么相信你也可以將學到的技術應用到其他任何一款游戲中,暫時不要嘗試附加網絡游戲除非你已經做好了萬全的準備。
環境準備::下載并安裝CE
首先CE工具的官方網站是:https://www.cheatengine.org/ 不過網站上下載的都是英文版本的,這里我準備了一份漢化本的CE下載地址是:鏈接: https://pan.baidu.com/s/1nHAzrBExD_2R2Ko8Wd4SdQ 提取碼: fdrm,下載好后解壓到指定目錄直接打開Cheat Engine.exe既可使用了。
1.打開解壓后的CE目錄你可以看到下面的目錄結構,其中Cheat Engine.exe就是CE的主進程,而Tutorial-i386.exe則是一個練習環境,我們后續內容都會圍繞這個練習環境展開.
2.接著我們打開Cheat Engine.exe(如果系統是32位的則打開cheatengine-i386.exe)請務必使用管理員權限運行CE修改器,如下:
3.使用CE修改器附加cheatengine-i386.exe進程,操作過程如下:
教程到這里就結束了,第一關就這么簡單
好了,點擊下一步按鈕進入下一個步驟(或輸入密碼進入你要練習的步驟)
第二關::精確掃描數值
附加Tutorial-i386.exe進程后,我們點擊教程的下一步按鈕,接著繼續第二關,第二關的作用還是很簡單的,主要目的是遍歷出我們想要的動態數據,比如角色的生命,人物的魔法等,都會用到精確掃描,可以說這一關是既簡單又實用的東西,也是今后外掛制作中最常用的環節,接著我們看下Tutorial-i386.exe程序對這一關通關流程的描述:
步驟 2: 精確值掃描 (密碼=090453)
現在你已經在 Cheat Engine 中打開了訓練程序,為我們下一步的練習做好了準備。
本窗口的左下方顯示的"健康:XXX",
在你每次點擊"打我"按鈕時,它的值便會減少。
要進入下一關,你必須找到這個數值并把它改成 1000 。
很多方法都可以找到這個數值的位置,但我將告訴你一個最簡單的方法,"精確數值"掃描:
上面的簡單描述的意思就是,需要將100這個數值修改為1000則本關就算通過,看下面具體的步驟
1.首先游戲規則是每次我們點擊打我按鈕則健康值則會減一,我們首先搜索這個100看能不能找到些什么.
現在開始搜索精確數值 100 數值中輸入100 點擊 首次掃描 按鈕
默認情況下一般游戲就是4字節,這里不需要改動掃描類型和數值類型,默認就好了.
這次掃描我們得到 35 個結果,里面肯定有我們要找的那個血值,不過好像太多了,沒關系繼續往下看.
關鍵一步:為了找到更加精確的數據,我們回到 Tutorial 點擊 打我 按鈕,此時血值已有變化了:
我們再輸入 95 點擊 再次掃描 按鈕 結果只剩1個(這就是我們要找的),我們雙擊此地址將其添加到地址欄:
此時地址欄里面只有1個結果了,這個就是我們要找的內存地址,雙擊將其加入到地址欄
在數值95上面雙擊,并修改把 95 改成 1000 點擊確定按鈕,此時通關.
此時回到Tutorial-i386.exe程序,會發現教程的 下一步 按鈕變成可用,再次點擊打我按鈕,數值變大了,繼續點擊下一步進入第三關...
第三關::未知數值掃描
經過第二關的練習,你已經理解了如何利用"精確數值"掃描查找數值了,讓我們進行下一步。
本關主要用來搜索進度條,人物血條等,因為這些數據通常是一個進度條,我們無法直接看到的數據,此時可以通過變更的數據一步步篩選找到動態地址。
步驟 3: 未知的初始值 (密碼=419482)
在上一關中我們知道初始數值的大小,所以我們可以利用"精確數值"掃描,但本關中僅有一個狀態欄,我們并不知道它的初始數值。
我們只知道這個數值在0到500之間,并且每次點擊"打我"之后便會減些,每次減少的健康值會顯示在進度條的上方。
這一關很重要,因為某些游戲中血顯示的不是數字而是血條,這樣的話教程2中的方法就失效了。
本關就你要教會你如何修改這些討厭的未知數
此時在CE修改其中點擊 新掃描 然后選擇 未知初始數值,其他的選項不用動。
點擊 首次掃描 然后出現了肯定是N多的結果,因為太多了,CE沒有顯示出來。
老辦法,回到 Tutorial.exe ,點擊打我 ,CE會告訴你血量減了多少,比如 -6
這里面我們換個思路,假設CE沒告訴我減少了多少或者我根本沒看清,這時應該怎么辦呢? 注意看下面的操作
一、掃描減少的數值: 下拉框,選擇減少了的數值,按再次掃描(此時血量減少了)
二、掃描不變的數值: 拉框,然后選擇 沒變動的數值(此時血量沒有變化)
三、反復操作: 再回到Tutorial ,點擊 打我 => 掃描減少了的數值 => 掃描沒變動的數值反復操作,最后就會只剩4個地址
四、簡單判斷: 簡單判斷下(Tutorial中告訴你了這個數值是小于500的),很容易就找到了最終的地址。
雙擊把地址加到地址欄,然后更改數值為5000。
就可以過關了(前面教程有說過,這里就不再重復了)闖關成功。
大家一定要明白這樣操作的思路:
血量減少=>CE搜索減少的數值
血量不變=>CE搜索不變的數值
血量增加=>CE搜索增加的數值
這樣反復篩減,就能很容易找到最終的結果。
第四關::浮點數的掃描
在前面的教程中我們使用4字節的方式進行掃描,但有些游戲使用了"浮點數"來存儲數值(這么做是為了給菜鳥制造一些麻煩,讓他們沒那么容易修改游戲)。
浮點數是帶有小數點的數值(如 5.12 或 11321.1),正如本關中的健康和彈藥,兩者都以浮點方法儲存數據,不同的是,健康值為單精度浮點數,而彈藥值為雙精度浮點數。
步驟 4: 浮點數 (密碼=890124)
點擊"打我"將減少一些健康值,而點擊"開火"則消耗掉 0.5 的彈藥。
你得把這兩項都修改到 5000 或者更多才能過關。
"精確數值"掃描的方式雖然也可以完成本關的工作,但你應該試試其它更簡練的掃描方式。
1.在掃描浮點數時,我們需要將數值類型改為浮點數,浮點數掃描時不必輸入后的小數 97.0000 掃描時輸入97就可以了。
2.此時將97這個浮點數改為6000即可。
3.接著搜索雙浮點數,也就是找到彈藥的內存地址。
4.最后改寫彈藥將99.5改成6000即可通關。
5.最后,點擊下一步,本關通過。
這里面要強調的是:
浮點數的長度是4字節,使用4字節也可搜索到浮點數,但需要使用模糊搜索。
雙浮點數的長度是8字節,使用8字節也可搜索到浮點數,但需要使用模糊搜索
現在好多游戲都采用浮點數來處理。例如您在掃描游戲時發現一個數值是 1120403456 這時候您就要想到它是浮點數。
4字節的 1120403456 = 浮點數的 100 目前的游戲大多以4字節(含浮點數)為主。
第五關::代碼替換功能
某些游戲重新開始時,數據會存儲在與上次不同的地方, 甚至游戲的過程中數據的存儲位置也會變動。在這種情況下,你還是可以簡單幾步搞定它。
這次我將盡量闡述如何運用"代碼替換"功能,第五關的數值每次啟動教程的時候都會存放在內存不同的位置,所以地址列表中的固定地址是不起作用的。
步驟 5: 代碼替換 (密碼=888899)
本關的目的就是要讓改變數值的按鈕失效,很神奇,但是有什么用呢?
1、在游戲中我們可以利用此功能使金錢數量不會發生變化。
2、可以利用此功能讓怪物攻擊失效,從而實現無敵的效果。
3、讓彈藥不會減少,從而實現無限彈藥的效果
好處太多了,本關的方法就可以輕松實現上面的功能。
提示:如果你以足夠快的速度鎖定住該地址,"下一步"按鈕也會變為可點擊的。
1.首先先找到血量的內存地址,不會找的先去看前面幾關,這里就不重復了,然后 在地址上 右鍵=>找出是什么改寫了這個地址:
2.在彈出的小窗口中點擊是按鈕 ,會彈出一個如下所示的小窗口,這個窗口此時沒有任何數據。
3.然后我們回到教程中,點擊教程中的 改變數值 按鈕。會出現如下代碼mov[eax],edx不用管他的意思。
4.小窗口中會出現一行代碼,選中代碼,然后點擊替換按鈕。
5.最后一步:直接按確定就可以
6.然后回到附加的程序,點擊改變數值的按鈕,你會發現按鈕已經沒有用了。本關操作已經結束了
操作非常簡單,但是為什么這樣就會使按鈕的功能失效:
改變數值按鈕其實是通過 代碼 0045aecb - 89 10 - mov [eax],edx 來實現數值改變的。
我們在的最后一步操作就是要把這行代碼替換成什么也不做(英文是 Nop),這樣就會讓按鈕的功能失效。
第六關::關于指針
上一步闡述了如何使用"代碼替換"功能對付變化位置的數據地址,但這種方法往往不能達到預期的效果,所以我們需要學習如何利用指針。
在本關的 Tutorial.exe 窗口下面有兩個按鈕,一個會改變數值,另一個不但能改變數值而且還會改變數值在內存中存儲的位置。
接下來我們將找到內存中的基址, 為什么要找指針,在前面的教程中,如果各位細心觀察的話就會發現 在我截圖中的出現地址和你的地址并不相同。
也就是說,這些地址是一直在變化的,我們把它叫做動態地址。
步驟 6: 指針: (密碼=098712)
問題:電腦是如何每次都知道這個動態地址究竟是多少的?
其實并不是所有的地址都會變化的,內存中也有不會變化的地址,我們將不會變化的地址,我們把它叫做基址。
實現思路:用不變的地址定位會變化的地址,即用基址定位動態地址。
1.首先老樣子,我們先找到程序的動態地址,如下我們搜索100。
2.點擊改變數值后,繼續搜索。
3.找到血量的地址后,加入到地址欄,然后在地址上按 右鍵=>找出是什么改寫了這個地址,然后點擊 改變數值 按鈕,出現一行代碼(見第五關),雙擊那行代碼(或者點擊詳細信息)。
4.然后出現一個信息框,具體的代碼是什么意思就不解釋了,CE會告訴你下一步該做什么,圖:
CE讓我們下一步找 01732898(在你電腦顯示可能不是這個地址,因為它是動態地址),繼續操作:
5.返回到CE,點擊新掃描,先勾上HEX,填入01732898,點擊首次掃描。
一定要勾上HEX,否則CE在搜索16進制字母時會報錯。搜索結果出來了:
這個地址 00601630 顯示的是 綠色 的,你的電腦上也應該是這個地址,因為它就是基址。
記住:在CE中顯示綠色的地址是基址,黑色的地址是動態地址
6.手動添加一個指針,點擊 手動添加地址
圖示操作,輸入 00601630 然后點擊確定
7.注意看:指針在地址欄顯示的是 p-> 地址 這種類型的
我們將數值改成5000,再點擊前面的鎖定
然后點擊 Tutorial 中的 改變指針 按鈕,這關就可以過了。
這一關相當重要,大家一定要多多練習(學會前六關,你已經可以修改大部分的游戲了)
說明:
1、并不是所有的游戲都要找基址然后做指針,有的游戲直接就是基址
2、基址是綠色的,如果找到最后有多個綠色地址,在一般情況下選擇第1個
第七關::簡單代碼注入
從本關開始,各位會初步接觸到CE的反匯編功能,這也是CE最強大的功能之一。在第6關的時候我們說到指針的找法,用基址定位動態地址。但這一關不用指針也可以進行修改,即使對方是動態地址,且功能更加強大。
代碼注入是將一小段你寫出的代碼注入到目標進程中并執行它的技巧。在這一步教程中,你將有一個健康值和一個每按一次將減少 1 點健康值的按鈕,你的任務是利用"代碼注入",使每按一次按鈕增加2點的健康值。
步驟 7: 代碼注入: (密碼=013370)
教程中每按一次按鈕,會自動減少1點血,你的任務是將其改成每按一次按鈕增加2點血。
還記得第5關的不傷血的修改方法嗎?這一關就是第5關的加強版。
推薦你從原代碼中刪除減少健康值的那行代碼,否則你得加 3 點健康值
老樣子,根據動態數據反復查找,查找血量的地址,然后再地址上 右鍵=> 查找寫入的地址,為啥不是查找訪問的地址呢?這里不需要明白,照著做就可以了
然后按一下打我按鈕,會出現一行匯編代碼 0042585D - 83 AB 78040000 01 - sub dword ptr [ebx+00000478],01 <<
這條指令的作用是,將[ebx+678]地址中的數據減1,sub為減法的匯編格式。
雙擊那行代碼,看下詳細信息:
這行代碼什么意思呢?sub 大家都知道是減少的意思
圖示紅框處:EBX=0184D5E0,我們用計算器算一下(注意是16進制的)
184D5E0+ 478 = 184DA58 ---> 正好是血量的動態地址,很騷吧
sub [ebx+00000478] = sub [184DA58] 夠清楚了吧,這就是讓血量減1的代碼(1省略了),其實CE中也有提示 Decrement by 1 。
明白了這行代碼的意思,我們回去看看Tutorial的要求:把減1改成加2。
繼續操作。選擇反匯編程序,如下步驟
點擊工具,選擇自動匯編
第一步:選擇CT表框架代碼
第二步:選擇代碼注入
對應的地址不要搞錯了,是"Tutorial-i386.exe"+2585D,這里不需要動,保持默認就可以
然后按確定,會自動生成匯編代碼,這些代碼是什么意思,我們不用管,找到關鍵的一行:sub dword ptr [ebx+00000478],01
將原來的sub dword ptr [ebx+00000478],01,改成 add dword ptr [ebx+00000478],02,每次遞增2
然后在地址欄就可以看到這個腳本了,點擊前面的 單選框 執行,然后點擊Tutorial中的打我,這關就可以過了。
你感覺到他的神奇了嗎?逆天級的修改:
1、怪物每次打我從傷血變成加血。
2、子彈越打越多。
3、錢越花越多。
如果你學會了這一關,你已經脫離菜鳥的行列了,已經可以對付絕大部分的游戲了。
第八關::查找多級指針
本關是第6關的加強版,CE 6.X 教程中的4級指針比5.X的要簡單些。多級指針就像玩解謎游戲一樣,謎團不只一個,盒子中還有盒子。這里面是4級指針,游戲中也有比如8級指針,12級指針等等,思路都是一樣的。
在這一步將解釋如何使用多級指針。在第 6 步,你已經清楚 1 級指針的概念和用途,并可以利用數值的首個地址找到存放數據真正的基址。
在本關中,你將看到 4 級指針,它由第一個指針指向第二個指針,再由第二個指針指向第三個指針,由第三個指針指向第四個指針,最終指向健康值的真正基址地址。
步驟 8: 多級指針: (密碼=525927)
開始的幾步與在第 6 步中的操作基本相同。找出是什么訪問了這個地址,然后記錄下動態地址
接著我們逐級向下查找,在查找的過程中,分別記錄下動態地址,以及所對應的偏移地址
最后將這些地址相加,并鎖定數值為5000,點擊改變指針,然后就可通關啦
1.第一步你需要按照第二關中的方法找到,動態地址,然后加入到地址欄中。
查找一級指針: 找到血量地址 0169B5F8(動態地址),然后 右鍵 => 查找寫入
然后回到教程程序中,點擊 改變數值按鈕 ,如下
點擊詳細信息
出現代碼的詳細信息。
這個該怎么看呢?ESI= 0169B5E0
ESI+ 18 = 0169B5F8 就是血量的地址,也就是說。想找到血量的地址就要找到ESI,注意看了圖中一行字:
>>>> 要查找地址的指針的可能值是 0169B5E0
如果您覺得分析太麻煩,就按CE的建議來,這里面要提醒各位注意 可能 這個詞,也就是說不一定全對。
第6關也提到過偏移的概念。這里面的一級偏移是 18
總結:一級偏移是 18 下一個搜索目標是 0169B5E0
查找二級指針: 下面找ESI,勾上HEX(16進制),輸入 0169B5E0 新掃描。
然后把新地址 0169B5E0 添加到地址欄,在地址上右鍵=>選擇 查找訪問的地址。
一定要注意:這里面和上面的操作不同,第一次是查找寫入的地址,這次選擇的是查找訪問的地址。
如果沒有出現代碼信息。我們就到 Tutorial 中點擊一下 改變數值 按鈕,之后會收集到兩條指令,cmp 指令跟指針沒什么關系,對我們有用的是第二條指令 mov esi,[esi]。
這里由于是 mov esi,[esi] 默認我們將其偏移地址看作是 0
不過問題來了,我們發現,這里提示的地址和上一次提示的地址是一樣的,這是為什么呢?
CE 默認使用硬件斷點的方式,斷點只能停在指令執行之后,而這條指令正好是把 esi 原來指向的地址中的值再賦值給 esi,所以執行之后 esi 的值已經是被覆蓋掉的值了,而我們想知道的恰恰是執行這條指令之前的 esi 值, esi 就是這個我們監視的地址。
所以直接搜索這個地址即可。
將 0168495C 這個地址添加到下方,然后使用 找出是什么訪問了這個地址,再來一遍。
最后得出:二級偏移是 0 ,下一個目標是 0169B5E0
查找三級指針: 接下來和查找一級指針方法相同,這里我們在彈出的框中選擇第二條指令。可看到二級偏移是 14
繼續查找三級指針,方法同上,這里三級指針是0c。
最后得出:三級級偏移是 0c ,下一個目標是 01684628
查找四級指針: 繼續搜索01684628 這個動態地址,如下。
一定要記住:在CE中顯示綠色的地址是基址,黑色的是動態地址。如果有多個綠色地址,一般情況下我們選擇第一個。
這里我們已經找到了所有的地址,接下來串一下這些地址看看
00601660 + c + 14 +0 + 18
把基址(一級指針) "Tutorial-i386.exe"+1FD660 的值取出來,加上一級偏移 0C,當做地址,這是二級指針的地址,再把二級指針的值取出來,加上 14,這是三級指針的地址,依次類推。
添加并測試指針: 最后測試,指針是否生效。
添加后鎖定數值為5000,然后點擊例子中的改變指針按鈕,看是否能通關。
多級指針要注意的地方:
1、1級指針是 查找寫入,其余全是 查找訪問。
2、綠色的地址是基址,黑色是動態地址。
3、添加指針時注意用模塊地址。
4、指針是由基址在偏移組成的,所以在教程中我們只要找到4個偏移和1個基址就可以了。
建議大家,如果想深入研究的話,最好能過學習一下Windows 32位匯編語言
第九關:查找共享代碼
到此,基礎篇的內容就全部介紹完畢了,學會了上面的內容也算是入門了,接下來將實戰分析一些游戲
寫教程不容易,轉載請加出處!!
轉載于:https://www.cnblogs.com/LyShark/p/10799926.html
總結
以上是生活随笔為你收集整理的CE修改器使用教程 [入门篇]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue项目中assets与static的
- 下一篇: 进程线程区别,和线程初识