閱讀900 返回首頁    go 人物


[原創]搶先DriverStudio奪取機器控製權

 

 

原創搶先奪取機器控製權

 

 

 

 

      廢話不談,言歸正傳!

      大家都知道,裝了DriverStudio軟件(我使用的是v3.2)的係統在啟動時會顯示其配置畫麵,(如圖0所示)

 

 

 

                             圖 0

 

這時操作係統的其他部件還沒有運行。那麼顯示的原理是什麼?能不能早於DriverStudio而先執行其他代碼呢?答案是肯定的。下麵先談談原理吧。

      原理比較簡單,詳細的大家可以看網文<<Inside NT boot>>

,我這裏簡單說說。當引導扇區被引導後,會查找NTLDR,NTLDR

的一件非常重要的事就是將CPU從實模式轉換到保護模式下。在

加載完NTDECT.COM後接下來就會將NT的核心裝入內存,它們是HAL.DLLNTOSKRNL.EXE,加載完畢後,NTLDR再加載所有引導

必須的驅動程序。接下來就是我們所關心的地方:它會將HKLM/SYSTEM/Services中值為 SERVICE_BOOT_STARTDRIVER

裝入,但此時不初始化。

(補充附注:

NtLdr3步動作:掃描內存中SYSTEM注冊表hive文件找到所有引

導設備驅動程序,這些Driver仔注冊表中通過SERVICE-BOOT-

START啟動值標記。

NtLdr5步動作:加載引導驅動程序,在啟動畫麵Starting

Windows下顯示出不斷更新的進度欄,該進度欄隨每個驅動程

序的加載而變化。

Kernel23步動作:I/O管理器初始化……所有前麵加載的

Boot-Start型驅動程序被調用以完成驅動程序相關初始化,

這時才輪到System-Start型的驅動程序被加載並初始化。

更詳細的信息請參考<<Windows 2000 內部揭秘>>

)

 

那麼DriverStudio是不是也是使用了這個特性呢?

運行 regedit.exe ,Services目錄中找到bootcfg這個注冊

項,可以看到它是一個內核驅動,並且Start類型為0。如圖1

所示:

 

 

                             圖1

 

為了證實這個Driver就是提供DriverStudio開機時配置功能的

驅動程序,我用一個會引起係統崩潰驅動的名字來替換它,然

後重新啟動。原本該顯示配置畫麵的地方果然發生了係統崩潰。

(如圖2所示)

 

 

                            圖 2

 

既然知道了原理,再來看看操作。實際上windows自身提供

了這個實現。細心的朋友可能早就知道Win32 API

CreateServicedwStartType 形參有個選項為:SERVICE_BOOT_START

  

SERVICE_BOOT_START  --  Specifies a device driver started by   the operating system loader. This value is valid only if the    service type is SERVICE_KERNEL_DRIVER or SERVICE_FILE_SYSTEM_DRIVER.

好像看起來和普通的諸如SERVICE_DEMAND_START  的用法沒

什麼不同嘛,結果手動編製嚐試結果返回非法參數。

      為什麼會這樣呢?經過一番thinking之後,我猜測由

於使用

SERVICE_BOOT_START 時,是在係統引導的早期發生load

Driver事件,這時可能除了少數幾個OS必須的路徑以外,還

無法訪問其他windows目錄。為了證實,我將自己的Driver

貝到係統目錄:

%root%/system32/drivers/

下,再次運行結果成功!

      下麵再引出注冊表中的一個與驅動程序加載相關的KEY

ServiceGroupOrder ,如圖3所示:

 

 

                              圖3

 

再看一下圖1DriverStudio引導驅動的組名,是Boot Bus Extender,它排在啟動順序的第2位。現在我新加一個

Group:Hopy

如圖4:

 

 

                               圖4

 

然後將代碼改寫如下:

;BTmain.asm節選

namesvr    db 'TryBootSvr',0

notesvr    db 'Test Drv Start at System Boot',0

namefile db 'BTdrv.sys',0

szLOG   db 'hopy',0

szSSN   db 'TBSvr2007',0       ;ServiceStartName

szpath     db 'C:/WINNT/system32/drivers/BTdrv.sys',0

invoke  CreateService,hSCM,addr namesvr,addr notesvr,/

      SERVICE_ALL_ACCESS,SERVICE_KERNEL_DRIVER,/

      SERVICE_BOOT_START,SERVICE_ERROR_NORMAL,/

      addr szpath,addr szLOG,addr tagid,NULL,/

      NULL,NULL

驅動代碼如下:

;BTdrv.asm節選

local status:NTSTATUS

   local pDeviceObject:PVOID

   mov   status, STATUS_DEVICE_CONFIGURATION_ERROR

   xor   edi,edi

   mov   [edi],eax

   jmp   $

   mov   eax,status

   ret

 

結果如我們所預料,該Driver搶在DriverStudio之前發生

藍屏,如果將這個Driver換成帶有特定功能的代碼的驅動,

則可以實現超前的目的。這個留給大家去想象吧,嗬嗬。

 

 

 

 

                                       hopy|侯佩

                                    2007.09.16 寫於中國

                                    女足慘敗於巴西之後

最後更新:2017-04-02 00:06:21

  上一篇:go [轉貼]了解 Windows Vista 內核
  下一篇:go 股票在賺誰的錢?