Cheat Engine CE官方教程 [汉化]
CE修改器官方教程漢化版,區(qū)別于前款教程,官方教程中使用的是Tutorial64位程序,如下是經(jīng)過翻譯后的官方文檔。
第一步:歡迎
當教程啟動時,您應(yīng)該會看到類似的東西,您只需在閱讀幫助文本后單擊“下一步”按鈕即可。
在后面的步驟中保存密碼,以防崩潰(從注入中)并在以后重新啟動。
運用CE如何附加到進程
- 1.打開要附加到的進程/游戲(如果尚未打開)。
- 2.打開作弊引擎(如果尚未打開)。
- 3.單擊作弊引擎窗體工具欄中的計算機圖標,如果作弊引擎剛剛打開,它應(yīng)該會閃爍,或者在作弊引擎主窗體菜單上選擇進程。
4.從列表中選擇進程。
5.單擊打開按鈕或雙擊該過程。您應(yīng)該會在窗體頂部看到進程名稱。您現(xiàn)在已附加到該進程。
第二步:精確值掃描
對于步驟2,您將看到類似這樣的東西。
我們需要找到的是健康,這里是一個整數(shù)。
因此,設(shè)置內(nèi)存掃描程序以查找整數(shù),然后進行精確值掃描,然后將該值設(shè)置為當前運行狀況值,大多數(shù)整數(shù)將存儲在4字節(jié)變量中,因此讓我們從那里開始。
注意:整數(shù)可以存儲在 1 字節(jié)變量(字節(jié))、2 字節(jié)變量(int16/短)、4 字節(jié)變量 (int32/int) 或 8 字節(jié)變量 (int64/long) 中。
準備就緒后,單擊第一個掃描按鈕。
您應(yīng)該在找到的地址列表中看到一個地址列表,如下所示。
現(xiàn)在點擊點擊我按鈕,然后重新輸入當前值,然后單擊下一次掃描按鈕。
請注意列表中的紅色值,這表示該值已更改。
單擊下一次掃描后,您可能需要繼續(xù)單擊擊中我,然后重新掃描,告訴找到的地址列表足夠小,可以使用。
只需雙擊找到列表中的地址,即可將其添加到作弊表中。然后更改值并凍結(jié)地址,雙擊地址列表中的值進行編輯,通過單擊啟用碼/凍結(jié)框?qū)⑵鋬鼋Y(jié)。
現(xiàn)在應(yīng)該啟用下一個按鈕,單擊它以轉(zhuǎn)到下一步。如果下一個按鈕尚未啟用,請再次單擊點擊我按鈕。
第三步:未知的初始值
當您開始步驟 3 時,您應(yīng)該會看到表單如下所示。
就像幫助文本所說的那樣,請確保在開始新掃描之前單擊新掃描按鈕。
這將清除找到的結(jié)果以開始掃描新值。
在這里,我建議繼續(xù)單擊點擊我按鈕,只是為了查看值是如何減小的,以幫助確定要掃描的值類型。
請注意,該值減小了一個整數(shù),即非小數(shù)。
因此,我將掃描儀設(shè)置為4個字節(jié)和未知的初始值。然后單擊第一個掃描按鈕。
現(xiàn)在點擊點擊我按鈕。然后將掃描類型設(shè)置為減小值,然后單擊嵌套掃描按鈕。
請注意找到的地址數(shù)量,對于當今的大多數(shù)游戲來說,這有點小,對于大多數(shù)游戲來說,找到的結(jié)果很容易達到數(shù)百萬。
現(xiàn)在,只需使用點擊我按鈕繼續(xù)減小該值,然后掃描減小的值,直到找到的結(jié)果足夠小,可以使用。
現(xiàn)在我們只需選擇一個地址并更改值以查看它是否具有所需的效果,這就是它的工作原理。
在這里,我建議您在更改值(或只是Ctrl + C)之前始終注意這些值,以便在它們不是正確的值時將其設(shè)置回去,以防止在游戲中執(zhí)行此操作時更改一堆未知地址并損壞保存文件。
一旦您將值設(shè)置為 5000,下一步按鈕應(yīng)立即變?yōu)閱⒂脿顟B(tài)。更改值并單擊點擊我按鈕后,進度條應(yīng)填充,但這不是必需的。
現(xiàn)在應(yīng)該啟用下一個按鈕,單擊它以轉(zhuǎn)到下一步。如果下一個按鈕尚未啟用,請再次單擊點擊我按鈕。
第四步:浮點數(shù)
當您開始步驟 4 時,您應(yīng)該會看到表單如下所示。
因此,請單擊新建掃描按鈕。然后為掃描儀設(shè)置一個浮點數(shù),精確值,輸入當前運行狀況值。設(shè)置時,單擊第一個掃描按鈕。
因此,只需像以前一樣掃描以查找健康地址,然后將其添加到地址列表中。
現(xiàn)在再次單擊新的掃描按鈕。然后將掃描儀設(shè)置為雙精度值,輸入當前彈藥值。設(shè)置時,單擊第一個掃描按鈕。
因此,只需像以前一樣掃描以查找彈藥地址,然后將其添加到地址列表中即可。
現(xiàn)在將值更改為5000,然后下一步按鈕應(yīng)變?yōu)閱⒂脿顟B(tài)。然后單擊下一步按鈕以繼續(xù)執(zhí)行下一步。
第五步:代碼查找器
當您開始步驟 5 時,您應(yīng)該看到表單如下所示。
因此,首先找到該值,然后將其添加到地址列表中。此時繼續(xù)保存表和密碼,以防調(diào)試器設(shè)置不正確。
在地址列表中擁有地址后,右鍵單擊它,然后選擇找出訪問此地址的內(nèi)容。
作弊引擎將提示您有關(guān)附加調(diào)試器的信息,只需單擊是按鈕即可。
然后將打開一個調(diào)試器窗體,現(xiàn)在單擊更改值按鈕,您應(yīng)該獲得顯示在調(diào)試器窗體中的代碼。
我們想要的是一個書面指令。因此,我們將尋找一些類似于以下內(nèi)容之一的東西:
mov [**],** add [**],** sub [**],** *** [**],**選擇寫入指令的代碼行,可以單擊顯示拆裝器按鈕以查看內(nèi)存中的代碼,然后單擊替換按鈕。最后不要忘記單擊停止按鈕。
替換按鈕會將該行代碼替換為NOP。作弊引擎將提示您輸入它將添加到高級選項列表中的條目的名稱。
輸入名稱,然后單擊確定按鈕。
現(xiàn)在,單擊教程中的更改值按鈕。下一步按鈕應(yīng)變?yōu)閱⒂脿顟B(tài),然后單擊下一步按鈕以前進到下一步。
當高級選項列表中的條目被替換時,它們將顯示為紅色文本。
可以通過單擊作弊引擎主窗體左下角狀態(tài)欄中的高級選項按鈕來查看高級選項列表。
要還原列表中某個條目的原始代碼,請右鍵單擊該條目,然后選擇使用原始代碼還原。
請注意,恢復(fù)后文本為黑色。
第六步:指針
當您開始步驟 6 時,您應(yīng)該看到表單如下所示。
因此,首先找到該值,然后將其添加到地址列表中。
在地址列表中擁有地址后,右鍵單擊它,然后選擇找出訪問此地址的內(nèi)容。
然后單擊更改值按鈕,讓進程訪問該地址。
選擇代碼以查找指針的基址時,請嘗試選擇不寫入與基址相同的寄存器的指令。
在這里,我們對方括號[]之間的值感興趣,因此這里我們需要RDX的值。
這里的偏移量是0,如果指令有這樣的東西:
mov [rdx+12C],eax然后偏移量將為12C(0x12C),請注意,這是十六進制。
現(xiàn)在將掃描儀設(shè)置為8個字節(jié),精確值,選中十六進制復(fù)選框,然后獲取找到的值并將其作為要掃描的值。
準備就緒后,單擊第一個掃描按鈕。
在找到的地址列表中查找?guī)в芯G色文本的地址,這些是靜態(tài)地址。
將一個添加到作弊表,雙擊已添加到地址列表的內(nèi)存記錄的地址,復(fù)制該地址,然后選中指針復(fù)選框,然后將該地址粘貼到指針基址中。
所以我的指針看起來像["Tutorial-x86_64.exe"+XXXXXX]+0這樣。
設(shè)置指針時單擊確定按鈕。
現(xiàn)在將值凍結(jié)在5000并單擊更改指針按鈕,下一個按鈕應(yīng)該變?yōu)閱⒂脿顟B(tài)。
如果下一個按鈕未啟用,則從找到的列表中選擇另一個地址,查找更改其值的綠色地址,并將其設(shè)置為與上一個地址一樣,并查看它是否指向正確的值,如果是這樣,請更改值凍結(jié)并單擊更改指針按鈕。
單擊下一步按鈕前進到下一步。
第七步:代碼注入
當您開始步驟 7 時,您應(yīng)該會看到表單如下所示。
在這里,我們將遵循與步驟 5 相同的過程,但不是單擊替換,請單擊顯示反匯編器按鈕。
這將在指令的地址打開反匯編器視圖表單。
選中該指令后,按 Crtl+A 打開自動匯編程序窗體。
在自動組裝器表單菜單中,選擇模板,然后選擇完全注入。
這將生成一些腳本來啟動。
現(xiàn)在,我們需要添加一些將值增加 2 的代碼,然后刪除減小該值的原始代碼。
為了增加價值,我們可以使用INC或ADD。
所以讓我們嘗試這樣的事情。
... newmem:add dword ptr [rsi+780],2code://sub dword ptr [rsi+00000780],01jmp returnaddress:jmp newmemnopnop return: ...現(xiàn)在將腳本添加到作弊表,然后啟用腳本并單擊“點擊我”按鈕。
這應(yīng)該啟用下一步按鈕,因此單擊下一步按鈕轉(zhuǎn)到下一步。
第八步:多級指針
當您開始步驟 8 時,您應(yīng)該會看到表單如下所示。
手動迭代
在這里,我們將遵循與步驟6相同的步驟,除了我們將看到哪些內(nèi)容訪問了我們找到的基址,并且我們將繼續(xù)重復(fù)此操作,直到找到靜態(tài)基址。
這是我的第一個調(diào)試器輸出。
10002D8D1 - B9 A00F0000 - mov ecx,00000FA0 10002D8D6 - E8 3522FEFF - call Tutorial-x86_64.exe+XXXXXX 10002D8DB - 89 46 18 - mov [rsi+18],eax <<<<<< 10002D8DE - 89 C2 - mov edx,eax 10002D8E0 - 48 8D 4D F8 - lea rcx,[rbp-08]RAX=00000000000007F7 RBX=000000000125CD60 RCX=0000000000000FA0 RDX=00000000828087F3 RSI=0000000001287960 <<<<<< RDI=0000000100258308 RSP=000000000102F070 RBP=000000000102F0B0 RIP=000000010002D8DE R8=0000000100161BA0 R9=00000000008E06A0 R10=0000000000000002 R11=0000000000000206 R12=00000000012607C0 R13=0000000100161BA0 R14=0000000100258300 R15=0000000100257A18我確實在基址的第一次掃描中發(fā)現(xiàn)了一個靜態(tài)基數(shù),但我記得這是一個虛假的基數(shù)。所以這里我們想要的是一個process.exe+offset形式的基址,你可以嘗試其他看起來像module.dll+offset的基址,但我想說的是,在這里它們將被證明是錯誤的指針。是的,大多數(shù)較新的游戲都會有許多錯誤的值和指針。
調(diào)試器從地址保持輸出:0000000001287960
10002D88B - E8 90961200 - call Tutorial-x86_64.exe+XXXXXX 10002D890 - E9 65000000 - jmp Tutorial-x86_64.exe+XXXXXX 10002D895 - 48 83 3E 00 - cmp qword ptr [rsi],00 <<<<<< 10002D899 - 74 5F - je Tutorial-x86_64.exe+XXXXXX 10002D89B - 48 8B 36 - mov rsi,[rsi]RAX=0000000000013117 RBX=000000000125CD60 RCX=000000000125CD60 RDX=0000000000003CE3 RSI=0000000002D6D540 <<<<<< RDI=0000000100258308 RSP=000000000102F070 RBP=000000000102F0B0 RIP=000000010002D899 R8=0000000100161BA0 R9=00000000008E06A0 R10=0000000000000002 R11=0000000000000206 R12=00000000012607C0 R13=0000000100161BA0 R14=0000000100258300 R15=0000000100257A18調(diào)試器輸出的地址保持:0000000002D6D540
10002D845 - E8 D6961200 - call Tutorial-x86_64.exe+XXXXXX 10002D84A - E9 AB000000 - jmp Tutorial-x86_64.exe+XXXXXX 10002D84F - 48 83 7E 18 00 - cmp qword ptr [rsi+18],00 <<<<<< 10002D854 - 0F84 A0000000 - je Tutorial-x86_64.exe+XXXXXX 10002D85A - 48 8B 76 18 - mov rsi,[rsi+18]RAX=00000000000166D2 RBX=000000000125CD60 RCX=000000000125CD60 RDX=000000000000302E RSI=0000000002D6CE40 <<<<<< RDI=0000000100258308 RSP=000000000102F070 RBP=000000000102F0B0 RIP=000000010002D854 R8=0000000100161BA0 R9=00000000008E06A0 R10=0000000000000002 R11=0000000000000206 R12=00000000012607C0 R13=0000000100161BA0 R14=0000000100258300 R15=0000000100257A18調(diào)試器輸出的地址保持:0000000002D6CE40
10002D800 - E8 1B971200 - call Tutorial-x86_64.exe+XXXXXX 10002D805 - E9 F0000000 - jmp Tutorial-x86_64.exe+XXXXXX 10002D80A - 48 83 7E 10 00 - cmp qword ptr [rsi+10],00 <<<<<< 10002D80F - 0F84 E5000000 - je Tutorial-x86_64.exe+XXXXXX 10002D815 - 48 8B 76 10 - mov rsi,[rsi+10]RAX=000000000000B567 RBX=000000000125CD60 RCX=000000000125CD60 RDX=00000000000050A1 RSI=000000000123F1C0 <<<<<< RDI=0000000100258308 RSP=000000000102F070 RBP=000000000102F0B0 RIP=000000010002D80F R8=0000000100161BA0 R9=00000000008E06A0 R10=0000000000000002 R11=0000000000000206 R12=00000000012607C0 R13=0000000100161BA0 R14=0000000100258300 R15=0000000100257A18現(xiàn)在我們掃描該基址000000000123F1C0,您應(yīng)該找到一個靜態(tài)地址,但在實際游戲中,您將繼續(xù)前進,直到找到靜態(tài)基址。
以該靜態(tài)地址為基址,我的指針將如``[[[["Tutorial-x86_64.exe"+XXXXXX]+10]+18]+0]+18`所示。
指針掃描可以通過首先找到所需值的地址,保存生成的指針映射,重新啟動游戲,再次搜索地址,保存另一個指針映射,然后比較兩者來快速解決此問題。
找到指針后,將其凍結(jié)在 5000,然后單擊更改指針按鈕。如果您找到了正確的底座,則下一步按鈕應(yīng)在大約2秒后啟用。因此,單擊下一步按鈕轉(zhuǎn)到下一步。
第九步:共享代碼
當您開始步驟 9 時,您應(yīng)該會看到表單如下所示。
因此,就像幫助文本所說的那樣,解決方案遠遠不止一種。
首先,我們需要找到其中一個地址并將其添加到表中。
如果您在查找地址時遇到問題,請記住嘗試不同的值類型,并且不要忘記開始新的掃描。
然后,就像在步驟7中一樣,我們想要查看訪問地址的內(nèi)容,以找到寫入?yún)⑴c者運行狀況的函數(shù)。
如果您想嘗試其他方式,請繼續(xù)保存密碼,這是本教程的最后一步。
因此,在這里,最好了解我們實際上在尋找什么來區(qū)分盟友和戰(zhàn)斗人員。
當編寫游戲或引擎時,演員和玩家可能會這樣編寫。
Actor, base for all actors class Actor(object){string Name = 'Actor';Coord Coords = new Coord(0, 0, 0);float Health = 100.0;... }Player class Player(Actor){ Player inherits form Actorstring Name = 'Player';int Team = 1;... }團隊本身可以是一個結(jié)構(gòu),比如說,如果它被聲明為一個對象類,比如Coords變量,我們希望尋找一個指向參與者團隊結(jié)構(gòu)的指針。
因此,我們可以做到這一點的一種方法是在玩家結(jié)構(gòu)中找到團隊ID或團隊結(jié)構(gòu)。
在球員結(jié)構(gòu)中查找球隊ID
找到減少生命值的功能后。右鍵單擊反匯編器視圖窗體中的指令,然后選擇找出此指令訪問的地址。
然后單擊所有 4 個值的攻擊按鈕。調(diào)試器列表中應(yīng)具有所有 4 個地址。
因此,請繼續(xù)將它們添加到地址列表中。
然后,讓我們打開剖析數(shù)據(jù)結(jié)構(gòu)表單。
你會得到一些彈出窗口,在想到它們之后,你應(yīng)該看到這樣的表單。請注意,我必須擴展窗體的寬度才能移動列。
現(xiàn)在在我的偏移量上,0x10被猜測為一個指針,在64位進程中寬度為8字節(jié)。我看到0x10的指針的值看起來真的不像指針。
因此,我必須將其切換到4字節(jié),并添加一個新的元素集,其偏移量為具有4字節(jié)值類型的0x14。這通常是它的工作方式。
所以在這里我們可以看到團隊變量在結(jié)構(gòu)的偏移0x14。
現(xiàn)在我們需要向腳本添加一些注入代碼,然后添加一些代碼來檢查結(jié)構(gòu)的團隊變量,以確定哪些參與者是盟友,哪些是戰(zhàn)斗員。
所以我們想要一些這樣的。
因此,啟用此腳本后,當游戲?qū)懭胙輪T健康時,以下是跳轉(zhuǎn)到鉤子代碼后將發(fā)生的事情:
- 1.保存(PUSH)RFLAGS寄存器,不是完全需要,但在比較時仍然是一個好習慣。
- 2.檢查演員是否在團隊 1 中。如果 actor 在團隊 1 中,則我們以浮點格式將新值設(shè)置為 5000。
- 3.檢查演員是否在團隊 2 中。如果 actor 在團隊 2 中,則我們將新值設(shè)置為 0,采用十六進制格式。(浮點數(shù) 0 == 整型 0 == 十六進制 0)
- 4.恢復(fù)(POP)RFLAGS寄存器,如果寄存器是PUSHed的,這是完全需要的。
啟用此腳本后,單擊重新啟動游戲并自動播放按鈕,然后您應(yīng)該看到表單更改并如下所示。
因此,單擊下一步按鈕以完成本教程。然后,您應(yīng)該會看到一個表單,告訴您已完成本教程。
在寄存器中發(fā)現(xiàn)差異
找到減少生命值的功能后。
右鍵單擊反匯編器視圖窗體中的指令,然后選擇找出此指令訪問的地址。
然后單擊所有 4 個值的攻擊按鈕。
調(diào)試器列表中應(yīng)具有所有 4 個地址。
現(xiàn)在讓我們看看登記冊,看看我們是否能找到盟友和戰(zhàn)斗人員的差異。
單獨選擇每個地址,然后按 Ctrl+R。
排列表單以使其更易于比較。
因此,在這里我們可以看到戰(zhàn)斗人員的RSI為1。
所以像這樣的腳本應(yīng)該可以工作。
因此,啟用此腳本后,當游戲?qū)懭胙輪T健康時,以下是跳轉(zhuǎn)到鉤子代碼后將發(fā)生的事情:
-
1.保存(PUSH)RFLAGS寄存器,不是完全需要,但在比較時仍然是一個好習慣。
-
2.檢查 RSI 寄存器是否為
- 1,如果 RSI 寄存器為 則我們將新值設(shè)置為十六進制格式的 0。(浮點數(shù) 0 == 整型 0 == 十六進制 0)
- 2,如果 RSI 寄存器不是 1,那么我們假設(shè) actor 是盟友,因此我們以浮點格式將新值設(shè)置為 5000。
-
3.恢復(fù)(POP)RFLAGS寄存器,如果寄存器是PUSHed的,這是完全需要的。
啟用此腳本后,單擊重新啟動游戲并自動播放按鈕,然后您應(yīng)該看到表單更改并如下所示。
因此,單擊下一步按鈕以完成本教程。
然后,您應(yīng)該會看到一個表單,告訴您已完成本教程。
總結(jié)
以上是生活随笔為你收集整理的Cheat Engine CE官方教程 [汉化]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第十二周学习笔记
- 下一篇: windows客户端性能测试之内存泄露检