1. 程式人生 > >【舊文章搬運】隱藏驅動完整攻略(猥瑣篇)

【舊文章搬運】隱藏驅動完整攻略(猥瑣篇)

原文發表於百度空間,2009-07-10
==========================================================================

基礎篇裡說的那些東西搞完以後,任何正常的位置都找不到我們的Driver了,此時相應的手段基本上只剩下暴搜PE映象或暴搜DriverObject了。而且,基礎篇講的那些東西,因為都是M$定好的一些格式和位置,程式碼怎麼寫都差不多,固定的路子而已。而抹PE映象或抹DriverObject,真的是看你怎麼猥瑣了~

四、抹PE映象
SYS檔案也是標準的PE檔案,載入驅動時由MmLoadSystemImage將其載入記憶體,於是記憶體中就有了完整的PE映象。ring3我們可以暴搜記憶體查詢隱藏的DLL模組,ring0我們基於同樣的道理可以暴搜高階記憶體查詢隱藏的SYS~為了對抗這種暴力搜尋,必須將PE映象的特徵抹掉。
基本抹法就是抹掉MZ,PE標誌,或者DosHeader->elfanew清0使找不到PE標記等等,但這些都是不夠的,可以參考兩個帖子:
MJ0011的《檢測GMAE:HideDriver的工具》

http://www.debugman.com/read.php?tid=1250
PS:想要隱藏驅動bin的也可以在這裡找到,建議先看刀客的HideDrv是怎麼寫的(方法在基礎篇裡講了一部分),再看看MJ的drvdet是如何猥瑣地進行檢測。
還有老V拿WinHex改了之後的bin(要bin的也可以來這裡,都差不多):
http://www.debugman.com/read.php?tid=1993
看看老V是如何更猥瑣地繞過drvdet,然後MJ更更猥瑣地提出的搜尋DataDirectory法...
所以要抹還是徹底一點,整個抹了PEHeader,此時你已經沒有任何特徵,just a pool of executable Code~~
具體點,PE結構中pOptinalHeader->SizeofHeaders取PE頭大小,然後直接整個Zero掉就可以了,但是要注意時機,否則會藍藍。至於檔案後面的pdb路徑,可以直接用WinHex填零,然後重新計算校驗和即可,載入後自然也不會出現在記憶體中~
如果你使用了執行緒,按《RKU的StealthCode檢測》的方法處理下StartAddress,免得被人查到

五、抹DriverObject
這個可以參考前面寫的《對抗記憶體搜尋物件》
沒有Device,DriverObject就沒有存在的必要,所以這裡你愛怎麼抹怎麼抹,因為我們完全不需要它
物件頭可以整個填零,或者用Fake ObjectType填充一下ObjectHeader->Type
DriverObject->DriverSection所指向的LDR_DATA_TABLE_ENTRY結構也要抹一抹,主要是幾個關鍵資料和路徑資訊,全都填零吧

使用以上五種方法之後,隱藏驅動已經差不多到位,可以輕鬆bypass目前許多ARK了。關於此時的驅動如何與ring3通訊,再說~