HOOK:鈎子
外挂中的展現:挂鈎代碼,實作讀取實時資料
HOOK方式:
位址
- 直接修改
- 間接修改
找到空白位址區域寫入自己想要執行的過程的資料
原位址的區域跳轉
空白位址跳轉回去
3、直接讀取
今天的主要任務是找出陽光值減少的函數
在運作的這時候一定要運作處陽光減少的步驟,不然不會得出減少的程序
找到減少的程序:
EAX=00000032
EBX=00000032
ECX=FFFFFFC9
EDX=FFFFFFFF
ESI=00000032
EDI=1CF8ED18
EBP=1CF8ED18
ESP=0019FB70
EIP=0041BA67
指針基址可能是 =1CF8ED18
0041BA5F - int 3
0041BA60 - push esi
0041BA61 - mov esi,[edi+00005560] //這裡就是關鍵代碼處
0041BA67 - mov edx,edi
0041BA69 - call 0041B980
然後我們就可以打開od來看看運作的具體流程

加入程序後,運作,然後跳轉到上面發現的關鍵位址,然後然後設定斷點,驗證。
然後分析下面的代碼
發現減少陽光值的地方
修改這個地方就可以實作陽光值不減少。
接下來展示“秒殺”功能
為了實作秒殺,我們就需要找到是如何計算怪獸的血量的。如果我們能夠直接修改怪獸的血量,那我們攻擊的時候就可以達到“死亡”的目的。
是以,我們首先應該尋找計算血量的代碼處
我們用CE這個工具檢視調用計算血量的記憶體位址
我們運作遊戲直到第一個怪獸出現
我們讓豌豆射手打在怪獸身上,然後搜尋減少的量
由于結果還比較多。我們猜測血量不會超過1000,是以我們再縮短一下範圍
現在任然還有很多符合條件的結果
是以我們繼續尋找減少的結果
這下隻有7個符合我們條件的值。是以我們可以再看結果,進而确定是哪一個函數倆決定的。
多次測試發現是這個。在豌豆射手射擊下,每一次是減少20。分别沖130、110、90。于是我們看是那些調用了這個。
這裡注意的是,我們在用這個工具檢視的時候我們需要豌豆再一次打擊到怪物身上才能夠讓工具捕捉到。
記憶體位址如下:
00412E99 - 03 86 C8000000 - add eax,[esi+000000C8]
005312FE - 8B BD C8000000 - mov edi,[ebp+000000C8]
0052D71B - 8B B0 C8000000 - mov esi,[eax+000000C8]
00531319 - 89 BD C8000000 - mov [ebp+000000C8],edi
0052A527 - 39 8B C8000000 - cmp [ebx+000000C8],ecx
00531783 - 83 BD C8000000 00 - cmp dword ptr [ebp+000000C8],00
這時,我們就需要用ollydbg來檢視函數位置。
我們檢視到這裡的時候我們就發現一些有意思的地方。
這裡就是我們要找的地方。
那我們怎樣實作秒殺呢。
看看彙編代碼,發現最後
00531319 89BD C8000000 mov dword ptr ss:[ebp+0xC8],edi
這裡是結果的地方,我們隻需要讓edi中的值小于20 便能夠秒殺。
我們就采用hook‘的方式來實作
當然有人肯定會想直接修改edi,當我們直接修改的時候,就會觸發程式的保護措施。
是以我們隻能夠間接修改
我們找到空白的地方’
修改成上面的這樣。然後我們就可以取消斷點,然後運作看看我們是不是秒殺。
但是我們又發現一個問題就是,不同的僵屍可能計算血量的函數不一樣。我們實驗的隻是最初級的僵屍。在運作過程中我們發現淺一點的僵屍并不能夠實作秒殺。故猜測采用了另外的函數來計算。但是分析方法是一樣的。