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