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中(自動彙編窗口不要關閉),在內存查看器窗口選擇【視圖】->【內存區域】spa

咱們須要瀏覽內存區域,找出一個具備讀寫權限的空地址,而且類型爲映像的,這裏還須要看後面的模塊必定要是植物大戰殭屍文件裏的模塊,此處我找到了一個內存地址 【0B4CF000】,雙擊便可跳轉到相應的位置,這裏咱們不能選擇【02CA9000】這個內存地址,由於這個地址是QQ拼音的模塊。開放源代碼

6.經過雙擊【0B4CF000】地址,即跳轉到相應的內存區域,以下在內存查看器中,標紅處。3d

咱們直接將【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 = 陽光
------------------------------------------------------------------

寫教程不容易,轉載請加出處!謝謝

相關文章
相關標籤/搜索