CE修改器:外挂制作高级技巧
Cheat Engine 一般簡稱CE,是一個開放源代碼的作弊軟件,其功能包括:內存掃描、十六進制編輯器、調試工具,Cheat Engine 自身附帶了外掛制作工具,可以用它直接生成外掛工具,CE可以說是目前最優秀的游戲修改器不是之一,這個工具絕對值得你去學習,這里希望你能夠活學活用。
人造指針的使用技巧
實驗目標:通過向游戲中注入一段特殊的匯編代碼,實現自動獲取動態地址,省略找基址的麻煩。該方法適用于游戲基址層數過多無法直接獲取到基址,游戲根本無法找到基址。
1.打開CE工具并附加游戲進程,首先通過遍歷的方式找到陽光的動態地址,然后在地址欄上右鍵選擇【找出是什么改寫了這個地址】如下所示我們選擇【mov eax,[esi+5560]】這條匯編代碼。
2.上圖可以看到有兩條匯編指令,而前面的計數器一直在增加,說明有時鐘一直在訪問這個地址,我們以第2條匯編指令為例,點擊【反匯編當前地址】在XOR指令上按下【F5】下斷點,其中【mov eax,[esi+5560]】則表示將當前陽光數量賦值給EAX寄存器,我們可以看到右側寄存器窗口【eax=32】,其中的32正好就是陽光的十六進制表示形式,注意【mov eax,[esi+5560]】這條指令,觀察該指令在注入前與注入后會有什么變化?
3.直接點擊【工具列表】-> 【選擇自動匯編】 ->【模版】->【代碼注入】-> 【確定按鈕】,如下圖所示:
4.我們需要在【mov eax,[esi+00005560]】這條匯編指令執行之前獲取到里面的陽光數據,此時可以在【originalcode】之前寫入以下匯編代碼,其中【push eax,pop eax】分別是壓棧與出棧,因為我們要使用EAX寄存器暫存數據,此時必須要將原始的EAX寄存器里面的內容進行保存,在代碼執行完畢以后必須通過POP指令歸位,否則會導致程序異常或堆棧失衡,【mov eax,[esi+5560]】則表示將【[esi+5560]】中的數據取出來,此處就是陽光的數量。
5.接著我們需要找一個相對固定的內存地址,并將其填充到【mov [xxxx],eax】方框中,此時我們回到CE中(自動匯編窗口不要關閉),在內存查看器窗口選擇【視圖】->【內存區域】
我們需要瀏覽內存區域,找出一個具有讀寫權限的空地址,并且類型為映像的,這里還需要看后面的模塊一定要是植物大戰僵尸文件里的模塊,此處我找到了一個內存地址 【0B4CF000】,雙擊即可跳轉到相應的位置,這里我們不能選擇【02CA9000】這個內存地址,因為這個地址是QQ拼音的模塊。
6.通過雙擊【0B4CF000】地址,即跳轉到相應的內存區域,如下在內存查看器中,標紅處。
我們直接將【0b4cf000】這個內存地址填入到我們的匯編代碼中,此時只要程序獲取到陽光,會默認將陽光的數量放入0B4CF000這個內存中進行保存。
完成獲取以后,我們直接在CE中添加這個內存地址,并開啟自動匯編CT腳本,此時陽光的數量就可以獲取到了。
我們再次來到反匯編窗口觀察注入后的變化,可以看到CE是直接在【D6679600】處寫入了 jmp 指令直接跳轉到了我們自己寫的代碼中去執行了。
跟隨【00DF0000】這個地址即可看到如下代碼,沒錯!這些代碼正是我們在CT表中分配的,當執行完獲取數據以后則會自動跳轉到原始地址【0048982B】繼續執行原始代碼。
總結:上方的的人造指針有一個小問題,那就是我們無法修改陽光的數量,其實這個問題很簡單,在開頭我們說過該地址有一個時鐘一直在給這個地址賦值,而我們在開頭查找的是內存訪問,如果要修改數據,應該要找內存寫入相關的地址。
通過CE尋找本地Call
實驗目標:本地CALL就是程序中的過程調用,通過調用已知的本地CALL即可實現某些變態功能,這些變態功能往往是通過修改數值參數也做不到的,接下來我們將通過遍歷陽光產生的時間,尋找陽光產生的本地Call,并使用代碼注入器注入,自定義生成陽光。
遍歷陽光產生時間的技巧:
進入游戲-> 當出現陽光后->馬上搜索未知初始數值
返回游戲-> 馬上切回CE-> 搜索減少的數值 -> 掉一點搜一點
最后排查出它的掉落地址-> 鎖定1即可實現無限掉落
1.首先你必須通過上方的陽光遍歷技巧找到一個地址,將其鎖定為1即可實現無限陽光掉落,此處我排查到的地址是【13DC2DB8】
2.我們在【13DC2DB8】地址上右鍵,選擇【找出是什么訪問了這個地址】,等待陽光的出現,當出現陽光后地址欄中會多出一條匯編指令,我們記下這條匯編指令的地址。
3.接著關閉內存訪問窗口,點擊CE左下角的【查看內存】,然后我們按下快捷鍵【Ctrl +G】輸入剛剛記下的那個內存地址【00413BCB】并跳轉過去。
4.此處由于我們不知道到底是哪個Call調用了生成陽光,所以我們需要去段首下【F5】斷點,如何確定斷首?你可以向上推鼠標一般斷首的前面是int3停機指令,下斷以后我們回到游戲,默認情況下CE會斷在【mov eax,[esi+554C]】這一行。
5.此時我們可以猜測,游戲中的陽光有大的也有小的,那么我們需要找的Call應該是有參數的,在32位匯編中參數是由堆棧傳遞的,所以我們應該找在Call前面帶push指令的,我們單步【F8】向下走,如下圖可以看到有三個CALL指令,但是這三個CALL并沒有實際的參數傳遞,固應該不太可能是陽光生成的Call.
6.繼續單步【F8】向下走,會發現在最后末尾的位置有一個看似很像陽光Call的代碼片段,出現了多個Push指令,明顯是在傳遞參數,為了驗證這一猜想我們在【00413BE4】的位置下斷點。
7.下好斷點以后回到游戲,發現陽光在出現之前會斷下,說明這個地址確實與陽光的生成有關系,此時我們單步【F8】記下它所傳遞的隱藏參數,如下我已備注好。
8.此時我們通過代碼注入器,向程序中注入代碼,即可實現產出陽光,到此還沒有結束,下方的注入代碼有一個變量【13DBD880】這個動態內存地址每次啟動游戲都會發生變化。
9.為了找到這個動態地址的基址,我們直接在CE中搜索【13DBD880】這個地址,此處我們隨意選擇一個,這里就選擇【00FE85C8】。
10.在這個地址上面,右鍵選擇【查看是什么訪問了這個地址】,然后能看到偏移地址是【768】下一個指針地址是【00FE7E60】。
11.我們直接搜索【00FE7E60】這個內存地址,然后會看到綠色的基址【006A9EC0】,手動添加偏移地址即可得到當前的動態地址【13DBD880】,這里的【333174912(十進制)=13DBD880(十六進制)】。
CE之特征碼定位技術
通過基址加偏移的方式我們可以找到游戲中的指定參數,但這種找基址的方式并不是白用百靈的,在一些網絡游戲中基址加密后根本無從下手,如果此時我們需要在程序中打補丁該如何定位到我們所需要的指令上呢,接下來將介紹一種全新的找地址方式,特征碼定位技術。
特征碼定位技術的應用非常廣泛,我們所熟知的殺毒軟件的查殺原理多半是基于特征碼定位技術實現查殺的,在外掛技術領域特征碼定位主要用于,版本的通殺,制作一鍵基址獲取器,動態地址的定位等。
同樣的提取特征碼也需要盡量找變化比較小的,并具有唯一性標志的匯編指令片段,像是call 或者大跳轉,一般而言我們不能用它作為特征碼。
無冷卻遍歷技巧:
打開CE-> 搜索類型選擇字節類型-> 在植物亮的狀態時搜索1
拿起植物-> 搜0 -> 放下植物搜1 ->拿起植物搜0-> 一直重復-> 地址一般在最后面
1.首先你要通過上面的遍歷技巧找到這個動態地址,將其鎖定1后植物即可無限種植,效果如下所示:
2.接著在該地址上面右鍵,選擇【是什么改寫了這個地址】,然后我們回到游戲,拿起植物然后直接右鍵放下,會出現兩條匯編指令。
匯編代碼分析:
@當我們放下植物后出現:0040CDEA - C6 44 08 70 01 - mov byte ptr [eax+ecx+70],01 { 1 }
@當我們拿起植物后出現:00488E73 - C6 45 48 00 - mov byte ptr [ebp+48],00 { 0 }
3.我們直接點擊【00488E73 - C6 45 48 00 - mov byte ptr [ebp+48],00】 這條指令,因為這條指令是拿起植物是的狀態,我們需要將代碼中的00改為01即可,查看反匯編代碼并提取在它之上的幾條指令作為特征碼,此處我們提取特征為【83 f8 1c 75 08 6a 1e】這些機器碼。
4.接著我們通過CE來驗證一下是否能夠定位到相應的地址上,在CE中選擇搜索【字節數組】,然后能夠搜到【00488E64】這個地址,而我們需要定位到【00488E73】,可以將兩個地址相減得到相對偏移【0xF(也就是十進制的15)】就等于我們想要的地址,公式為【00488e64 + 0xF = 當前地址】。
5.直接使用易語言配合我封裝好的【特征碼定位模塊】,即可實現定位基地址,需要模塊可以聯系我。
6.最后附一張注入成功后的效果圖,如下所示:
通過手工計算偏移地址
首先我們思考一個問題,為什么我們需要手工計算偏移地址,CE找不開心嗎?當然不是,有些游戲比如像CF,只要查找改寫的地址游戲就會崩潰,嚴重的話則會彈出TP警告框,但查找訪問則不會出現這個情況,此時我們就需要進行手工計算偏移地址,來得到基址數據。
1.首先打開CE工具,并通過前期所學的內容快速的找到陽光的動態地址,然后我們在 【141A0C90】地址上選擇【查找訪問地址】,我們需要記下【5560】這個偏移地址。
上圖我們通過動態地址【141A0C90 - 5560 】即可得到上一個指針【1419B730】地址,直接在CE中繼續搜索這個地址。
2.此時我們選擇第二個動態地址,然后再次查找是什么【訪問了這個地址】,可以看到是偏移是【768】,繼續用【00FE85C8 - 768】得到【FE7E60】 。
3.繼續查找這個動態地址【FE7E60】,此時我們可以看到基址【006A9EC0】,通過手工計算我們已經知道了其公式為【006A9EC0 + 768 + 5560】完成。
------------------------------------------------------------------
搜索陽光的動態地址:18664588
00430A11 - 01 88 60550000 - add [eax+00005560],ecx <<
通過動態地址 - 偏移地址 =eax的地址
18664588 - 5560 = 1865F028
------------------------------------------------------------------
繼續搜索:1865F028
0045B6FD - 8B 81 68070000 - mov eax,[ecx+00000768] <<
通過動態地址 - 偏移地址 =eax的地址
025B9E18 - 768 = 025B9E18
------------------------------------------------------------------
基址(綠了說明到頭了):025B9E18
PlantsVsZombies.exe+2A9EC0
------------------------------------------------------------------
總結:025B9E18 + 768 + 5560 = 陽光
------------------------------------------------------------------
寫教程不容易,轉載請加出處!謝謝
總結
以上是生活随笔為你收集整理的CE修改器:外挂制作高级技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 7运行命令大全,常用的4
- 下一篇: Blender 基础 骨架-02 骨架的