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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

6、所需要的寄存器,還有堆棧的環(huán)境P:如果看一個(gè)CALL所 需要的 寄存器? 我們進(jìn)入 call 00452E98 的內(nèi)部 選中 call 00452E98 那行 按 回車(chē) 就會(huì) 跳到下面 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我們來(lái)找下 EDX的值 這段匯編代碼 前面 沒(méi)有給 EDX賦值 我們返回上一層 按小鍵盤(pán) -上一層 mov edx,00453

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

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

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

12、= 我們來(lái)測(cè)試下第三個(gè)CALL mov edx,ebx+214mov eax+24c,edxmov eax,ebxcall 4324d8 調(diào)試過(guò)程中EBX+214=0 那么 edx的值 =0EAX+24C=EDX=0EAX=00991FA8 EAX=EBX=994818CALL 4324d8 寄存器的值都搞清楚了 然后 我們看看 CALL還調(diào)用了哪個(gè)寄存器 跟進(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 賦值的代碼 那么 我們就不必理會(huì)了 004324E7 |. 8B10 mov edx, dword ptr eax這里調(diào)用了 EAX 在上一層 有給EAX賦值的 代碼 下面就沒(méi)了 好了 用代碼注入器 寫(xiě)CALL mov edx,ebx+214 ,EBX+214=0 那么 第一句就是 mov edx,0 mov eax+24c,edx ,edx的值 =0 EAX=00991FA8那么 第二句 就是 MOV EAX+24C,0 但是 注入器不通過(guò) 這個(gè)時(shí)候我們換一種寫(xiě)法首先給 EAX賦值 mov eax

15、,991FA8 這里 我們剛剛找過(guò) 這個(gè)基址 456d68 是EAX的基址 首先放入 基址的值 mov eax,456d68然后在讀取 基址 mov eax,eax然后 加上偏移 24C add eax,24c 地址寫(xiě)好后 我們把 EDX放到 地址里去 mov eax,edxmov eax,ebx第三句 EBX=994818因?yàn)?CALL沒(méi)有調(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)過(guò)調(diào)試

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論