【正文】
ParseObject)。 } else { // // NtOpenKey // status = CmpCallCallBacks(RegNtPreOpenKeyEx,(PREG_OPEN_KEY_INFORMATION)(amp。PreCreateInfo),TRUE,RegNtPostOpenKeyEx,ParseObject)。 } if( !NT_SUCCESS(status) ) { // 返回到哪里去了 ObpLookupObjectName return status。 } } BEGIN_LOCK_CHECKPOINT。 kcb = ((PCM_KEY_BODY)ParseObject)KeyControlBlock。 Callback 原理: 注冊的函數(shù)什么時間調(diào)用 N t O p e n K e yN t C r e a t e K e yO b O p e n O b j e c tB y N a m eO b p L o o k u p O b je c t N a m eP a r s e P r o c e d u ceP h a s e 1 I n i t i a l i z at i o nC m p C a l l C a l l B ac k sC m p P a r s e K e yC m p C r e a t e O b j ec t T y p e sC m I n i t S y s t e m 1N t x x x K e yh a n d l e 已 經(jīng) 生 成C m p C a l l C a l l B ac k s練習(xí) ? ? ? ? 4. file 的回調(diào)分析 注冊表的構(gòu)成 注冊表的構(gòu)成 注冊表的類型 注冊表與文件對應(yīng)關(guān)系 注冊表的調(diào)用關(guān)系 o p e n k e yN t O p e n K e yZ w O p e n k e yC m p P a r s e K e yr i n g 3 h o o k r i n g 3 層 i n l i n es s d t , i n l i n e , i a t ,e a t , f a s t e n t r yo b j e c t h o o k重定向方案 ? hook 需要 x64的 hook 引擎 Sandboxie hook + callback Win2022 x32 以下 hook Win2022 以上 callback 卡巴 AVAST 等其他的一切對象替換 重定向方案建議 1,2種 2種內(nèi)核的,要有大量的工作要做,兼容性不太好 。采取第一的簡單,但是容易被繞過 過濾策略 ? 一 當(dāng)有寫操作的時候過濾 ? 二 先查找 sandbox 里面的 ,如果沒有在查找外面的 ? 三 合并枚舉 ,去重 ,然后得到真實的個數(shù) ,注意枚舉的索引 ? 四 復(fù)制 key 的屬性 :時間 ,流 注意事項 注意事項 : ? ? ? ? ? ? 等跨進程調(diào)用 注意事項 ? 還回原始的文件名字 ? 一般不建議過濾內(nèi)核的請求 ,同級對抗 虛擬化注意事項 ? 從這個方面來看在應(yīng)用層比較好 wow的進程查詢的時候 再查詢一次 虛擬化注意事項 ? ? 不過濾來自內(nèi)核的請求 虛擬化注意事項 ? 6 RPC 等跨進程調(diào)用 接管服務(wù), DCOM, RPC等跨進程通訊的手段,或者自己做個 loader 基準(zhǔn)測試 ? Notepad ? regedit ? 瀏覽器操作 ? 安裝程序操作 其它工具 ? 基準(zhǔn)測試程序 ? Procmon ? 第三方注冊表測試查看工具 補充知識 ? 注冊表穿透 在系統(tǒng)初始化的時候 .window直接使用內(nèi)置一個微型文件系統(tǒng)支持對文件的讀寫 ,對注冊表的讀寫 ,這時還沒有從正常的文件讀寫流程,主要用在 boot驅(qū)動寫入啟動項。作系統(tǒng)還原的時候 ,會導(dǎo)致文件寫穿透。這個地方要注意 : 解決辦法 : Hook int3 控制讀寫