斷點攔截區域性資料

2021-10-19 04:07:36 字數 1310 閱讀 7691

逆向開發經常有這個需求:攔截區域性資料。一般的做法是hook,通過修改**的流程來獲得資料。還有一種辦法是下斷點除錯。這裡聊聊怎樣通過下斷點來攔截區域性資料。

下斷點攔截資料,原理就是對目標程序進行下斷點除錯。

設定斷點的原理就是在某個位址寫入0xcc。對某個位址設定斷點之後,當被除錯的目標程序執行到這個位址,就會報錯丟擲異常給我們的除錯程序。我們的除錯程序就可以拿到當前的環境資料。

拿到資料之後,就要讓目標程序繼續正常執行了,這時候是先把0xcc恢復成原本的內容;然後eip減一,讓當前的指令重新正常執行;

但這個時候斷點已經恢復,想重複攔截資料的話就需要重新設定斷點:設定單步標誌,當前的指令重新正常執行之後,觸發單步異常,這個時候再重新下斷點就可以了。

// 被除錯的程序id

static dword g_processid = 0;

// 將程序改為被除錯狀態

debugactiveprocess(g_processid);

// 退出除錯的時候,不關閉被除錯程序

bool kret = debugsetprocesskillonexit(false);

// 儲存斷點位址和對應的記憶體內容,用於恢復斷點

static mapg_mbpaddress2content;

// 新增斷點,原理就是寫入0xcc,程式執行到這裡,會觸發異常

bool cbreakpointhelper::addbreakpoint(dword address)

// 刪除斷點,原理就是把原本的記憶體內容寫回去

bool cbreakpointhelper::delbreakpoint(dword address)

debug_event debugevent;

while (waitfordebugevent(&debugevent, infinite))

continuedebugevent(debugevent.dwprocessid, debugevent.dwthreadid, dbg_continue);

}

void cbreakpointhelper::onexception(const debug_event* pevent) 

}void cbreakpointhelper::onbreakpoint(const debug_event* pevent)

void cbreakpointhelper::onsinglestep(const debug_event* pevent)

斷點攔截區域性資料

目錄逆向開發經常有這個需求 攔截區域性資料。一般的做法是hook,通過修改 的流程來獲得資料。還有一種辦法是下斷點除錯。這裡聊聊怎樣通過下斷點來攔截區域性資料。下斷點攔截資料,原理就是對目標程序進行下斷點除錯。設定斷點的原理就是在某個位址寫入0xcc。對某個位址設定斷點之後,當被除錯的目標程序執行到...

程式斷點與資料斷點

如果你做嵌入式開發,那你一定得對程式斷點 program breakpoint 和資料斷點 data breakpoint 有所了解。程式斷點你可能還聽說過,但資料斷點就有可能不是很了解了,更有可能不知道如何去用了!現在,就讓我們去了解所有型別的 斷點 吧!程式斷點就是指處理器指令斷點,通俗的說就是...

資料斷點除錯技巧

在軟體開發過程中,程式bug成為了不可避免的產物,而解決bug的主要途徑便是通過除錯,今天就在這裡大概講解下資料無故被修改,找不到修改的位置,如何來進行定位,怎麼來設定合適的斷點,軟體除錯過程中斷點是乙個非常重要的東西,斷點如果下的合適的話,會給除錯帶來很大的便利,否則可能對解決bug起不到很大的作...