dkom(direct kernel object manipulation)就是直接核心物件操作技術。所有的作業系統都在記憶體中儲存記賬資訊,他們通常採用結構或物件的形式,由物件管理器管理。當使用者空間程序請求作業系統資訊例如程序、執行緒或裝置驅動程式列表時,這些物件被報告給使用者。這些物件或結構位於記憶體中,因此可以直接對其進行修改。隱藏程序主要關注的windows關鍵資料結構是:程序的eprocess結構與執行緒的ethread結構、鍊錶(如程序、執行緒鍊錶與cpu的排程鍊錶)等等。dkom通過操作這些資料結構來達到它們的目的。直接操作核心物件在隱藏程序這方面的應用很多。
當服務控制管理器(scm)載入乙個驅動的時候,就會生成乙個driver_object結構的物件.
nt!_driver_object
+0x000type:int2b
+0x002size:int2b
+0x004deviceobject:ptr32_device_object
+0x008flags:uint4b
+0x00cdriverstart:ptr32void
+0x010driversize:uint4b
+0x014driversection:ptr32void
+0x018driverextension:ptr32_driver_extension
+0x01cdrivername:_unicode_string
+0x024hardwaredatabase:ptr32_unicode_string
+0x028fastiodispatch:ptr32_fast_io_dispatch
+0x02cdriverinit:ptr32long
+0x030driverstartio:ptr32void
+0x034driverunload:ptr32void
+0x038majorfunction:[28]ptr32long
其中的driversection中儲存著乙個指向kldr_data_table_entry結構體的指標.
這個結構體被用來儲存驅動模組的一些資訊.
在wrk中的定義如下:
typedefstruct_kldr_data_table_entrykldr_data_table_entry,*pkldr_data_table_entry;
這個結構體中的第乙個成員inloadorderlinks是乙個list_entry的結構.這使得每個驅動模組被串在了乙個雙向鍊錶中.我們只要遍歷這條雙向鏈就能列舉出所有的驅動模組.
其中域dllbase是驅動模組的載入基位址.
fulldllname是驅動模組的完整路徑
basedllname是驅動模組的名稱.
遍歷結果如下:
因此,如果我們要隱藏某個驅動,只需將我們要隱藏的驅動名跟鍊錶中的每個節點的驅動名比較.一旦找到我們要隱藏的驅動,則修改它的inloadorderlinks域的flink和blink的指標即可.
圖一:修改前flink和blink指標的指向情況
圖二:修改後flink和blink指標的指向情況
/**【作者:莫灰灰(lsg)】
*【空間:
*/#include
typedefunsignedlongdword;
typedefstruct_kldr_data_table_entrykldr_data_table_entry,*pkldr_data_table_entry;
pdriver_objectpdriverobject=null;
void
hidedriver()
}//鍊錶往前走
entry=(pkldr_data_table_entry)entry->inloadorderlinks.flink;}}
ntstatus
unloaddriver(
inpdriver_objectdriverobject
)ntstatus
driverentry(
inpdriver_objectdriverobject,
inpunicode_stringregistrypath
)摘了xuetr的驅動之後,我們用ark工具來看一下(xuetr和pt都是最新版).
隱藏驅動的方法
以下內容來自www.rootkit.com driver hidding based on the following methods 1.removing module form psloadedmodulelist that passed some old rkdectors 2.removin...
Linux 隱藏驅動模組
作為惡意驅動,肯定是希望自己模組載入之後不會被發現,那麼就需要對安裝的驅動模組進行隱藏,在驅動初始化入口進行摘鏈,kobject del 函式刪除當前模組的kobject就可以起到在 lsmod 和 sys module中隱藏。list del init this module.list test....
隱藏驅動模組 原始碼
xp親測有效,使用我們自己編寫的列舉驅動模組會看不到。列舉驅動模組請看文章 但是使用ark工具依然能看到我們隱藏的驅動某塊,比如kernel detective 和pchunter 但是隱藏的驅動模組為紅色,意為ark工具檢測到了該模組進行了隱藏 include typedef unsigned l...