2014年6月16日 星期一

Debug custom exception filter set by SetUnhandledExceptionFilter

SetUnhandledExceptionFilter 可以讓程式設定自定義的頂層 exception filter
用來處理程式中未被處理的 exception

之前想要 debug 這種 custom exception filter, 但用 debugger 開啟程式後卻怎麼也跑不到
查了後才發現這是 MS 的設計

MSDN 上的描述:

A pointer to a top-level exception filter function that will be called whenever the UnhandledExceptionFilter function gets control, and the process is not being debugged. A value of NULL for this parameter specifies default handling within UnhandledExceptionFilter

不過為什麼要有這麼奇怪的設計? 真的讓人猜不透
如果只有執行檔沒有 source code 時要怎麼 debug?

幸好網路上早有了怎麼 bypass 的方法,
UnhandledExceptionFilter 是呼叫 NtQueryInformationProcess 檢查程式是否正在被 debug 的
所以只要改掉 NtQueryInformationProcess 回傳的值就好了

Reference:
http://evilcodecave.wordpress.com/2008/07/24/setunhandledexception-filter-anti-debug-trick/

沒有留言:

張貼留言