使用OllyDbg從零開始Cracking 第四十章OllyDbg腳本的編寫_第1頁
使用OllyDbg從零開始Cracking 第四十章OllyDbg腳本的編寫_第2頁
使用OllyDbg從零開始Cracking 第四十章OllyDbg腳本的編寫_第3頁
使用OllyDbg從零開始Cracking 第四十章OllyDbg腳本的編寫_第4頁
使用OllyDbg從零開始Cracking 第四十章OllyDbg腳本的編寫_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 第四十章本章在修復(fù)PELock的IAT,AntiDump之前,我們先來討論知識點(diǎn),第一個知識點(diǎn)我們上一章已經(jīng)碰到了,只不過沒有展開講而已,第二個知識點(diǎn)就是如何繞過PELock或者類似軟件對硬件斷點(diǎn)的檢測。知識點(diǎn)1在上一章節(jié)我們遇到過,大家可能沒有在意,大家是否還記得上一章節(jié)中,OD加載目標(biāo)程序以后,直接運(yùn)行起來會彈出一個錯誤框,提示不知道該如何處理xxx處的非法指令。為了解決這個問題,我們需要用到Patched4這個程序(又一個打過補(bǔ)丁的OD),我們將其置于原OD所在的文件夾中,因?yàn)樵鍻D在處理非法指令的時候有個BUG,就算我們勾選上調(diào)試選項(xiàng)中的忽略非法指令異常,當(dāng)OD遇到非法指令的時候還

2、是會彈出一個錯誤框,Patched4這個OD修復(fù)了這個BUG。大家將Patch4這個OD跟原版OD放到同一個文件夾下面,下面我們分析PELock的時候需要用到。好,再來給大家解釋一遍(PS:老外比較細(xì)心,也比較啰嗦,嘿嘿)。原版OD處理非法指令的時候有個BUG,勾選上調(diào)試選項(xiàng)中忽略非法指令異常,加載UnPackMe_PELock1.06,接著運(yùn)行起來。我們可以看到彈出了一個錯誤框,但是我們用Patch4這個OD來加載UnPackMe_PELock1.06的話,就可以完美運(yùn)行。我們來看看日志信息。我們可以看到最后一次異常是一個非法指令異常,現(xiàn)在我們不勾選的忽略非法指令異常選項(xiàng)。這里我們?nèi)サ鬒nv

3、aild or privileged instruction這個選項(xiàng)的對勾,加載UnPackMe_PELock1.06,運(yùn)行起來。斷在了異常處,如果我們按Shift + F9也可以繼續(xù)運(yùn)行下去。也就是原版OD是就算你勾選了忽略非法指令異常這一項(xiàng),OD并沒有自動忽略。如果是僅僅有一個這類異常,我們按一下Shift + F9也沒什么。但是如果目標(biāo)程序會產(chǎn)生200或者300個這樣的異常,難道我們也手工去按Shift + F9不成(PS:連續(xù)按Shift + F9 200多次,那還不得瘋掉哇,哈哈)。我們再次勾選上Invaild or privileged instruction這個選項(xiàng),運(yùn)行起來,再

4、次彈出了錯誤框。下面我們來嘗試修復(fù)OD的這個BUG,再新開一個OD。選擇新的OD主菜單中的File-Attach。定位到彈出錯誤框的OD所在的進(jìn)程。定位到彈出錯誤框OD所在的進(jìn)程,單擊Attach(附加)。斷在了這里,我們運(yùn)行起來。接著我們來看一下區(qū)段列表窗口。現(xiàn)在我們可以看到OllyDbg的各個區(qū)段情況,接下來我們給MessageBoxA這個API函數(shù)設(shè)置一個斷點(diǎn)。由于我們單擊錯誤消息框上面的OK按鈕,就到達(dá)MessageBoxA函數(shù)的RET指令處,我們給該RET指令處也設(shè)置一個斷點(diǎn)。彈出錯誤消息框后,我們單擊Aceptar(OK)按鈕。就會斷在MessageBoxA這個API函數(shù)的返回RE

5、T指令處,我們單擊F7鍵單步。下面我們查看一下字符串列表,看看有沒有消息框提示的錯誤信息字符串。我們看看有沒有字符串里面含有bypass這個單詞。我們可以看到我們要找到字符串在這里,我們在這個字符串上面雙擊。我們可以看到這里有幾處JNZ可以跳過彈出錯誤消息框的代碼,這里我們將435260處的JE修改為JMP 43528D,保存到文件中。接下來我們看看Patched4這個OD該處的代碼是怎么樣的。這里我們可以看到435260處的條件跳轉(zhuǎn)被修改為無條件跳轉(zhuǎn),即修改為了JMP 43528D,這樣就能跳過填出錯誤消息框的代碼。這就是Patched4修復(fù)非法指令這個BUG的原理。大家可以自行給OD打補(bǔ)丁

6、也可以直接用Patched4 這個OD。知識點(diǎn)2就是要給大家演示如何編寫腳本,我們需要用到OllyScript0.92.dll這個插件,將其放到OD的插件目錄下。打開Patched4這個OD。我們可以看到主菜單中出現(xiàn)OllyScript的插件子菜單項(xiàng)。現(xiàn)在我們加載UnPackMe_PELock1.06,下面我們編寫一個簡單的腳本讓該殼無法檢測到我們設(shè)置的硬件斷點(diǎn)。關(guān)于這個插件的使用說明大家可以參考插件文件夾下面的readme.txt。這個腳本的思路很簡單:每次異常觸發(fā)后都會斷在KiUserExceptionDispatcher,接下來就會由操作系統(tǒng)去調(diào)用異常處理函數(shù),這個時候我們設(shè)置硬件斷點(diǎn)可

7、以被檢測到,所以這個腳本要做的就是當(dāng)前斷在KiUserExceptionDispatcher時,清除掉硬件斷點(diǎn),當(dāng)斷在下面的CALL ZwContinue時再將硬件斷點(diǎn)恢復(fù)。由于這是我們要編寫的第一個腳本,所以不會讓大家寫太難的。首先給KiUserExceptionDispatcher和ZwContinue分別設(shè)置斷點(diǎn)?,F(xiàn)在我們開始編寫腳本。一般來說腳本都有一個開始標(biāo)簽:beginning:設(shè)置這個標(biāo)簽可以讓我們方便的JMP beginning,接下來我們來設(shè)置硬件斷點(diǎn),舉個例子:bphws 12ffc4, “r”bphws <BreakPoint HardWare Set> -

8、該命令可以對指定地址設(shè)置硬件斷點(diǎn),這里是對12ffc4設(shè)置硬件斷點(diǎn), “r”表示讀取,”w”表示寫入,”x”表示執(zhí)行。beginning:bphws 12ffc4,“r”work:設(shè)置完硬件斷點(diǎn)以后我們再來添加一個work標(biāo)簽。beginning:bphws 12ffc4,“r”work:eob to_processrun這里的eob,<Execution On BreakPoint>-表示在下次中斷發(fā)生時,跳轉(zhuǎn)到指定標(biāo)簽處,這里該標(biāo)簽是to_process,即當(dāng)程序中斷下來時將跳轉(zhuǎn)到to_process標(biāo)簽處,接下來run命令表示運(yùn)行起來。這里就是關(guān)鍵的部分了,當(dāng)前OD中斷后,我

9、們就需要檢查是否斷在了KiUserExceptionDispatcher入口處,所以我們在to_process標(biāo)簽下面來進(jìn)行檢查。to_process:cmp eip,7C91EAECje to_clearcmp eip,7C91EB03je to_recoverjmp to_final我這里7C91EAEC是KiUserExceptionDispatcher的入口地址,當(dāng)斷在KiUserExceptionDispatcher入口處時,eip為7C91EAEC,所以跳轉(zhuǎn)到to_clear標(biāo)簽處清除硬件斷點(diǎn),接下來當(dāng)斷在CALL ZwContinue指令處時,就跳轉(zhuǎn)到to_recover標(biāo)簽處恢

10、復(fù)硬件斷點(diǎn)。清除內(nèi)存斷點(diǎn)如下:to_clear:bphwc 12ffc4jmp work當(dāng)前跳轉(zhuǎn)到to_clear標(biāo)簽以后,通過bphwc <BreakPoint HardWare Clear>命令刪除12ffc4處的硬件斷點(diǎn),接著跳轉(zhuǎn)到work標(biāo)簽處繼續(xù)運(yùn)行程序。另外一個to_recover標(biāo)簽處是當(dāng)斷在CALL ZwContinue處時重新設(shè)置硬件斷點(diǎn)的。to_recover:jmp beginning接下來就是直接跳轉(zhuǎn)到開頭beginning標(biāo)簽處了,也就是將重新設(shè)置硬件斷點(diǎn)。接下來就是程序斷在硬件斷點(diǎn)處時,也就是jmp final。to_process:cmp eip,7C

11、91EAECje to_clearcmp eip,7C91EB03je to_recoverjmp final最后是:final:MSGYN “是否繼續(xù)?”cmp $RESULT,1je beginningret這里的MSGYN <Message Yes or No>命令會將指定消息,顯示到一個對話框中,這個對話框上面有”是”,”否”按鈕。如果點(diǎn)擊”是”,保留變量$RESULT等于1,否則保留變量$RESULT等于0。如果我們想繼續(xù)的話,就單擊”是”,這樣就會跳轉(zhuǎn)beginning標(biāo)簽處繼續(xù)執(zhí)行腳本,如果我們不想繼續(xù),就單擊”否”,這樣就會直接ret,腳本就執(zhí)行完畢了,OD就會停在

12、硬件斷點(diǎn)處。整個腳本就是這樣的:beginning:bphws 12ffc4,“r”work:eob to_processrunto_process:cmp eip,7C91EAECje to_clearcmp eip,7C91EB03je to_recoverjmp to_finalto_clear:bphwc 12ffc4jmp workto_recover:jmp beginningfinal:MSGYN “是否繼續(xù)?”cmp $RESULT,1je beginningret該腳本的整個執(zhí)行流程,大家可以參考下圖中的解釋,這里我就不再贅述了。我們將上面的腳本保存到一個txt文本中,接著用OD加載UnPackMe_PELock1.06,然后給KiUserExceptionDisp

溫馨提示

  • 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

提交評論