【太多事情要做了,這部分難度又很大,先寫一下大體框架,到時候具體函數逆向分析過程給寫出來】
0. 直接創建被調試程序與附加調試程序有什麼區別嗎?
答:調用的函數不相同。
1. 調試程序如何與被調試程序建立連接的?
答:兩者連接思路很簡單,通過在內核層創建一個 DEBUG_OBJECT 對象來建立鏈接。
2. 調試器如何與 DEBUG_OBJECT 來建立鏈接?
答:通過調用一個 DbgUiConnectToDbg函數,在函數內首先調用 _ZwCreateDebugObject內核函數來創建一個DEBUG_OBJECT對象,並返回一個三環的句柄。
之後再將該句柄保存在調試器TEB(fs):F24h處。
3. 被調試程序如何
答:首先調試器獲取到其被調試程序的PID與DEBUG_OBJECT的三環句柄,其傳入到內核中,由NTDebugActiveProcess傳入到被調試進程的 _EPROCESS.DebugPort中。
這樣就實現了 DEBUG_OBJECT 與 被調試進程的聯繫。