IDA復合條件斷點

2021-08-11 07:45:49 字數 1587 閱讀 6563

---------------------------------------------

author:hjjdebug

date: 2023年 11月 26日 星期日 07:55:50 cst

---------------------------------------------

ida復合條件斷點

所謂條件斷點就是滿足一定條件才會中斷的斷點.

ida的條件斷點或者說偵錯程式的條件斷點新增之後會顯著影響**執行效率,尤其是當

條件斷點加在迴圈之內時, 因為每次執行到斷點時,都要切換到偵錯程式狀態判斷條件是否成立

才能確定是否該中斷, 這個切換動作要執行成千上萬條指令,意味著在這個區域性,慢了成千上萬倍.

本人親歷,執行幾秒的程式,加了條件斷點後,竟執行了30分鐘才到達.

那如何解決這個問題,就是要用復合條件斷點進行剪枝,才能達到秒殺的效果.就是說在大部分的迴圈中

都不設條件斷點,只有在接近目標時,才設條件斷點,達到節省時間的目的.

說得這麼玄乎,那怎麼剪枝?,怎麼知道要接近目標? 還是看看例項吧.

背景:

在掃瞄病毒時,要掃瞄成千上萬個檔案,可能那個可疑的檔案在後部,我們不關心前面的那些檔案

只關心這個後部的檔案.

假定在乙個迴圈中,滿足r2=0x19c(迴圈最大值,病毒庫項個數), r3=0x8c(迴圈次數)掃到了可疑檔案

你只需設定 break if (r2==0x19c && r3==0x8c) 即可.

你可能要說了,這麼個小迴圈,哪在計算機話下!,

是的,這個小迴圈確實不大,但是前面還有r2=0x2a9c, r2=0x3e3, r2=...好多個迴圈沒有列呢.這些值對應

著不同的病毒庫. 現在需要你只關心r2=0x19c 時的庫就好了!

問題是還不只是這個條件,這樣斷下來,也不是可疑檔案,而是只有當呼叫過myscanelf函式後,再這樣下斷點才

管用,否則不是關鍵點. 因為執行的流程雖然是呼叫realscan, 但只有realscan呼叫到myscanelf, myscanelf

又遞迴呼叫到realscan後,才掃到了這個可疑檔案,所以,要把前面的迴圈統統剪枝.

需求說清了,下面看看實現.

當然了,我們需要用到ida的指令碼.

1. 設定myscanelf 斷點, 中斷後,再設定fscandexsym 函式斷點. (中斷1次)

2. fscandexsym 中斷後, 查是否是payware庫,是則設定loop斷點.此時r2必然是0x19c了(中斷幾次)

3. loop中斷後檢查,只需檢查0x8c次(中斷0x8c此)

如此分而治之,通過大量剪枝,就可以秒殺到斷點了!

不過實際上事情並不像描述的這麼簡單,由於ida的bug, 你還會遇到其它問題, 例如loop中斷雖斷下來了,

但系統仍然向前跑, 破壞了你的除錯環境, 這或許可以結合暫停按鈕,再單步追蹤等輔助解決. 現實和理想還是有點距離!

通過此例說明,縱使還有更複雜的觸發條件,借助ida指令碼,來完成條件設定.

說了這麼多,其實核心是因為被呼叫的函式呈蘑菇雲狀,所以不能直接在底層函式直接下斷點,而應該在上層先下斷點, 然後再

再下層下斷點, 實現二次斷點或接力斷點來有效中斷!

OD 條件斷點 條件記錄斷點

以下演示如何下條件斷點 在除錯過程中,經常希望斷點滿足一定條件時才中斷,這類斷點稱為條件斷點,在od的幫助文件有詳細的說明 1 按暫存器條件中斷 用od開啟conditional bp.exe,在0040147c,按shift f2設定條件斷點 輸入表示式eax 040000,這樣如果eax為040...

gdb 條件斷點

gdb 條件斷點 1.有時候,我們需要斷點在迴圈的某個條件處時,比如以下 include int main int argc,char argv return 0 2.開始編譯 cc g main.c將生成a.out 3.開始斷點 gdb a.out l l命令用於檢視 4.通過以上命令可以看到 m...

windbg條件斷點

條件斷點 condition breakpoint 的是指在上面3種基本斷點停下來後,執行一些自定義的判斷。在基本斷點命令後加上自定義除錯命令,可以讓偵錯程式在斷點觸發停下來後,執行偵錯程式命令。每個命令之間用分號分割。語法格式如 0 000 bpaddress j condition option...