製作遊戲外掛:利用OllyDBG分析數據找call教學

patrick - 製作遊戲外掛:利用OllyDBG分析數據找call教學

放出這篇教學壓力其實還蠻大的,畢竟高手這麼多,可能會被揪出一堆錯誤啊~XD,總之我還是個不折不扣的菜鳥,也還在懵懵懂懂的學習中,希望藉由這樣的文章可以有拋磚引玉的效果,若有任何錯誤或是不夠精確的地方也希望前輩們能夠不吝指正。那我們今天要介紹的主角就是傳說中的『OD』,一款用於Debug的彙編級除錯器,以及它的一些簡單的用法。

本文附件:

解壓縮密碼:

來自妖精的號角

練習用程式介紹:

本程式來自:瑞許找Call練習,用以模擬線上遊戲撿拾物品的動作。按下按鈕即會觸發Send函數並顯示撿到的物品,此動作包含了『撿取』及『物品』兩個參數。
1 - 製作遊戲外掛:利用OllyDBG分析數據找call教學
2 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

分析找Call教學:

第1步 將懶人包中的檔案解壓縮,開啟我們的主角『OllyICE』,即是漢化版的OllyDBG,懶人包中兩者都有加入。
1 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

第2步 然後把懶人包裡面的『找Call練習』打開。

2 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

第3步 回到OllyICE,點選『檔案』→『附加』。

3 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

第4步 選擇『找Call練習』的進程,然後按下『附加』。

4 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

第5步 先按下上方的三角形,讓程式可以執行,然後在命令列輸入『bp send』。在這邊bp就是下斷點breakpoint的意思,而send則是這個程式所調用的函數,早期的線上遊戲似乎比較常見。

5 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

第6步 回到『找Call練習』,點一下『撿藥水』,你會發現視窗自動跳到OllyICE來了,
並且停留在

74FA6F81 – mov edi,edi

這一行。

6 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

第7步 按下Alt+K,來看看有哪些地方調用了這個Call,因為這只是一個練習用的小程式,所以可以看到只有兩處。真正在分析線上遊戲的時候就不會這麼輕鬆了,所以說大家對製作外掛的黑黑們要抱持著十分敬意啊。不是啦,這邊我們就先選第一個跟進去看看,雙擊『調用來自』那一行的地方進入。

7 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

第8步 這樣就進來了,可以看到反白停留在這個call的位置。

8 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

第9步 稍微往上捲一點,找到這一個數據區塊的源頭,通常會在ret之下,或是一堆空白記憶體的下方。以下圖為例,就是

00418640 – push ebp

這一行。

9 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

第10步 從這一行開始往下分析,這邊考驗的就是個人的經驗了,反白的區塊就是值得注意的地方,在

00418669 – lea eax,[ebp-34]

這一行可以看到ebp減去34之後被放入了eax,而底下有個push eax把這個eax作為參數送給Call去調用,所以我們要來看看eax的值的變化。

10 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

第11步 由於eax的值是在這一行到下一行之間改變的,所以我們在這一行點右鍵→此處為新EIP。

11 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

第12步 按下F8跳轉到下一行,觀察右邊暫存器,可以看到eax顯示紅字,表示有變化了!此時我們將eax的值0018F3E8記錄下來。

12 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

第13步 將這幾個必要的參數整個記錄下來(區塊反白→Ctrl+C),然後稍微整理一下。

0041866E    68 10904100     push 00419010                      
00418673    50                            push eax
00418674    8975 DC               mov dword ptr ss:[ebp-24],esi  ←刪除
00418677    8975 CC               mov dword ptr ss:[ebp-34],esi  ←刪除
0041867A    E8 81000000     call 00418700

只需要留下必要的被push的參數即可,刪除那兩行的作用只是用於清除堆棧,在調用Call的時候並非必要。

第14步 將OD關掉,練習用的程式也會跟著被關閉。重新打開找Call練習的程式,再打開懶人包中的『CodeInEX』,點選左上角的視窗圖示。

13 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

第15步 選擇找Call練習的進程,並按下確定。

15 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

第16步 由第12步得知eax的值,將此值用mov的方法置入eax中,再加上13步整理出來的push參數及Call本身,就是一個帶有完整參數的指令。如果參數有少給,程式很可能會崩潰。經驗就是在一堆崩潰之中累積起來的,所以看到製作外掛的黑黑們,請抱持著十分敬意呀。那麼因為這是一篇示範用的教學文章,所以我已經先測試過沒問題了,按下『注入遠程代碼』。

16 - 製作遊戲外掛:利用OllyDBG分析數據找call教學

第17步 哦~哦哦!程式出現了『撿到超棒的』…?超棒的什麼?顯然我們找到的Call只是Send的主程序,還少給了『物品』的參數。不過到這邊已經成功一半又一半了,至於物品參數,就留待下一篇囉。

17 - 製作遊戲外掛:利用OllyDBG分析數據找call教學