主要原理是修改需要Hook的進程的PDE PTE表,把原本的虛擬位址對應到我Hook過的物理位址
由於每個進程的頁表都不一樣(包括System) 所以如果我只改某個進程的頁表 System或Anti Rookit的頁表並不會被更改 也就看不到我改過的物理內存 我的測試是用修改前五個字節的方式對notepad作Inline Hook NtCreateFile
由於NtCreateFile所在的頁是4M的Large Page 所以我先建一個PTE頁表 每個頁為4K 對應的物理位置為原本的物理內存(這個動作應該是多餘的)
然後在得到NtCreateFile所在的4K頁 把這個頁Copy一份到別的位址 並且把我建的頁表中這頁的物理位址指向Copy出來的那頁,修改Copy出來的那頁 作Inline Hook
最後修改notepad的PDE 把他指向我建立的PTE頁表
測試結果 如果直接Inline Hook NtCreateFile GMER這個工具可以輕鬆檢測
修改後 就隱藏成功了
沒有留言:
張貼留言