CE修改器使用教程 [入門篇]

Cheat Engine 一般簡稱爲CE,它是一款開放源代碼的作弊軟件,其主要功能包括、內存掃描、十六進制編輯器、動態調試功能於一體,且該工具自身附帶了外掛製作工具,可以用它很方便的生成自己的外掛腳本,CE可以說是目前最優秀的遊戲修改器不是之一,這款修改工具絕對值得你去學習,只需要花一點點時間就夠了。

環境準備::配置CE

該工具打開後默認是英文的,你需要修改一下,如下所示,選擇 edit -> setting -> 選擇中文,重啓即可。

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位彙編語言


第九關::查找共享代碼

本關我們將學習共享代碼,在C語言中角色屬性都是以結構體的方式進行存儲的,而結構體所存儲的信息都是連續性的,這一關我們將會解釋如何處理遊戲中的共用代碼,這種代碼是通用在除了自己以外的其他同類型對像上的
常常你在修改遊戲的時候, 你找到了一個單位的健康值 或是你自己角色的生命值, 你會發現一種情況: 如果你把生命值相關代碼移除的話,其結果是你的角色無敵, 但你的敵人也無敵了,這就是共享代碼搞的鬼。

步驟 9: 注入++: (密碼=31337157)
本關模擬一種遊戲,其中左邊爲我方,而右邊爲敵人,當我們點擊重新啓動並自動執行的時候我方血量不足會死亡。
你的任務是找到改寫健康的代碼, 並且修改以至於你可以獲得勝利,但"絕不能"使用鎖定HP的方法。
提示:在遍歷血量的時候應該使用單浮點數進行搜索。

1.首先你需要根據第一關中的搜索方法,分別將下面四個人物的血量搜索到,下面我已經搜索好並做好了備註。

2.你可以分別在每個動態地址上面,右鍵選擇【找出是什麼改寫了這個地址】,會發現這四個地址都指向了同一條彙編代碼,這也就說明了其使用了共享代碼。

3.我們直接在每一個地址上面右鍵選擇【瀏覽相關內存區域】,然後對比四個地址會發現一些規律。

我方隊友的結構


敵人的結構


上方的四個圖片可看出我方隊友編號爲1而敵人的編號爲2,我們可以通過編號來判斷是否爲敵人,來決定要不要讓其掉血。
當然也可以判斷名字的開頭字母來決定,如果是D或E開頭,則說明是隊友不能讓其掉血,否則的話則直接執行扣血代碼。

4.接下來我們要注入代碼了,CE切換到內存瀏覽窗口,然後選擇【工具 -> 自動彙編】,【模板 -> 代碼注入】點擊確定。

上方原始代碼是 mov [ebx+04],eax,意思就是,血量處於 ebx+04 的位置。

5.爲了能夠遍歷到狀態位,我們需要計算出隊伍編號和血量的偏移值,

觀察下圖發現 Dave 血量地址是 019E0794 和隊伍編號地址 019E07A0,兩者十六進制相減(019E07A0 - 019E0794 = 0C)得到0C,如果血量是 ebx+04,那麼隊伍編號就應該是 ebx+04+0C 就是 ebx+10。

6.直接寫以下彙編代碼,然後執行,注入完成後回到練習程序中然後點擊【重新啓動遊戲並自動執行】,本關會順利通過。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章