一、基礎篇–簡單驅動模型
1.1 DDK及VC6.0/7.0/9.0的安裝
? ?1.1.1 安裝VC++6.0 -1課
? ?1.1.2 安裝VS2003-VC++7.0-2課
? ?1.1.2 安裝VS2008-VC++9.0-3課
? ?1.1.3 安裝VC助手-4課
? ?1.1.5 安裝DDK-5課
1.2驅動開發VC環境安裝配置
1.2.1 VC6環境編譯驅動-6課
? ???A、VC6驅動編譯配置
? ???B、VC6集成環境下編譯驅動
1.2.2 VS2003環境編譯驅動-7課
? ???A、VC7驅動編譯配置
? ???B、VC7集成環境下編譯驅動
1.2.3 VS2008環境編譯驅動-8課
? ???A、VC9驅動編譯配置
? ???B、VC9集成環境下編譯驅動
1.3 NT式驅動
1.3.1編寫一個名為DDK_HelloWorld簡單的驅動-9課
? ?? ?A、VC6集成環境下書寫代碼
? ?? ?? ? 驅動入口函數DriverEntry
? ?? ?? ? 入口函數參數DriverObject和RegistryPath
? ?? ?B、書寫SOURCES文件
? ?? ?C、書寫makefile文件
? ?? ?D、用DDK-Build環境編譯
1.3.2為DDK_HelloWorld添加卸載例程-10課
? ?? ?A、輸出調試信息-KdPrint
? ?? ?B、認識PDRIVER_OBJECT結構
? ?? ?C、注冊驅動卸載例程
? ?? ?D、卸載例程回調函數構建
? ?? ?E、查看驅動調試信息
1.3.3 用工具過驅動保護(確定學習方向)-11課
? ?? ?A、用戶層至內核的隱秘通道
? ?? ?B、淺談過保護原理
? ?? ?C、實戰過XX游戲驅動保護,讓OD,CE正常附加調試
? ?? ?D、小結
1.3.4為DDK_HelloWorld添加設備例程-12課
? ?? ?A、相關內核API介紹
? ?? ?B、重要數據結構驅動對象DRIVER_OBJECT
? ?? ?C、重要數據結構設備對象DEVICE_OBJECT
? ?? ?D、添加創建設備的例程
? ?? ?E、用工具查看驅動及驅動設備
1.3.5VM+windbg安裝 13課
? ?? ?A、安裝VM虛擬機
? ?? ?B、在VM里安裝操作系統
? ?? ?C、安裝windbg
? ?? ?D、windbg和VM的相關配置
? ?? ?E、啟用windbg雙機調試
1.3.6實戰用windbg調試自己驅動DDK_HelloWorld -14課
? ?? ?A、用戶層調試和內核調試區別
? ?? ?B、如何下斷跟蹤
? ?? ?C、F10步過和F11步進
? ?? ?D、查看寄存器相關信息
? ?? ?E、源代碼調試與機器碼調試
1.3.7DDK_HelloWorld卸載例程細化-15課
? ?? ?A、再看DEVICE_OBJECT結構
? ?? ?B、刪除符號鏈接
? ?? ?C、刪除設備
? ?? ?D、測試卸載例程
1.3.8為DDK_HelloWorld添加默認派遣例程-16課
? ?? ?A、初識IRP
? ?? ?B、一個簡單的IRP處理函數
? ?? ?C、IRP.IoStatus結構
? ?? ?D、IoCompleteRequest函數
1.4 編寫自己的驅動過游戲保護(以11課分析為例)
? ?1.4.1需要具備的理論知識-17課
? ?? ???A、了解SSDT結構
? ?? ???B、由SSDT索引號獲取當前函數地址? ?? ???
? ?? ???C、如何獲取索引號
? ?? ???D、獲取起源地址-判斷SSDT是否被HOOK
? ?? ???E、如何向內核地址寫入自己代碼? ???
1.4.2讀出SSDT表當前函數地址-18課
? ?? ???A、引用KeServiceDescriptorTable表
? ?? ???B、通過ServiceTableBase+偏移讀出當前函數地址
? ?? ???C、用windbg測試讀取的值
1.4.3讀出原函數地址-19課
? ?? ???A、集成上一課代碼至GetNt_CurAddr函數
? ?? ???B、MmGetSystemRoutineAddress
? ?? ?? ? C、書寫GetNt_OldAddr函數
? ?? ?? ? D、測試結果
1.4.4JMP地址轉換公式推導-20課
? ?? ? A、JMP地址轉換公式推導
? ?? ? B、計算實際地址函數RealJmp_Addr
? ?? ? C、測試
1.4.5繞過SSDT驅動保護-21課
? ?? ? A、去掉頁面保護
? ?? ? B、寫入In Line HOOK代碼
? ?? ? C、用OD附加測試效果
? ?? ? D、反HOOK代碼??
1.6 NT式驅動的安裝-22課
? ?? ?A、OpenSCManager
? ?? ?B、CreateService
? ?? ?C、OpenService
? ?? ?D、StartService
? ?? ?E、CloseServiceHandle
? ?? ?F、集成到loadNTDriver函數
1.7 NT式驅動的卸載-23課
? ?A、卸載驅動流程
? ?B、內核函數DeleteService
? ?C、內核函數ControlService
? ?D、構建UnLoadSys函數
? ?E、測試并查看調試信息
1.8 驅動代碼中C和C++代碼區別-24課
??A、函數調用約定
??B、C和C++編譯方式
??C、用C++方式編譯驅動??
??D、C代碼升級至C++
??E、優化21課的代碼
1.9、再談VC環境配置-25課
A、編譯選項C/C++ Project Option
B、鏈接選項Link Project Option
C、測試所編譯驅動
二、中級篇
2.1、手動加載NT式驅動(非工具)-26課
A、注冊表
B、手動運行驅動
C、手動停止驅動
2.2、應用程序與驅動交互訪問(緩沖模式)
2.2.1、數據交換原理-27課
??A、用戶層傳入數據
??B、驅動層接收數據
??C、驅動層回傳數據級用戶層
2.2.2、實戰EXE和SYS通信-28課
A、用戶層傳入數據EXE部分代碼
B、驅動層接收數據并處理SYS部分代碼
C、驅動層返回數據至用戶層
D、用戶層獲得處理結果
2.3、應用程序與驅動交互訪問(直接模式)-29課
A、用戶層傳入數據EXE部分代碼
B、驅動層接收數據并處理SYS部分代碼
C、驅動層返回數據至用戶層
D、用戶層獲得處理結果
E、預編譯指令#pragma #ifndef #endif
2.4、應用程序與驅動交互訪問(其它模式)-30課
A、用戶層傳入數據EXE部分代碼
B、驅動層接收數據并處理SYS部分代碼
C、驅動層返回數據至用戶層
D、用戶層獲得處理結果
E、驅動中的異常處理
2.5、再談SSDT HOOK驅動保護原理-31課
A、初識內核進程相關結構
B、內核函數PsGetCurrentProcess
C、進程保護原理
D、實例測試
2.6、自寫驅動保護XX進程-32課
A、HOOK SSDT
B、構建自己的內核函數
C、構建Hook和UnHook函數
D、修改EXE和SYS對應源代碼(實現所謂保護)
E、測試效果
2.7、驅動中的內存管理-33課
A、 物理內存
B、 虛擬內存
C、 Ring0地址和Ring3地址
D、 驅動程序和進程的關系
E、 分頁和非分頁內存
F、 分配內核內存
2.8、內存管理相關內核API-34課
A、RtlCopyMemory,RtlCopyBytes和RtlMoveMemory
C、RtlZeroMemory和RtlFillMemory
D、RtlEqualMemory
E、ExAllocatePool和 ExFreePool
F、重載new和delete操作符
2.9.1在認識鏈表結構exe部分-35課
A、鏈表結構
B、鏈表的初始化
C、在鏈表中插入數據(結點)
D、鏈表的遍歷
2.9.2在驅動中使用鏈表sys部分-36課
A、鏈表結構
B、鏈表的初始化
C、在鏈表中插入數據(結點)
D、鏈表數據的刪除
E、鏈表的遍歷
2.8其它
??數據類型
??返回狀態值
??檢查內存的可用性
??異常處理try-except
??異常處理try-finally
??斷言
2.9內核函數
2.9.1內核模式下的字串操作
ASCII字符串和UNICODE字符串
ANSI_STRING字符串和UNICODE_STRING字符串
字符串的初始化與銷毀
字符串復制
字符串比較
字符串轉化成大寫
字符串與整型數字相互轉換
ANSI_STRING字符串和UNICODE_STRING字符串相互轉換
2.9.2內核模式下的文件操作
文件的創建
文件的打開
獲取和修改文件屬性
寫文件和讀文件
2.9.3 IRP和派遣函數
IRP和IRP類型
對IRP函數的處理
編寫通用的IRP派遣函數
跟蹤IRP的利器IRPTrace
三、進階篇(進程保護,RootKit)
3.1應用層勾子
IAT HOOK
InLine HOOK
3.2內核勾子
3.2.2 Shadow SSDT??
3.2.3 InLine HOOK
3.2.3 object HOOK??
3.2.4 IDT中斷描述符表
3.2.5 IDT HOOK
四、高級篇–驅動逆向
4.1單機調試驅動windbg+vmware
? ?4.1.1游戲反取色分析
? ?4.1.2游戲進程隱藏分析
? ?4.1.3游戲進程保護分析
4.2實戰游戲驅動保護分析
? ?4.2.1 再談過保護原理
? ?4.2.2 XX游戲XX 驅動分析
? ?4.2.3 XX游戲XX 驅動分析