首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VxD 技術原理與實時反病毒應用深度解析

     編輯:VC 教學

背景:為何需要 VxD?

Windows 9x 基於 Intel Ring 0/3 保護模式:Ring 0(核心模式)擁有完整硬體存取權;Ring 3(用戶模式)受限於自身位址空間。傳統用戶模式反病毒軟體屬「靜態掃描」,無法在病毒入侵瞬間攔截。實現「以防為主」的實時監控,必須讓監控代碼運行在 Ring 0,**VxD(Virtual Device Driver)正是官方提供的 Ring 0 程式開發介面**。

VxD 核心特性

  • 虛擬裝置驅動程式:連接系統核心與硬體/軟體「虛擬裝置」。
  • Ring 0 權限:可執行特權指令、存取所有記憶體、攔截中斷、掛鉤系統服務。
  • 四類服務:PM API(16位保護模式)、V86 API(虛擬 86 模式)、Win32 服務、VxD 服務(供其他 VxD 呼叫)。
  • 應用程式通訊:DeviceIoControl + IOCTL 代碼,雙向傳遞資料。

VxD 生命週期與控制訊息

系統透過控制訊息(Control Message)管理 VxD,關鍵訊息:

動態載入流程

  1. 應用呼叫 CreateFile("\\\\.\\VxDName", ...)。
  2. 系統發送 SYS_DYNAMIC_DEVICE_INIT,VxD 初始化成功返回。
  3. 系統發送 W32_DEVICEIOCONTROL(控制碼 DIOC_OPEN=0),VxD 清零 EAX 表示支援 IOCTL。
  4. CreateFile 返回裝置句柄 hDevice。
  5. 應用透過 DeviceIoControl(hDevice, ioctlCode, inBuf, inSize, outBuf, outSize, &bytesReturned, NULL) 與 VxD 交換資料。
  6. 應用呼叫 CloseHandle(hDevice),系統發送 DIOC_CLOSEHANDLE(-1),引用計數歸零時發送 SYS_DYNAMIC_DEVICE_EXIT 卸載 VxD。

典型 VxD 控制程序骨架(組合語言)

BeginProc VXD_Control
    mov eax, [control_message]   ; EAX = 訊息代碼
    cmp eax, 1Bh                 ; SYS_DYNAMIC_DEVICE_INIT
    jz  vxd_dynamic_init_handle
    cmp eax, 1Ch                 ; SYS_DYNAMIC_DEVICE_EXIT
    jz  vxd_dynamic_exit_handle
    cmp eax, 23h                 ; W32_DEVICEIOCONTROL
    jnz exit_control_proc
    mov ecx, [esi + 0Ch]         ; 從 DIOCParams 取 IOCTL 代碼
    ; ... 依代碼分派處理 ...
exit_control_proc:
    ret
EndProc

實時反病毒應用架構

  1. VxD 核心模組:掛鉤檔案系統 IFS(Installable File System)相關服務(如 IFSMgr_RegisterFileSystemHook),攔截 IRP_MJ_CREATE、IRP_MJ_WRITE、IRP_MJ_READ 等操作。
  2. 特徵碼掃描引擎:在攔截點讀取檔案內容,對比病毒特徵庫(需高效能、增量更新)。
  3. 決策與阻斷:發現病毒 → 返回錯誤碼阻止操作、隔離檔案、通知用戶模式 UI。
  4. 用戶模式介面:提供 DeviceIoControl 介面供 UI 查詢狀態、設定策略、更新特徵庫。

雙刃劍:病毒也利用 VxD

CIH 病毒即利用 VxD 技術:以 Ring 0 代碼駐留記憶體、感染 PE 檔案、破壞硬碟分區表、刷新 BIOS。防禦端必須保護 VxD 載入機制、監控可疑 VxD 註冊、簽名驗證核心模組。

總結

VxD 是 Windows 9x 時代實現 Ring 0 功能的唯一正規路徑,支撐了實時反病毒、防火牆、磁碟工具等核心安全軟體。雖隨 Windows NT 核心(WDM/KMDF)淘汰,但其核心模式程式設計思想、硬體抽象層互動、用戶/核心模式通訊模型對理解現代驅動開發、根套件防禦、EDR 架構仍具極高參考價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
訊息代碼時機處理任務
SYS_DYNAMIC_DEVICE_INIT0x1B動態載入時初始化、建立資料結構、掛鉤中斷/服務
SYS_DYNAMIC_DEVICE_EXIT0x1C卸載時清理掛鉤、釋放資源、還原系統狀態
W32_DEVICEIOCONTROL0x23應用呼叫 DeviceIoControl從輸入緩衝區取參數、執行 Ring 0 操作、回寫輸出緩衝區