Safengine Shielden v2.3.7.0 驱动脱壳
前言:
? ?之前找工作的時候,注意到有個公司找windows驅動開發/逆向工程師,所以他們公司產品里面應該包含有驅動程序(吶,必須的學習一波)。首先,安裝他們公司的相關產品,然后找到里面的驅動文件;一看驅動文件幾百k,應該是加殼了(Safengine Shielden v2.3.7.0)。如下圖:
脫殼過程:
? ?文件丟進ida里面發現沒法看,脫殼當然是不會脫殼的。嗯,先把驅動跑起來吧。創建服務,啟動服務;驅動成功跑起來了。驅動程序運行之后,對應的會有一些數據產生:1,通過winObj類似工具,可以發現在driver目錄下面有一個以服務名為名稱的驅動項(一個DriverObject)?2,?寫過驅動程序的應該了解,DriverObject數據結構里面包含有很多數據,例如驅動名稱,驅動模塊地址,MajorFunction數組等;直接通過winObj查看DriverObject的資源,定位MajorFunction函數數組,驚人的發現,相關函數已經被還原了(大喜).
? ? 既然代碼已經被還原了,直接通過winDbg把相應的代碼段給dump出來(.writemem 文件路徑 內存起始地址 長度)。dump 文件的大小一般是原驅動文件大小的10分之一左右,如果原加殼驅動文件大小640k,實際加殼之前應該不會超過64k。
修復文件:
?dump出來的代碼片段中,調用系統api的地方是加殼程序修改的,變為call 立即數等形式。不過,dump出來的文件中立即數里面保存了當前系統api的地址,然后,直接在winDbg中,輸入"u api地址“,winDbg會自動識別對應的api函數名稱。以上相當于修復了pe文件的導入表。
驅動利用:
?這個驅動寫的就行一個馬一樣,太邪惡了。已知可以進行提權利用:替換進程token.如下圖,在win 10 1909中:
?
?總結:
網上傳聞,SE 不是強殼嗎?怎么這么容易就被干了。不知道是不是加殼的人沒有設置好,導致SE沒有發揮應有的效果(不應該啊)。哈哈,后面分析發現該驅動邏輯寫的還是可以的。
***********************************************************************************************************
后續分析發現,這個驅動應該是這樣設計的,因為里面的接口都是這種模式。
在vt上的結果:
在win11 (22000.?318)上驅動無法加載,錯誤如下圖:
2022.02.16
經測試發現,在win11上無法加載該驅動是因為開啟了secure boot;如果關掉secure boot,該驅動可以被加載。(在18363,22000上測試過)
總結
以上是生活随笔為你收集整理的Safengine Shielden v2.3.7.0 驱动脱壳的全部內容,希望文章能夠幫你解決所遇到的問題。