游戲找CALL練習(xí)實(shí)例ONE_百度文庫_第1頁
游戲找CALL練習(xí)實(shí)例ONE_百度文庫_第2頁
游戲找CALL練習(xí)實(shí)例ONE_百度文庫_第3頁
游戲找CALL練習(xí)實(shí)例ONE_百度文庫_第4頁
游戲找CALL練習(xí)實(shí)例ONE_百度文庫_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、游戲找CALL練習(xí)實(shí)例ONE目標(biāo):游戲找CALL練習(xí)實(shí)例ONE 記:看這篇找CALL文章,并不是說要學(xué)會它的操作步驟,而是學(xué)會找步驟的原理,只有懂得原理,才算真正會了.不要因為模擬器的簡單 而忽略這篇文章,也不要因為曾經(jīng)寫過這個模擬器的掛 而忽略這篇文章.希望這篇文章能給你帶來幫助. 這是一位大牛做的模擬器器,今天就來找這個 模擬器的CALL用OD 加載 模擬器 然后按F9 運(yùn)行 下bp send 斷點(diǎn) P:為什么要下 send 斷點(diǎn)? *send 是微軟提供的一個API 函數(shù),可以用來發(fā)送數(shù)據(jù)包. 絕大部分游戲都是用這個函數(shù)來發(fā)包的,其他還有 WSASend sendto WSASendto

2、 = send對應(yīng)的收包函數(shù)是 recv WSASend對應(yīng)的收包函數(shù)是 WSARecv 下段 后 這里按 ALT+B 會顯示 已經(jīng)下段的 地址 *當(dāng)你暫時不想斷下來 而又不想刪掉 就可以 按 空格 來禁止.斷下來后,我們點(diǎn)下 模擬器的 加血 按鈕 OD立馬就斷了下來 *標(biāo)題顯示 模塊- ws2_32 表明 我們還在系統(tǒng)領(lǐng)空*游戲發(fā)送數(shù)據(jù)包是調(diào)用send函數(shù) 發(fā)送的,掉用以后 程序告訴系統(tǒng) 我要發(fā)包了,然后系統(tǒng)就開發(fā)發(fā)送封包,這個時候斷下來后 我們就在 系統(tǒng)發(fā)送完封包 后. 按 CTRL+F9 返回 P:為什么要用 CTRL+F9 返回?而不是 前進(jìn)? *程序是 一層套著一層的,就像一個箱子

3、里面 包含一個箱子 ,而里面的箱子里又有一個箱子.而我們斷的send 就是在最里面的箱子,所以我們需要返回到 我們所需要的代碼層. 我們來看下 堆棧窗口 這里 第一行是 CALL第二行到第五行 是 CALL的 參數(shù)寫成函數(shù)就是 send(soket,data,datasize,flags)這個就是 系統(tǒng)send所需要的參數(shù)DATA 這里存放著 send發(fā)送的封包內(nèi)容 DATASIZE 表示 封包的大小 從MSDN查看一下 函數(shù)的參數(shù) 我們會 發(fā)現(xiàn) 他的參數(shù) 跟我們剛剛反匯編的一樣. *按照 _cdecl調(diào)用約定 參數(shù) 是從 右邊 開始壓入堆棧 繼續(xù) 返回 這里 我們已經(jīng)到了 程序領(lǐng)空了 (標(biāo)題

4、顯示 模擬器,而沒有顯示ws2_32)在這里 OD已經(jīng) 給我們標(biāo)明了. 這是調(diào)用send 的匯編代碼因為這個模擬器并沒有寫接收 返回封包的 代碼 所以 我們調(diào)用這個send 函數(shù)程序也是沒有反應(yīng)的 繼續(xù)返回 這里有一個CALL 如果我們第一次找,我們并不能確認(rèn)這個是否 是我們要找的 P:如何確認(rèn)這個是否是我們需要的CALL呢? 我們先斷下來 再說 繼續(xù)返回 這里上面 有一個 retn *retn 表示 一段程序的結(jié)束. 這里從 JMP 00403814 開始 到下面的retn 代表 這個是連續(xù)的一段代碼 繼續(xù)返回 這里 我們又發(fā)現(xiàn)一個CALL 先斷下來再說 在返回 一層 這里也有一個CALL

5、也斷下來 好了 我們現(xiàn)在已經(jīng)返回了6層 找到了3個CALL 到底哪個是我們需要找的呢 我們先來測試下我們找的 把 send 斷點(diǎn) 刪了 暫時沒用了 按下 加血 我們發(fā)現(xiàn) 所有斷點(diǎn) 都會斷, 這個時候 我們發(fā)現(xiàn) 第二個CALL 附近有 "血"這種文本 當(dāng)然一般的除了喊話CALL 以外不會有很明確的數(shù)值當(dāng)做依據(jù) 這個時候就要靠 你的經(jīng)驗 去猜了. 我們在 點(diǎn)下 吃藍(lán) 發(fā)現(xiàn) 只斷下 第一個. 好了,第一個先不要管了.為啥?猜的. 好了 我們來看看第二個CALL mov edx,00453028call 00452E98retn *要寫一個CALL,我們就要模擬出他

6、所需要的寄存器,還有堆棧的環(huán)境P:如果看一個CALL所 需要的 寄存器? 我們進(jìn)入 call 00452E98 的內(nèi)部 選中 call 00452E98 那行 按 回車 就會 跳到下面 00452E98 /$ 55 push ebp00452E99 |. 8BEC mov ebp, esp00452E9B |. 83C4 F8 add esp, -800452E9E |. 53 push ebx00452E9F |. 8955 FC mov dword ptr ebp-4, edx00452EA2 |. 8BD8 mov ebx, eax00452EA4 |. 8B45 FC mov eax,

7、 dword ptr ebp-400452EA7 |. E8 1414FBFF call 004042C000452EAC |. 33C0 xor eax, eax00452EAE |. 55 push ebp00452EAF |. 68 7E2F4500 push 00452F7E00452EB4 |. 64:FF30 push dword ptr fs:eax00452EB7 |. 64:8920 mov dword ptr fs:eax, esp00452EBA |. 8B45 FC mov eax, dword ptr ebp-400452EBD |. BA 942F4500 mov

8、edx, 00452F9400452EC2 |. E8 5513FBFF call 0040421C 00452E98 /$ 55 push ebp00452E99 |. 8BEC mov ebp, esp00452E9B |. 83C4 F8 add esp, -800452E9E |. 53 push ebx 這里是 保存 堆棧環(huán)境 我們先不管他 00452E9F |. 8955 FC mov dword ptr ebp-4, edx 將 EDX 保存到 EBP-4我們來找下 EDX的值 這段匯編代碼 前面 沒有給 EDX賦值 我們返回上一層 按小鍵盤 -上一層 mov edx,00453

9、028 這句代碼的意思是 將 453028賦值給EDX也就是說EDX=00453028 找到EDX 的值后 繼續(xù)往下面找 00452EA2 |. 8BD8 mov ebx, eax 這里需要EAX的值,但是 我們找了這一層和上一層 并沒有發(fā)現(xiàn)有給EAX賦值的代碼 我們這里 先直接給EAX賦值 其他沒有了 好了 我們現(xiàn)在可以確認(rèn)了 這個CALL 調(diào)用了 EDX 和EAX的寄存器的值 這個CALL的寫法就是 mov edx,00453028 mov eax,00991FA8 call 00452E98 我們來測試下 CALL成功了但是,我們拿到另外一臺電腦 發(fā)現(xiàn) 居然不能用了? 調(diào)試了下 發(fā)現(xiàn)EA

10、X的值 跟剛剛的不一樣 P:如何取到 EAX的固定值呢? 答案很簡單 用CE搜 看到那個綠色的值了么 那個就是 EAX的基址 ,無論 EAX的值 怎么變 都可以在這個地址讀取到真正的值 代碼如下 mov edx,00453028mov eax,456d68mov eax,eaxcall 00452E98 好了 現(xiàn)在 可以再任意一臺電腦上運(yùn)行了 = 好了 先不管這個CALL 我們現(xiàn)在來找下 EAX的值。 在 call 00452E98 下斷 按下 加血 OD 斷下來了 然后我們按 CTRL+F9 返回 好了 到了這里 mov edx,ebxmov eax,ebx+124call ebx+120

11、這個時候 我們發(fā)現(xiàn) EAX的值 EAX=ebx+124 我們發(fā)現(xiàn)CALL地址 并不是 是直接的地址。 在這個CALL 下斷 點(diǎn)下 加血 按鈕我們發(fā)現(xiàn) EBX+124=0099493C=00991FA8 EAX=991FA8剛剛 我們找過 EAX的基址了 ebx+120=00994938=00453014 這里的CALL地址 寫成代碼是 mov eax,456d68mov eax,eaxcall 453014 CALL成功了 P:為什么2個不同地址的CALL都會成功呢? 經(jīng)過不斷測試(如何測試?點(diǎn)擊不同的按鈕 看看CALL的地址)發(fā)現(xiàn) 不同按鈕斷下來的地址 都是不同的。 補(bǔ)魔的地址 冰系的地址

12、= 我們來測試下第三個CALL mov edx,ebx+214mov eax+24c,edxmov eax,ebxcall 4324d8 調(diào)試過程中EBX+214=0 那么 edx的值 =0EAX+24C=EDX=0EAX=00991FA8 EAX=EBX=994818CALL 4324d8 寄存器的值都搞清楚了 然后 我們看看 CALL還調(diào)用了哪個寄存器 跟進(jìn)CALL (按 F7 進(jìn)入CALL ) 004324D8 /$ 53 push ebx004324D9 |. 8BD8 mov ebx, eax004324DB |. 66:83BB 22010>cmp word ptr

13、ebx+122, 0 004324E3 |. 74 2D je short 00432512004324E5 |. 8BC3 mov eax, ebx004324E7 |. 8B10 mov edx, dword ptr eax004324E9 |. FF52 3C call dword ptr edx+3C004324EC |. 85C0 test eax, eax004324EE |. 74 22 je short 00432512004324F0 |. 8BC3 mov eax, ebx004324F2 |. 8B10 mov edx, dword ptr eax 004324E5 |.

14、 8BC3 mov eax, ebx這里有一行 調(diào)用了 EBX 我們往上找找 發(fā)現(xiàn) 有給EBX 賦值的代碼 那么 我們就不必理會了 004324E7 |. 8B10 mov edx, dword ptr eax這里調(diào)用了 EAX 在上一層 有給EAX賦值的 代碼 下面就沒了 好了 用代碼注入器 寫CALL mov edx,ebx+214 ,EBX+214=0 那么 第一句就是 mov edx,0 mov eax+24c,edx ,edx的值 =0 EAX=00991FA8那么 第二句 就是 MOV EAX+24C,0 但是 注入器不通過 這個時候我們換一種寫法首先給 EAX賦值 mov eax

15、,991FA8 這里 我們剛剛找過 這個基址 456d68 是EAX的基址 首先放入 基址的值 mov eax,456d68然后在讀取 基址 mov eax,eax然后 加上偏移 24C add eax,24c 地址寫好后 我們把 EDX放到 地址里去 mov eax,edxmov eax,ebx第三句 EBX=994818因為 CALL沒有調(diào)用EBX 所以我們不必給ebx 賦值mov eax,994818 call 4324d8 放到一起 那么就是 mov edx,0mov eax,456d68mov eax,eaxadd eax,24cmov eax,edxmov eax,994818call 4324d8 好了 CALL成功了 經(jīng)過調(diào)試

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論