我正在爲用戶空間應用程序提供Ring-0訪問的Windows NT編寫驅動程序。我想創建一個具有專有權利的實用程序來執行任何用戶的命令,這些命令將受到任何外部有害影響的保護。 上網逛逛,我發現,這是必要的勾一些原生內核函數,如NtOpenProcess
,NtTerminateProcess
,NtDublicateObject
,等我做了一個工作的驅動程序可以保護應用程序,但後來我意識到,這將是更好的防止它也可以從外部嘗試刪除驅動程序或禁止其在OS啓動期間加載,如防火牆。我將任務分爲兩部分:防止從\system32\drivers\
物理刪除驅動程序,並防止更改/刪除負責裝載驅動程序的註冊表項(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
)。註冊表訪問掛鉤以保護驅動程序
問題是,我不明白如何掛鉤從內核空間的註冊表項的訪問,甚至不知道它是可能的:ntdll與註冊表一起工作的所有函數都在用戶空間,從kernelspace不可用。同樣,我可以從用戶空間設置的所有API掛鉤都位於特定的proccess的內存上下文中。所以我們需要將Dll注入到每個進程當中或新進程中。
有鉤在一個地方所有NT-調用,無需注入DLL注入每proccess的方法?
你一定要明白,你基本上是要求幫助編寫了一個rootkit開始(和結束=))。 –
我不經意地閱讀MSDN。有ZwDeleteKey,ZwEnumerateValueKey等。我會嘗試鉤住這些函數 –