目錄逆向開發經常有這個需求:攔截區域性資料。一般的做法是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起不到很大的作...