使用ollydbg從零開始cracking第二十四章-反調(diào)試之綜合練習(xí)_第1頁
使用ollydbg從零開始cracking第二十四章-反調(diào)試之綜合練習(xí)_第2頁
使用ollydbg從零開始cracking第二十四章-反調(diào)試之綜合練習(xí)_第3頁
使用ollydbg從零開始cracking第二十四章-反調(diào)試之綜合練習(xí)_第4頁
使用ollydbg從零開始cracking第二十四章-反調(diào)試之綜合練習(xí)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二十四章-OllyDbg在我們介紹異常處理之前,我們先把上一章留下的antisocial1這個反調(diào)試的綜合練解一下這是一個加過殼的程序,當(dāng)然,我們還沒有介紹殼的相關(guān)知識點,我們只需要知道該程序加載到內(nèi)存中以后,殼會原區(qū)段的個區(qū)段的數(shù)據(jù)然后跳轉(zhuǎn)到原點(OEP)處執(zhí)行原程的代碼當(dāng)外殼程序/解壓還原并跳轉(zhuǎn)到P處,此時的內(nèi)存映像就是已解壓/過的程序這個時候?qū)?nèi)存映像抓取并保存為文件即可(該過程稱之為p)。好了,OD加載antisocial,將反反調(diào)試插件的選項都勾選上。該提示表明該程序可能被加殼了,我們選擇”是”按鈕,然后就停在了點處個寄存器的值,而這里并沒有執(zhí)行PUSHAD指令,就比較可疑了。這里提示錯誤-PUSH指令嘗試壓棧,但是這里沒有寫權(quán)限,POPAD指令,JNZPUSH的指令處,當(dāng)前棧頂指針還屬于堆棧的范圍,緊接著執(zhí)行POPAD當(dāng)前棧頂指針已經(jīng)超出了堆棧的范圍,POPAD指令導(dǎo)致的,PUSHAD指令將各個寄存器的值保存到堆棧中,POPAD指令將堆棧的值恢復(fù)到各個寄存器中。好了,POPAD指令替換成PUSHAD指令看看會發(fā)生什么,我們重新啟動該程序。我們輸入PUSHAD現(xiàn)在我們運行起來,斷在了第二個POPAD但此時的堆棧情況如下此時執(zhí)行POPAD指令堆棧并不會越界,F8我們到達了PUSH指令處,緊接著是RET,F8鍵單步步過PUSH和RET好了,OD分析有點問題,OD這里,我們單擊鼠標(biāo)右鍵選擇ysis-Removeysisfrommodule?,F(xiàn)在代碼開起來正常了吧,我們運行起來看看會發(fā)生什么我們可以看到斷在了POPAD指令處,然后就發(fā)生了異常。INT68ODNOP另外,INT68指令會對我們進行干擾,INT68指令,NOPINT68指令,NOP再次搜索,又找到了一個,NOP我們繼續(xù)CTRLL搜索,提示搜索結(jié)束,INT68指令了,OllyDbg調(diào)試的情況,OllyDbg1.0來調(diào)試,手動來繞過(PS:odbg110FINALsinplugins:我們打開不帶反反調(diào)試插件的OllyDbg,由于命令欄插件我們還是需要的,所以插 指定為只包含命令欄插件 我們運行還是跟之前一樣,將POPAD指令替換成PUSHAD我們還是給后面的POPAD指令設(shè)置斷點,我們清空掉所有的忽略異常的選項,當(dāng)我們運行起來,INT68指令時,NOPSHIFTF9API還有一點就是別忘了勾選這個選項API函數(shù),并沒有看到什么可疑的,GetProcAddress,GetProcAddress函數(shù)來API函數(shù),我們給該函數(shù)設(shè)置一個斷點。APICreateToolhelp32Snapshot,該函數(shù)給當(dāng)前運行的所有進程創(chuàng)建快照。我們執(zhí)行到返回,這時,EAX保存的就是CreateToolhelp32Snapshot函數(shù)的首地址了,我們接著使用BPEAXAPI函數(shù)設(shè)置斷點。API這里是Toolhelp32ReadProcessMemory這個函數(shù),跟CreateToolhelp32Snapshot類似,同上,給Process32First現(xiàn)在斷在了創(chuàng)建進程快照處,OD是基于這個進程快照的,該進程快照包含了進程列表中所有進程的相關(guān)信息,我們可以嘗試patch這個函數(shù),讓該函數(shù)返回的快照句柄為空,現(xiàn)在我們來到CreateToolhelp32Snapshot這個函數(shù)的返回處。我們可以看到這里有一些空余的空間,EAX這樣CreateToolhelp32Snapshot這個函數(shù)返回的快照句柄就為空了,OD了。當(dāng)然我們還有另一種方式-修改主程序中的代碼,而并不修改CreateToolhelp32Snapshot的實現(xiàn)代碼。按F8鍵單步,我們可以看到這里有個JNZ條件跳轉(zhuǎn)指令會跳轉(zhuǎn)至TerminateProcess處結(jié)束掉OD進程。OD的進程句柄在之OpenProcess獲取。我們可以看到這里有五個分支判斷。這里這幾處JNZ指令修改為JMP指令,這樣就可以避免程序執(zhí)行TerminateProcess結(jié)束掉OD進程我們停在了INT68指令處,該INT68指令用NOP指令填充掉,然后運行起來會發(fā)生程序終止了HideDebugger1.23f插件,FindWindows/EnumWindows選項,然后重復(fù)之前的步驟會發(fā)現(xiàn)運行的很正常。OD終止的地方是這里。我們跟進都這個CALL4047F0這里當(dāng)比較出是OllyDbg的話,就會終止掉當(dāng)前進程。這里我們?yōu)榱吮苊釰NZ條件跳轉(zhuǎn)指令不成立進而去調(diào)用下面的CALL4532CC結(jié)束掉進程,該JNZ指令修改為JMP指令。JMP我們再來看看我們繞過的第二個CALL該CALL指令里面是調(diào)用PostQuitMessage好了,現(xiàn)在你可能會問了,JNZ473305關(guān)鍵跳轉(zhuǎn)的呢?我們按照之前的步驟干掉了該反調(diào)試的第一部分以后,就可以給PostQuitMessageAPIAPI函數(shù)處,我們看下堆棧,4532D7處,JE指令跳轉(zhuǎn)沒有發(fā)生,PostQuitMessage,PostQuitMessage話

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論