日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

[系统安全] 二十四.逆向分析之OllyDbg调试INT3断点、反调试、硬件断点与内存断点

發布時間:2024/6/1 windows 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [系统安全] 二十四.逆向分析之OllyDbg调试INT3断点、反调试、硬件断点与内存断点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

您可能之前看到過我寫的類似文章,為什么還要重復撰寫呢?只是想更好地幫助初學者了解病毒逆向分析和系統安全,更加成體系且不破壞之前的系列。因此,我重新開設了這個專欄,準備系統整理和深入學習系統安全、逆向分析和惡意代碼檢測,“系統安全”系列文章會更加聚焦,更加系統,更加深入,也是作者的慢慢成長史。換專業確實挺難的,逆向分析也是塊硬骨頭,但我也試試,看看自己未來四年究竟能將它學到什么程度,漫漫長征路,偏向虎山行。享受過程,一起加油~

作者前文介紹了OllyDbg動態調試工具的基本用法,包括界面介紹、常用快捷鍵和TraceMe案例分析。這篇文章將講解逆向分析之OllyDbg動態調試工具,包括INT3斷點、反調試、硬件斷點和內存斷點。 這些基礎性知識不僅和系統安全相關,同樣與我們身邊常用的軟件、文檔、操作系統緊密聯系,希望這些知識對您有所幫助,更希望大家提高安全意識,安全保障任重道遠。本文參考了B站yxfzedu、安全網站和參考文獻中的文章,并結合自己的經驗和實踐進行撰寫,在此感謝這些大佬們。

文章目錄

  • 一.常用斷點之INT3斷點
    • 1.查看INT3斷點
    • 2.INT3原理
    • 3.INT3例子
  • 二.INT3斷點的反調試與反反調試
  • 三.常用斷點之硬件斷點原理解析
  • 四.常用斷點之內存斷點原理解析
  • 五.總結

作者的github資源:
軟件安全:https://github.com/eastmountyxz/Software-Security-Course
其他工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
逆向分析:https://github.com/eastmountyxz/Reverse-Analysis-Case

文章目錄

  • 一.常用斷點之INT3斷點
    • 1.查看INT3斷點
    • 2.INT3原理
    • 3.INT3例子
  • 二.INT3斷點的反調試與反反調試
  • 三.常用斷點之硬件斷點原理解析
  • 四.常用斷點之內存斷點原理解析
  • 五.總結

從2019年7月開始,我來到了一個陌生的專業——網絡空間安全。初入安全領域,是非常痛苦和難受的,要學的東西太多、涉及面太廣,但好在自己通過分享100篇“網絡安全自學”系列文章,艱難前行著。感恩這一年相識、相知、相趣的安全大佬和朋友們,如果寫得不好或不足之處,還請大家海涵!

接下來我將開啟新的安全系列,叫“系統安全”,也是免費的100篇文章,作者將更加深入的去研究惡意樣本分析、逆向分析、內網滲透、網絡攻防實戰等,也將通過在線筆記和實踐操作的形式分享與博友們學習,希望能與您一起進步,加油~

  • 推薦前文:網絡安全自學篇系列-100篇

作者的github資源:

  • 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
  • 網絡安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study

前文分析:

  • [系統安全] 一.什么是逆向分析、逆向分析基礎及經典掃雷游戲逆向
  • [系統安全] 二.如何學好逆向分析及呂布傳游戲逆向案例
  • [系統安全] 三.IDA Pro反匯編工具初識及逆向工程解密實戰
  • [系統安全] 四.OllyDbg動態分析工具基礎用法及Crakeme逆向
  • [系統安全] 五.OllyDbg和Cheat Engine工具逆向分析植物大戰僵尸游戲
  • [系統安全] 六.逆向分析之條件語句和循環語句源碼還原及流程控制
  • [系統安全] 七.逆向分析之PE病毒原理、C++實現文件加解密及OllyDbg逆向
  • [系統安全] 八.Windows漏洞利用之CVE-2019-0708復現及藍屏攻擊
  • [系統安全] 九.Windows漏洞利用之MS08-067遠程代碼執行漏洞復現及深度提權
  • [系統安全] 十.Windows漏洞利用之SMBv3服務遠程代碼執行漏洞(CVE-2020-0796)復現
  • [系統安全] 十一.那些年的熊貓燒香及PE病毒行為機理分析
  • [系統安全] 十二.熊貓燒香病毒IDA和OD逆向分析(上)病毒初始化
  • [系統安全] 十三.熊貓燒香病毒IDA和OD逆向分析(中)病毒釋放機理
  • [系統安全] 十四.熊貓燒香病毒IDA和OD逆向分析–病毒釋放過程(下)
  • [系統安全] 十五.Chrome瀏覽器保留密碼功能滲透解析、藍屏漏洞及某音樂軟件漏洞復現
  • [系統安全] 十六.PE文件逆向基礎知識(PE解析、PE編輯工具和PE修改)
  • [系統安全] 十七.Windows PE病毒概念、分類及感染方式詳解
  • [系統安全] 十八.病毒攻防機理及WinRAR惡意劫持漏洞(腳本病毒、自啟動、定時關機、藍屏攻擊)
  • [系統安全] 十九.宏病毒之入門基礎、防御措施、自發郵件及APT28宏樣本分析
  • [系統安全] 二十.PE數字簽名之(上)什么是數字簽名及Signtool簽名工具詳解
  • [系統安全] 二十一.PE數字簽名之(中)Signcode、PEView、010Editor、Asn1View工具用法
  • [系統安全] 二十二.PE數字簽名之(下)微軟證書漏洞CVE-2020-0601復現及Windows驗證機制分析
  • [系統安全] 二十三.逆向分析之OllyDbg動態調試復習及TraceMe案例分析
  • [系統安全] 二十四.逆向分析之OllyDbg調試INT3斷點、反調試、硬件斷點與內存斷點

聲明:本人堅決反對利用教學方法進行犯罪的行為,一切犯罪行為必將受到嚴懲,綠色網絡需要我們共同維護,更推薦大家了解它們背后的原理,更好地進行防護。該樣本不會分享給大家,分析工具會分享。(參考文獻見后)


一.常用斷點之INT3斷點

1.查看INT3斷點

INT3斷點對應OD中的F2斷點,有時也稱為CC斷點。為什么叫CC斷點呢?因為轉換成硬編碼之后就是CC,我們來查看CC斷點。

首先,我們用OD打開程序TraceMe.exe

打開之后會自動定位至004013A0,接著再下一行增加斷點(按F2),即INT3斷點。

但OD中并沒有顯示CC,我們打開Cheat Engine軟件。

然后在OD按下F9運行,彈出如下圖對話框。

接著在CE中選擇該程序TraceMe打開。

然后點擊“手動加入地址”,輸入地址“4013A1”。

接著選中數據并右鍵點擊“顯示未十六進制”。

由于采用小端存儲,故“FF6AECCC”是從右往左數的,如下圖所示。

如果我們選擇“4字節”點擊,然后選擇“Byte”,可以轉換成1個字節,因為CC就占用一個字節,我們主要是觀察它的。

為什么OD不顯示CC呢?
其實OD是為了不破壞源代碼的完整性,默認隱藏掉了。



2.INT3原理

接著我們分析INT3的原理。程序運行中,OD會檢查匯編指令有沒有INT3,即機器碼有沒有CC指令。如果存在,就會引發并捕獲這個異常,程序就中斷在此處,然后OD會刪除INT3,還原原來的代碼,接著繼續運行我們的程序。

執行流程的原理可歸納為:

  • 替換指令,換成INT3指令或CC硬編碼
  • OD檢測到INT3指令之后會引發一個異常并且捕獲它,這時候程序就會中斷
  • 刪除INT3指令,還原之前的指令

優點:

  • 可以無限的下INT3斷點

缺點:

  • 很容易被檢測

為什么要詳細介紹斷點的原理呢?
只有了解每個斷點的原理之后,以后做爆破才知道應該下什么樣的斷點合適。



3.INT3例子

接下來我們舉個INT3斷點的例子,使用OD打開TraceMe.exe程序,設置API斷點。

這里勾選“GetDlgItemTextA”函數。

接著輸入用戶名和序列號,按F9運行程序。

代碼會停在“761F4390”位置,我們接著用CE看看它是不是CC斷點。

接著以十六進制顯示,并只顯示一字節,發現的確是CC斷點。所以,CC斷點很容易被檢測出來。



二.INT3斷點的反調試與反反調試

我們編寫的軟件被爆破時,總會被下INT3斷點,我們能不能寫個程序防止別人下CC斷點,從而保護我們的程序呢?這個就叫反調試,而反反調試是繞過保護過程。

  • 反調試:保護這個程序
  • 反反調試:爆破這個程序

基礎知識:

  • FARPROC結構體
  • GetProcAddress函數
    它是一個計算機函數,功能是檢索指定的動態鏈接庫(DLL)中的輸出庫函數地址
  • LoadLibrary函數
    將指定的模塊加載到調用進程的地址空間中

接著我們用VS編寫代碼講解。LoadLibrary函數會返回一個句柄,然后調用GetProcAddress函數。GetProcAddress返回值包括:

  • 如果函數調用成功,返回值是DLL中的輸出函數地址
  • 如果函數調用失敗,返回值是NULL。得到進一步的錯誤信息,調用函數GetLastError
FARPROC GetProcAddress(HMODULE hModule, // DLL模塊句柄LPCSTR lpProcName // 函數名 );

第一步,我們打開VS編寫C++代碼。


下列代碼是獲取MessageBoxA函數的首地址,并判斷是否為CC斷點。

#include <iostream> #include <Windows.h> int main() {//獲取MessageBoxA的首地址FARPROC addr = GetProcAddress(LoadLibrary(L"user32.dll"), "MessageBoxA");//僅獲取首地址的第一個字節byte byteAddr = *(byte *)addr;//彈框::MessageBoxA(NULL, "內容", "標題", MB_OK);//判斷地址if(byteAddr == 0xCC) {//檢測到有人在調試我們的程序 退出程序printf("檢測到非法調試");}else {printf("代碼正常");}getchar(); }

在VS中輸入上述代碼。


第二步,運行前,需要簡單設置。

  • 設置Release


  • 設置屬性

  • 禁用Spectre緩解

  • 設置隨機基址否


第三步,接著運行代碼
運行結果如下圖所示:

顯示代碼正常執行。


第四步,使用OD調試程序
接下來我們嘗試調試這個EXE程序,用OD打開“ConsoleApplication1.exe”。

OD打開如下圖所示:

然后點擊“插件”->“API斷點設置工具”->“常用斷點設置”,給MessageBoxA下斷點。

運行OD,斷點位于761E0F40位置,對應user32.MessageBoxA。

繼續運行代碼。

查看調試信息,發現檢測到非法調試,也表明我們的判斷沒有問題。


第五步,刪除斷點對比執行結果
接著按下“b”刪除斷點,繼續運行代碼。

發現代碼正常運行。


這就是一個INT3斷點的反調試過程。
那么,怎么進行反反調試呢?我們又怎么下INT3斷點呢?

我們進入函數之后,可以將斷點下到中間或尾部即可。OD重新打開程序,并找到MessageBoxA的位置。

我們在中間位置下斷點,如下圖所示 761E0F45處。

接著F9運行程序,發現此時輸出“代碼正常”,該斷點并沒有被檢測出來,這就是所謂的反反調試。



三.常用斷點之硬件斷點原理解析

硬件斷點和調試寄存器有關,共有8個調試寄存器DR0~DR7。

  • DR0~DR3: 保存斷點地址。由于只有4個硬件斷點寄存器,所以同時最多只能設置4個硬件斷點
  • DR4~DR5: 系統保留
  • DR6: 狀態寄存器,顯示哪個硬件調試寄存器引發的斷點。如果是Dr0-Dr3的話,相應位會被置1。如果是Dr0引發的斷點,則Dr6的第0位被置1;如果是Dr1引發的斷點,則Dr6的第1位被置1,依次類推。因為硬件斷點同時只會觸發一個,所以Dr6的低4位最多只有一位被置1,所以在進入單步后,我們可以通過檢測Dr6的低4位是否有1的位,就可以判斷該單步是否是因為硬件斷點被斷下的。如果是硬件斷點被斷下的,進而可以通過Dr6的哪一位為1來判斷是由Dr0-Dr3中的哪個斷點斷下的。
  • DR7: 控制寄存器。設置相應控制位,用于控制斷點的方式

原理:

  • DR0~DR3保存我們斷點的地址
  • DR7寄存器設置相對應的控制位
  • 程序執行到該地址時,CPU會向OD發送異常信息
  • 程序會執行中斷操作,等待用戶操作

優點:

  • 速度快,比INT3快,因為INT3需要改匯編代碼,而硬件斷點使用寄存器
  • 不容易被檢測

缺點:

  • 最多只能下4個硬件斷點

接著我們繼續用OD分析TraceMe.exe為例,打開之后定位至004013A0位置。

選擇004013B6位置,右鍵“斷點”->“硬件執行”。

這樣就增加了一個硬件斷點,當CPU運行到該地址會發送一場信息中斷。

如何查看硬件斷點呢?點擊“調試”->“硬件斷點”可以查看剛打的硬件斷點。

接著按下F9運行程序,它會停在硬件斷點位置。



四.常用斷點之內存斷點原理解析

在介紹內存斷點之前,首先需要知道什么是內存屬性。內存屬性包括Read、Write、Execute的組合,即可讀、可寫、可執行。比如VirtualProtectEx函數,可以改變在特定進程中內存區域的保護屬性。

內存斷點就是根據內存屬性來實現的,比如想對一個地址打個內存訪問斷點,就是把這個地址的內存屬性改為不可訪問(不可讀寫執行),當程序運行到此處時,就會產生一個異常被OD捕獲,從而中斷程序。

原理:

  • 設置完內存斷點之后,它就是對這個地址賦予了不可讀、不可寫、不可執行的屬性
  • 程序運行到這里之后,會產生一個異常
  • OD捕獲這個異常,然后程序中斷,實現了一個內存斷點

優點:

  • 沒有改變匯編代碼,改變的是內存屬性
  • 游戲爆破時,如果常規斷點沒效果,可以嘗試內存斷點

接下來我們想在004013D0位置代碼增加內存斷點,對應代碼:

mov dword ptr ds:[0x405528],edx

該代碼就是一個寫操作,edx往ds:[0x405528]中寫入一個值。

選擇數據窗口中跟隨。

然后再數據窗口中選擇4個字節,右鍵“斷點”->“內存寫入”或“內存訪問”。

然后按下F9運行,此時斷到了此處。證明我們內存寫入斷點已經生效。


接下來補充內存讀寫斷點和硬件讀寫斷點的區別。

以剛才的代碼為例,我們先刪除剛才的內存斷點。

接著OD重新打開EXE程序,數據窗口跟隨到405528。

選中4字節,設置其為“硬件寫入”斷點。

運行代碼,此時硬件斷點斷在了下一行位置004013D6。

至此,內存斷點和硬件斷點介紹完畢!



五.總結

寫到這里,這篇文章就介紹完畢,希望您喜歡~

  • 常用斷點之INT3斷點
    1.查看INT3斷點
    2.INT3原理
    3.INT3例子
  • INT3斷點的反調試與反反調試
  • 常用斷點之硬件斷點原理解析
  • 常用斷點之內存斷點原理解析

這篇文章中如果存在一些不足,還請海涵。作者作為網絡安全初學者的慢慢成長路吧!希望未來能更透徹撰寫相關文章。同時非常感謝參考文獻中的安全大佬們的文章分享,感謝師傅、師兄師弟、師姐師妹們的教導,深知自己很菜,得努力前行。

歡迎大家討論,是否覺得這系列文章幫助到您!任何建議都可以評論告知讀者,共勉。

  • 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
  • 網絡安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study

2020年8月18新開的“娜璋AI安全之家”,主要圍繞Python大數據分析、網絡空間安全、人工智能、Web滲透及攻防技術進行講解,同時分享CCF、SCI、南核北核論文的算法實現。娜璋之家會更加系統,并重構作者的所有文章,從零講解Python和安全,寫了近十年文章,真心想把自己所學所感所做分享出來,還請各位多多指教,真誠邀請您的關注!謝謝。

(By:Eastmount 2021-02-4 夜于武漢 http://blog.csdn.net/eastmount/ )


參考文章:
[1] 動態調試工具之OllyDbg(OD)教程 - B站yxfzedu
[2] [逆向筆記] OD工具使用-逆向TraceMe.exe- 17bdw隨手筆記
[3]《加密與解密》段鋼等著
[4]《OllyDBG入門教程》看雪學院 - CCDebuger
[5] 160個Crackme006 - 鬼手56大佬
[6] [調試逆向] 硬件斷點的原理與實現 - 52PJ VicZ
[7] https://github.com/eastmountyxz/Reverse-Analysis-Case
[8] Cheat Engine 基本用法 - thomas_blog

總結

以上是生活随笔為你收集整理的[系统安全] 二十四.逆向分析之OllyDbg调试INT3断点、反调试、硬件断点与内存断点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。