一般在Windows平台上,可能比較少會遇到驅動層級的惡意程式,不過如果遇到了,我們也要知道如何分析它,那麼需要知道驅動程式是如何編譯以及運行它在系統上,因此這篇教學是傾向於如何編譯Windows驅動程式,然後將它運行到記憶體上。
工具
1. Windows Driver Kit 8
2. Visual Studio 2012 Professional
3. Dbgview
4. OSR Driver loader
5. 驅動程式運行環境:Windows 7 x86
一、安裝Windows Driver Kit 8
Windows Driver Kit 8 是Windows在開發驅動時的模組,要先安裝完Visual Studio後,再安裝它,就能在Visual Studio裡面開發驅動程式。
執行wdksetup.exe,安裝過程都使用預設的設定即可,接下來都按Next,最後就能完成安裝。
二、設置Visual Studio驅動開發環境
首先創建驅動程式的空專案,滑鼠左鍵點選File->New->Project->Templates->Visual C++->Windows Driver->WDM。
由於我們建立的是驅動空專案,因此裡面什麼檔案都沒有,需要自行創建Main.c。
將Driver Files底下的HelloDriver.inf刪除。
在專案點選滑鼠右鍵->Properties->C/C++->Advanced->Compile As,並且將它修改成 Compile as C Code (/TC)。
在專案點選滑鼠右鍵->Properties->C/C++->All Options-> Treat Warnings As Errors,將它修改成 No (/WX-)。
我們的驅動程式會運作在Windows 7 x86底下,因此在編譯的設定需要選擇Win32和Win7 Debug。
三、編譯驅動程式
在Main.c裡面撰寫簡易的程式碼。
#include <ntifs.h>
#include <intrin.h>
VOID DriverUnload(PDRIVER_OBJECT objDriver)
{
UNREFERENCED_PARAMETER(objDriver);
DbgPrint("DriverUnload\n");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT objDriver, PUNICODE_STRING strRegPath)
{
UNREFERENCED_PARAMETER(strRegPath);
objDriver->DriverUnload = DriverUnload;
DbgPrint("Hello Driver\n");
return STATUS_SUCCESS;
}
寫完程式碼後點選Build->Build Solution開始編譯驅動程式。
編譯完成後,在Output欄位,會顯示編譯成功的訊息,輸出檔案會放在此專案主目錄的Win7Debug資料夾底下,其中HelloDriver.sys就是它的執行檔。
四、載入與卸載驅動程式
載入驅動程式我們可以透過OSR Loader工具幫助我們完成這項工作。
執行OSRLOADER後,滑鼠左鍵點選Browser,然後選擇要載入的驅動程式(HelloDriver.sys)。
接者按Register Service,出現操作順利完成的視窗後,再按Start Service,就能順利載入我們的驅動程式。
如果想要看到驅動程式印出的訊息,我們在運行驅動程式之前利用DebugView將它的訊息印出來,不過需要設置DebugView抓取資料的設定,將Capture Kernel和Enable Verbose Kernel Output啟用。
在驅動載入後,我們可以看到它印出的訊息。
如果要卸載驅動,一樣也是透過OSR Loader,先讓驅動程式停止運行Stop Service,然後再執行Unregister Service,這樣就完成卸載驅動了。
在卸載驅動後,一樣能看到我們印出的字串。