电竞比分网-中国电竞赛事及体育赛事平台

分享

加解密入門基礎(chǔ)知識(shí)(二)

 真的吳語(yǔ) 2015-01-27
第三課 動(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)試器

 
OllyDBG工具下載  
點(diǎn)擊此處下載OD 

 

 
名詞解釋  
1.所謂領(lǐng)空,實(shí)際上是指:在某一時(shí)刻,CPU 的 CS:IP(EIP) 所指向的某一段代碼的所有者所在的區(qū)域。
 

 
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í)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多