[系统安全] 二十三.逆向分析之OllyDbg动态调试复习及TraceMe案例分析
您可能之前看到過(guò)我寫的類似文章,為什么還要重復(fù)撰寫呢?只是想更好地幫助初學(xué)者了解病毒逆向分析和系統(tǒng)安全,更加成體系且不破壞之前的系列。因此,我重新開設(shè)了這個(gè)專欄,準(zhǔn)備系統(tǒng)整理和深入學(xué)習(xí)系統(tǒng)安全、逆向分析和惡意代碼檢測(cè),“系統(tǒng)安全”系列文章會(huì)更加聚焦,更加系統(tǒng),更加深入,也是作者的慢慢成長(zhǎng)史。換專業(yè)確實(shí)挺難的,逆向分析也是塊硬骨頭,但我也試試,看看自己未來(lái)四年究竟能將它學(xué)到什么程度,漫漫長(zhǎng)征路,偏向虎山行。享受過(guò)程,一起加油~
作者前文介紹了微軟證書漏洞CVE-2020-0601,并講解ECC算法、Windows驗(yàn)證機(jī)制,復(fù)現(xiàn)可執(zhí)行文件簽名證書的例子。這篇文章將詳細(xì)講解逆向分析OllyDbg動(dòng)態(tài)調(diào)試工具的基本用法,包括界面介紹、常用快捷鍵和TraceMe案例分析。 這些基礎(chǔ)性知識(shí)不僅和系統(tǒng)安全相關(guān),同樣與我們身邊常用的軟件、文檔、操作系統(tǒng)緊密聯(lián)系,希望這些知識(shí)對(duì)您有所幫助,更希望大家提高安全意識(shí),安全保障任重道遠(yuǎn)。本文參考了B站漏洞銀行、安全網(wǎng)站和參考文獻(xiàn)中的文章(詳見參考文獻(xiàn)),并結(jié)合自己的經(jīng)驗(yàn)和實(shí)踐進(jìn)行撰寫,在此感謝這些大佬們。
文章目錄
- 一.OllyDbg界面介紹和配置
- 二.常用快捷鍵
- 三.OllyDbg動(dòng)態(tài)爆破軟件演示
- 四.總結(jié)
從2019年7月開始,我來(lái)到了一個(gè)陌生的專業(yè)——網(wǎng)絡(luò)空間安全。初入安全領(lǐng)域,是非常痛苦和難受的,要學(xué)的東西太多、涉及面太廣,但好在自己通過(guò)分享100篇“網(wǎng)絡(luò)安全自學(xué)”系列文章,艱難前行著。感恩這一年相識(shí)、相知、相趣的安全大佬和朋友們,如果寫得不好或不足之處,還請(qǐng)大家海涵!
接下來(lái)我將開啟新的安全系列,叫“系統(tǒng)安全”,也是免費(fèi)的100篇文章,作者將更加深入的去研究惡意樣本分析、逆向分析、內(nèi)網(wǎng)滲透、網(wǎng)絡(luò)攻防實(shí)戰(zhàn)等,也將通過(guò)在線筆記和實(shí)踐操作的形式分享與博友們學(xué)習(xí),希望能與您一起進(jìn)步,加油~
- 推薦前文:網(wǎng)絡(luò)安全自學(xué)篇系列-100篇
作者的github資源:
- 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
- 網(wǎng)絡(luò)安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study
前文分析:
- [系統(tǒng)安全] 一.什么是逆向分析、逆向分析基礎(chǔ)及經(jīng)典掃雷游戲逆向
- [系統(tǒng)安全] 二.如何學(xué)好逆向分析及呂布傳游戲逆向案例
- [系統(tǒng)安全] 三.IDA Pro反匯編工具初識(shí)及逆向工程解密實(shí)戰(zhàn)
- [系統(tǒng)安全] 四.OllyDbg動(dòng)態(tài)分析工具基礎(chǔ)用法及Crakeme逆向
- [系統(tǒng)安全] 五.OllyDbg和Cheat Engine工具逆向分析植物大戰(zhàn)僵尸游戲
- [系統(tǒng)安全] 六.逆向分析之條件語(yǔ)句和循環(huán)語(yǔ)句源碼還原及流程控制
- [系統(tǒng)安全] 七.逆向分析之PE病毒原理、C++實(shí)現(xiàn)文件加解密及OllyDbg逆向
- [系統(tǒng)安全] 八.Windows漏洞利用之CVE-2019-0708復(fù)現(xiàn)及藍(lán)屏攻擊
- [系統(tǒng)安全] 九.Windows漏洞利用之MS08-067遠(yuǎn)程代碼執(zhí)行漏洞復(fù)現(xiàn)及深度提權(quán)
- [系統(tǒng)安全] 十.Windows漏洞利用之SMBv3服務(wù)遠(yuǎn)程代碼執(zhí)行漏洞(CVE-2020-0796)復(fù)現(xiàn)
- [系統(tǒng)安全] 十一.那些年的熊貓燒香及PE病毒行為機(jī)理分析
- [系統(tǒng)安全] 十二.熊貓燒香病毒IDA和OD逆向分析(上)病毒初始化
- [系統(tǒng)安全] 十三.熊貓燒香病毒IDA和OD逆向分析(中)病毒釋放機(jī)理
- [系統(tǒng)安全] 十四.熊貓燒香病毒IDA和OD逆向分析–病毒釋放過(guò)程(下)
- [系統(tǒng)安全] 十五.Chrome瀏覽器保留密碼功能滲透解析、藍(lán)屏漏洞及某音樂(lè)軟件漏洞復(fù)現(xiàn)
- [系統(tǒng)安全] 十六.PE文件逆向基礎(chǔ)知識(shí)(PE解析、PE編輯工具和PE修改)
- [系統(tǒng)安全] 十七.Windows PE病毒概念、分類及感染方式詳解
- [系統(tǒng)安全] 十八.病毒攻防機(jī)理及WinRAR惡意劫持漏洞(腳本病毒、自啟動(dòng)、定時(shí)關(guān)機(jī)、藍(lán)屏攻擊)
- [系統(tǒng)安全] 十九.宏病毒之入門基礎(chǔ)、防御措施、自發(fā)郵件及APT28宏樣本分析
- [系統(tǒng)安全] 二十.PE數(shù)字簽名之(上)什么是數(shù)字簽名及Signtool簽名工具詳解
- [系統(tǒng)安全] 二十一.PE數(shù)字簽名之(中)Signcode、PEView、010Editor、Asn1View工具用法
- [系統(tǒng)安全] 二十二.PE數(shù)字簽名之(下)微軟證書漏洞CVE-2020-0601復(fù)現(xiàn)及Windows驗(yàn)證機(jī)制分析
- [系統(tǒng)安全] 二十三.逆向分析之OllyDbg動(dòng)態(tài)調(diào)試復(fù)習(xí)及TraceMe案例分析
聲明:本人堅(jiān)決反對(duì)利用教學(xué)方法進(jìn)行犯罪的行為,一切犯罪行為必將受到嚴(yán)懲,綠色網(wǎng)絡(luò)需要我們共同維護(hù),更推薦大家了解它們背后的原理,更好地進(jìn)行防護(hù)。該樣本不會(huì)分享給大家,分析工具會(huì)分享。(參考文獻(xiàn)見后)
一.OllyDbg界面介紹和配置
OllyDbg是一個(gè)動(dòng)態(tài)追蹤工具,將IDA與SoftICE結(jié)合起來(lái)的思想,Ring 3級(jí)調(diào)試器,非常容易上手,是當(dāng)今最為流行的調(diào)試解密工具之一。它還支持插件擴(kuò)展功能,是目前最強(qiáng)大的調(diào)試工具之一。
OD和IDA可以說(shuō)是逆向分析的“倚天”和“屠龍”,一個(gè)動(dòng)態(tài)分析,一個(gè)靜態(tài)分析。
該系列文章參考B站漏洞“游戲逆向交流”大佬的視頻,主要內(nèi)容包括:
- OllyDbg界面介紹和配置
- 常用快捷鍵
- OllyDbg基本操作
- 常用斷點(diǎn)INT 3斷點(diǎn)原理解析
- INT 3斷點(diǎn)的反調(diào)試與反反調(diào)試
- 常用斷點(diǎn)之硬件斷點(diǎn)原理解析
- 常用斷點(diǎn)之內(nèi)存斷點(diǎn)原理解析
- 常用斷點(diǎn)之消息斷點(diǎn)原理解析
- 常用斷點(diǎn)之條件斷點(diǎn)原理解析
- 內(nèi)存訪問(wèn)一次性斷點(diǎn)和條件記錄斷點(diǎn)
- 插件
- Run trace 和Hit trace
- 調(diào)試符號(hào)
- OllyDbg的常見問(wèn)題
推薦大家學(xué)習(xí),參考網(wǎng)址:https://www.bilibili.com/video/BV1cE411f7sE
OllyDbg是逆向分析常用的調(diào)試工具,打開主界面如下圖所示,包括反匯編窗口、寄存器窗口、信息窗口、數(shù)據(jù)窗口、堆棧窗口。
- 常見動(dòng)態(tài)調(diào)試工具:OllyDbg、WinDbg、x64Dbg
- 常用靜態(tài)調(diào)試工具:IDA
如果我們打開的界面很亂像下圖一樣,可以點(diǎn)擊頂部快捷鍵C,然后主窗口最大化即可優(yōu)化布局。
接著隨便打開一個(gè)EXE程序,顯示如下圖所示:
下面先講解各個(gè)窗口的含義:
- 反匯編窗口: 顯示被調(diào)試程序的反匯編代碼,包括地址、HEX數(shù)據(jù)、反匯編、注釋
- 寄存器窗口: 顯示當(dāng)前所選線程的CPU寄存器內(nèi)容,點(diǎn)擊標(biāo)簽可切換顯示寄存器的方式
- 信息窗口: 顯示反匯編窗口中選中的第一個(gè)命令的參數(shù)及跳轉(zhuǎn)目標(biāo)地址、字符等
- 數(shù)據(jù)窗口: 顯示內(nèi)存或文件的內(nèi)容,右鍵菜單可切換顯示方式
- 堆棧窗口: 顯示當(dāng)前線程的堆棧,記錄傳遞的參數(shù)或局部變量
- 子窗口的快捷方式
接著補(bǔ)充界面選項(xiàng)知識(shí)點(diǎn),點(diǎn)擊 “選項(xiàng)” -> “界面”,設(shè)置UDD路徑和插件路徑。
UDD路徑用于保存我們調(diào)試的信息。
插件路徑包含了各種插件,并且可以直接使用。
如果你想選中一個(gè)EXE文件,右鍵直接能夠用OllyDbg打開,怎么設(shè)置呢?
點(diǎn)擊 “選項(xiàng)” -> “添加到瀏覽器”,添加OllyDbg到系統(tǒng)資源管理器菜單。
如果我們每次運(yùn)行OD都提示管理員權(quán)限運(yùn)行,則可以進(jìn)行快捷鍵簡(jiǎn)單的設(shè)置。
設(shè)置方式如下:兼容性中選擇“以管理員身份運(yùn)行此程序”。
二.常用快捷鍵
下面簡(jiǎn)單講解常用的快捷鍵調(diào)試方式。
F2:設(shè)置斷點(diǎn)
設(shè)置斷點(diǎn),只要在光標(biāo)定位的位置按下F2鍵即可,再按一次F2鍵會(huì)刪除斷點(diǎn)。如下圖所示的紅色位置,程序運(yùn)行到此處會(huì)暫停。
F9:運(yùn)行
按下F9鍵運(yùn)行程序,如果沒(méi)有設(shè)置相應(yīng)的斷點(diǎn),被調(diào)試的程序直接開始運(yùn)行。
F8:單步步過(guò)
單步步過(guò),每按一次這個(gè)按鍵,將執(zhí)行反匯編窗口中的一條指令,遇到CALL等子程序不進(jìn)入其代碼。
F7:單步步入
單步步入,功能通單步步過(guò)(F8)類似,區(qū)別是遇到CALL等子程序時(shí)會(huì)進(jìn)入其中,進(jìn)入后首先停留在子程序的第一條指令上。如下圖進(jìn)入CALL子程序。
CALL表示進(jìn)入函數(shù),RETN表示返回。
F4:運(yùn)行到選定位置
運(yùn)行到選定位置,作用就是直接運(yùn)行到光標(biāo)所在位置處暫停。比如光標(biāo)在0x00401034位置,我們接著從0x00401027運(yùn)行,這會(huì)直接跳轉(zhuǎn)到光標(biāo)處。當(dāng)我們調(diào)試過(guò)程中遇到循環(huán),可以調(diào)至光標(biāo)跳過(guò)循環(huán)。
CTRL+F9:執(zhí)行到返回
執(zhí)行到返回,按下此鍵會(huì)執(zhí)行到一個(gè)返回指令時(shí)暫停,常用于從系統(tǒng)領(lǐng)空返回到我們調(diào)試的程序領(lǐng)空。在調(diào)試程序時(shí),按下CTRL+F9會(huì)一直運(yùn)行程序,直到一個(gè)RETURN返回,比如我們進(jìn)入下圖所示的子程序,會(huì)運(yùn)行至RETN 10。
再在RETN 10位置按下F8,則會(huì)返回如下圖所示的位置,執(zhí)行完CALL函數(shù)進(jìn)入下一句。
CTRL+F2:重新開始
當(dāng)程序想重新調(diào)試時(shí),按下CTRL+F2即可。
ALT+F9:執(zhí)行到用戶代碼
執(zhí)行到用戶代碼,從系統(tǒng)領(lǐng)空快速返回我們調(diào)試的程序領(lǐng)空。
三.OllyDbg動(dòng)態(tài)爆破軟件演示
下面以《加密與解密》的“TraceMe.exe”程序?yàn)槔3绦蛳螺d地址:
- https://github.com/eastmountyxz/Reverse-Analysis-Case
當(dāng)我們輸入錯(cuò)誤的用戶名和序列號(hào),點(diǎn)擊“Check”按鈕會(huì)顯示輸入錯(cuò)誤。
接下來(lái)我們需要用OD爆破,該程序的基本流程如下圖所示,只有輸入正確的用戶名和序列號(hào)才能顯示正確對(duì)話框。
接著通過(guò)OD打開該程序,它會(huì)自動(dòng)定位到模塊入口點(diǎn)0x004013A0位置。作者github資源提供了各種OD版本供讀者使用。
第一步,首先按下F9程序就會(huì)運(yùn)行起來(lái),并且彈出對(duì)話框
第二步,我們需要知道輸入對(duì)話框輸入值的函數(shù)都有哪些
點(diǎn)擊 “API斷點(diǎn)設(shè)置工具” -> “常用斷點(diǎn)設(shè)置”。
勾選獲取對(duì)話框的輸入值的兩個(gè)函數(shù)“GetWindowTextA”和“GetDlgItemTextA”,這意味著給這兩個(gè)函數(shù)下斷點(diǎn),當(dāng)程序運(yùn)行到某個(gè)函數(shù)即會(huì)停止。如果讀者不確定對(duì)應(yīng)的函數(shù),可以勾選所有的函數(shù)。
第三步,輸入用戶名和序列號(hào)并點(diǎn)擊“Check”按鈕
此時(shí)程序進(jìn)入0x75CA4390位置,并且顯示調(diào)用GetDlgItemTextA函數(shù)。
我們先按下F2將斷點(diǎn)去掉,再按下F9執(zhí)行代碼,可以看到“序列號(hào)錯(cuò)誤,再來(lái)一次!”的彈框。從而證明我們剛才的斷點(diǎn)是有效果的。
GetDlgItemTextA的四個(gè)參數(shù):對(duì)話框句柄,控件標(biāo)識(shí)(ID號(hào)),緩沖區(qū)指針,緩沖區(qū)最大字符數(shù),參考Win32.API手冊(cè)。
接著我們?cè)俟催x“GetDlgItemTextA”函數(shù),再點(diǎn)擊“Check”按鈕,它會(huì)繼續(xù)定位到0x75CA4390位置,如下圖所示。
第四步,接著按下Ctrl+F9執(zhí)行到返回位置。
此時(shí)顯示地址0x75CA43C1。
第五步,再按下F8鍵執(zhí)行返回
此時(shí)我們看到了GetDlgItemTexeA函數(shù)執(zhí)行的位置,它會(huì)返回調(diào)用函數(shù)的下一行代碼,注意是下一行。我們程序是有兩個(gè)對(duì)話框值,所以會(huì)有兩個(gè)GetDlgItemTexeA函數(shù)的調(diào)用。
接著我們繼續(xù)按F8往下走,這兩個(gè)值獲取完成,接下來(lái)應(yīng)該會(huì)是計(jì)算序列的過(guò)程,再進(jìn)行判斷是否正確。
繼續(xù)往下走,來(lái)到0x004011E4位置,我們可以看到右上角EDX和EAX的值就是我們輸入的“eastmount”和“123456”。同時(shí),右下角顯示兩個(gè)值都已經(jīng)壓到棧里面了。
- EAX:123456
- EDX:eastmount
第六步,訪問(wèn)TraceMe.00401340函數(shù)
我們可以猜測(cè)調(diào)用的“call TraceMe.00401340”函數(shù)是做判斷,并添加如下注釋。但也可能不是,我們?cè)谶M(jìn)行軟件逆向分析或爆破時(shí),通常需要依靠邏輯能力和編程能力來(lái)推測(cè)。
按下F7進(jìn)入該程序,位置0x00401340。
再按F8執(zhí)行,可以發(fā)現(xiàn)這里存在一個(gè)循環(huán),判斷輸入的值是否與它原始的值一致。
循環(huán)完之后,繼續(xù)執(zhí)行可以看到一些序列號(hào)“123456”的判斷信息。
最終它會(huì)返回一個(gè)值放到EAX中,該值等于0,然后繼續(xù)執(zhí)行返回該值。
返回值就是0,然后繼續(xù)執(zhí)行。
第七步,跳轉(zhuǎn)函數(shù)分析
如果這個(gè)函數(shù)就是判斷函數(shù)的話,那么下面這個(gè)跳轉(zhuǎn)很可能就是關(guān)鍵跳轉(zhuǎn)。就是我們需要修改的跳轉(zhuǎn),利用其來(lái)進(jìn)行爆破。位置:0x004011F5
增加斷點(diǎn),接著按F8繼續(xù)運(yùn)行。
發(fā)現(xiàn)其直接跳轉(zhuǎn)至0x0040122E,然后提示“序列號(hào)錯(cuò)誤,再來(lái)一次!”。
再按下F9運(yùn)行,后面果然彈出錯(cuò)誤對(duì)話框,從而確定上面為關(guān)鍵跳轉(zhuǎn)。
第八步,按下Ctrl+F2重新運(yùn)行程序
接著按F9執(zhí)行程序,在彈出的對(duì)話框中輸入內(nèi)容,點(diǎn)擊“check”。
繼續(xù)按下F9運(yùn)行程序跳轉(zhuǎn)到我們剛剛下斷點(diǎn)的“關(guān)鍵跳轉(zhuǎn)”位置。
關(guān)鍵步驟:修改匯編代碼,JE是實(shí)現(xiàn)跳轉(zhuǎn),修改為JNZ不跳轉(zhuǎn)。
繼續(xù)按F8執(zhí)行,或者直接按下F9,可以提示“恭喜你,成功”的對(duì)話框。這就是爆破的基本流程。
第九步,保存爆破軟件
選擇修改的幾行內(nèi)容,然后右鍵鼠標(biāo),點(diǎn)擊“復(fù)制到可執(zhí)行文件”。
選擇“TraceMe.exe”文件右鍵保存文件,如“TraceMe_PO2.exe”。
保存成功后,隨便輸入用戶名和序列號(hào),都提示成功!
同時(shí),該程序輸入長(zhǎng)度還有一個(gè)判斷,我們也可以嘗試進(jìn)行爆破。
但其原理是什么呢?后續(xù)的文章我們會(huì)繼續(xù)介紹。
四.總結(jié)
寫到這里,這篇文章就介紹完畢,希望您喜歡~
- OllyDbg界面介紹和配置
- 常用快捷鍵
- OllyDbg動(dòng)態(tài)爆破軟件演示
這篇文章中如果存在一些不足,還請(qǐng)海涵。作者作為網(wǎng)絡(luò)安全初學(xué)者的慢慢成長(zhǎng)路吧!希望未來(lái)能更透徹撰寫相關(guān)文章。同時(shí)非常感謝參考文獻(xiàn)中的安全大佬們的文章分享,感謝師傅、師兄師弟、師姐師妹們的教導(dǎo),深知自己很菜,得努力前行。
歡迎大家討論,是否覺(jué)得這系列文章幫助到您!任何建議都可以評(píng)論告知讀者,共勉。
- 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
- 網(wǎng)絡(luò)安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study
2020年8月18新開的“娜璋AI安全之家”,主要圍繞Python大數(shù)據(jù)分析、網(wǎng)絡(luò)空間安全、人工智能、Web滲透及攻防技術(shù)進(jìn)行講解,同時(shí)分享CCF、SCI、南核北核論文的算法實(shí)現(xiàn)。娜璋之家會(huì)更加系統(tǒng),并重構(gòu)作者的所有文章,從零講解Python和安全,寫了近十年文章,真心想把自己所學(xué)所感所做分享出來(lái),還請(qǐng)各位多多指教,真誠(chéng)邀請(qǐng)您的關(guān)注!謝謝。
(By:Eastmount 2021-02-22 中午12點(diǎn)寫于武漢 http://blog.csdn.net/eastmount/ )
參考資料:
[1] 動(dòng)態(tài)調(diào)試工具之OllyDbg(OD)教程 - B站yxfzedu
[2] [逆向筆記](méi) OD工具使用-逆向TraceMe.exe- 17bdw隨手筆記
[3]《加密與解密》段鋼等著
[4]《OllyDBG入門教程》看雪學(xué)院 - CCDebuger
[5] 160個(gè)Crackme006 - 鬼手56大佬
總結(jié)
以上是生活随笔為你收集整理的[系统安全] 二十三.逆向分析之OllyDbg动态调试复习及TraceMe案例分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [Python图像处理] 三十七.Ope
- 下一篇: [系统安全] 二十四.逆向分析之Olly