|
第三課 動(dòng)態(tài)分析技術(shù) 所謂動(dòng)態(tài)分析是利用調(diào)試器,如OllyDBG一步一步地單步執(zhí)行軟件。常見的調(diào)試器有SoftICE,OllyDBG(簡(jiǎn)稱OD)等。SoftICE是一款經(jīng)典的調(diào)試工具,運(yùn)行在Ring0級(jí),可以調(diào)試驅(qū)動(dòng)。但平時(shí)調(diào)試的程序都是Ring3級(jí),因此推薦大家用OllyDBG,這款工具上手容易,功能十分強(qiáng)大,現(xiàn)在論壇上的文章基本都是用OllyDBG來(lái)講解的。 3.1 OllyDBG調(diào)試器 3.2 Olldbg常見問(wèn)題 Q: OD中如何運(yùn)行到光標(biāo)所在處? A: 將光標(biāo)移到目標(biāo)位置,按F4. Q: 如何用OD修改可執(zhí)行程序? A:直接在反匯編代碼區(qū)更改,這時(shí)可以使用匯編代碼更改,然后選中修改后的匯編代碼,右擊-->復(fù)制到可執(zhí)行文件-->保存文件. Q:OD中的代碼亂碼,如: 004365E0 >db 68 ; CHAR 'h' 004365E1 >db A4 004365E2 >db 7A ; CHAR 'z' 004365E3 >db E5 004365E4 >db B8 004365E5 >db E8 004365E6 >db BB A:OD右鍵,"分析/從模板中刪除分析",如不行,按Ctrl+A重新分析 Q:OD為什么刪除了斷點(diǎn),重新加載的時(shí)候,這些斷點(diǎn)都會(huì)重新出現(xiàn) A:設(shè)置ollydbg.ini,將配制文件里改成如下:Backup UDD files=1 (by kanxue) Q:如何還原到OD到分析前的狀態(tài)? A:右鍵 分析/從模塊中刪除掃描 Q:什么是UDD? A:OllyDbg 把所有程序或模塊相關(guān)的信息保存至單獨(dú)的文件中,并在模塊重新加載時(shí)繼續(xù)使用。這些信息包括了標(biāo)簽、注釋、斷點(diǎn)、監(jiān)視、分析數(shù)據(jù)、條件等等 Q:OD的數(shù)據(jù)窗口顯示一個(gè)下劃線,是什么意思? A:重定位加下劃線[Underline fixups],幾乎所有的DLL和一部分程序都包含重定位,這樣就可以在內(nèi)存中的不同基地址加載模塊了。當(dāng)該項(xiàng)開啟時(shí),CPU反匯編窗口或CPU數(shù)據(jù)窗口中的重定位地址都將添加下劃線。(xing_xsz) Q:如果已經(jīng)知道某一CALL的具體作用,能否把后面所有相同的CALL都改成函數(shù)名形式? A:比如 CALL 110000 此中已經(jīng)知道110000是一個(gè)核心計(jì)算 則如下操作,讓光標(biāo)停在CALL 110000 這個(gè)語(yǔ)句上,按回車鍵 會(huì)跳到110000的地址上去顯示,之后讓光標(biāo)停在110000上,按 shift 和; (分號(hào)) 其實(shí)就是完成一個(gè):(冒號(hào))的動(dòng)作,輸入 名稱,這回所有的調(diào)用110000處,都會(huì)顯示CALL 你剛才輸入的 名稱了.(nig回答) Q:用OD調(diào)試一些加殼程序,如Themida等,可能你會(huì)發(fā)現(xiàn)下斷后(包括硬件斷點(diǎn)),程序跑到斷點(diǎn)時(shí),OD會(huì)出現(xiàn)假死現(xiàn)像。 A:打開OD配置文件ollydbg.ini,你會(huì)發(fā)現(xiàn):Restore windows= 123346 //這個(gè)Restore windows可能會(huì)是一個(gè)很大的值 現(xiàn)在只需要將Restore windows=0,重新用OD調(diào)試程序,假死問(wèn)題就消失了。 (kanxue) Q:ollydbg中如何調(diào)用pdb文件? A: pdb文件是VC++調(diào)試編譯生成的文件。由編譯器直接生成。 pdb文件要配合源文件使用。不同的源文件pdb文件不同。 用OD裝入可執(zhí)行文件后,點(diǎn)擊CPU窗口中的注釋段可出現(xiàn)源碼。 不過(guò)不是所有的源碼都可以顯示的。VC++6.0以下都可以顯示。 還有一種不顯示的原因是缺少路徑。點(diǎn)擊OD主菜單的[查看]->[源文件] 如果[源碼]段出現(xiàn)(缺少)字樣的話,說(shuō)明此路徑的源碼是看不了的。設(shè)置正確的路徑就可以了。 (nantz回答) Q:運(yùn)行A.exe,其會(huì)調(diào)用B.exe,如果用OD再附加B.exe,OD會(huì)死掉 A: 1.OD菜單,設(shè)置OD為即時(shí)調(diào)試器; 2.將B.exe的入口改成CC,即INT 3指令,同時(shí)記下原指令 3.運(yùn)行A.exe,其調(diào)用B.exe,會(huì)導(dǎo)致異常,OD會(huì)自動(dòng)啟動(dòng)加載B.exe,此時(shí)你將INT 3指令恢復(fù)原指令。 4.到這步,你己可以任意調(diào)試B.exe了(kanxue) Q:用ollydbg調(diào)試的時(shí)候,斷住kernel32.dll系統(tǒng)函數(shù),然后”執(zhí)行到用戶代碼“,就可以回到被調(diào)程序的代碼。但有時(shí)候卻回不來(lái),不知道這又是為什么? A: 多半是殺毒軟件(如卡巴對(duì)LoadLibraryA)Hook API入口代碼進(jìn)入ring 0了,OllyDbg不能單步跟蹤,這種情況下只要看堆棧返回地址,在返回地址上下端點(diǎn),F(xiàn)9執(zhí)行就可以了。(cyclotron回答) Q:OD的“復(fù)制可執(zhí)行文件”后面沒(méi)有 “所有修改”的菜單 A:OD識(shí)別代碼段范圍失敗后, 沒(méi)有復(fù)制all modifications的選項(xiàng), 因?yàn)檫@個(gè)是復(fù)制代碼段內(nèi)的修改的。(曾半仙回答) Q:OD里的patch窗口怎么用? A:patch窗口用來(lái)保存你在調(diào)試的程序中修改過(guò)的代碼的。比如你前面調(diào)試了一個(gè)程序,在OD中把某處的JE改成了JMP,OD會(huì)在patch中記錄這個(gè)修改,你下次再重新載入程序時(shí),就能在OD的patch窗口中看到你原來(lái)改動(dòng)的代碼。按空格鍵就可以激活patch,就是在OD中還把原來(lái)位置的JE改成JMP。這個(gè)只是在OD中作更改,并沒(méi)有實(shí)際保存到文件,主要是比較方便在OD中修改程序時(shí)測(cè)試。(CCDebuger回答) 3.3 Olldbg腳本教學(xué) 這部分有點(diǎn)難度,新手可以跳過(guò),等水平提高后回頭再學(xué)習(xí)。 |
|
|
來(lái)自: 真的吳語(yǔ) > 《匯編相關(guān)》