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

VC++ 實現 Windows 2000 屏蔽 Ctrl+Alt+Del:自定義 GINA DLL

     編輯:VC 教學

⚠️ 重要聲明

本文技術僅適用於 Windows 2000/NT 4.0 歷史環境。 Windows Vista 起引入 Credential Providers 架構,GINA 已被棄用;現代系統 (Win10/11) 無法通過替換 GINA 實現此功能,且嘗試修改系統認證流程可能導致無法登入、安全性降低。請僅作歷史技術研究參考。

原理:WinLogon 與 GINA 架構

  • WinLogon:系統進程 winlogon.exe,負責互動式登入、安全注意序列 (SAS) 處理、工作站鎖定。
  • GINA (Graphical Identification and Authentication):可替換 DLL (msgina.dll),實際執行「輸入用戶名/密碼」UI 與驗證邏輯。
  • SAS (Secure Attention Sequence):Ctrl+Alt+Del 硬體中斷 → WinLogon 捕獲 → 呼叫 GINA 導出函數 WlxLoggedOnSAS。

實現步驟

  1. 建立 MFC Regular DLL (靜態連結 MFC):專案名 MyGina。
  2. 導出 18 個標準 GINA 函數:使用 .def 定義檔或 __declspec(dllexport)。核心函數:
    WlxNegotiate、WlxInitialize、WlxLoggedOnSAS、WlxActivateUserShell 等。
  3. 關鍵邏輯:攔截 WlxLoggedOnSAS:
    int WINAPI WlxLoggedOnSAS(PWLX_NOTIFICATION_INFO pInfo, DWORD dwSasType)
    {
        // dwSasType == WLX_SAS_TYPE_CTRL_ALT_DEL
        // 直接返回「無動作」,阻止彈出「Windows 安全性」對話框
        return WLX_SAS_ACTION_NONE;
    }
    其餘函數直接轉呼叫原版 msgina.dll 對應函數 (需 LoadLibrary + GetProcAddress),保持標準登入流程不變。
  4. 部署與註冊:
    copy MyGina.dll %SystemRoot%\System32\
    reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v GinaDLL /t REG_SZ /d MyGina.dll /f
    重啟生效。

風險與替代方案

風險說明
系統無法啟動GINA DLL 載入失敗會導致藍屏或登入迴圈,需進入安全模式或 PE 修復註冊表。
安全性降低繞過 SAS 會失去鎖定工作站、切換用戶、工作管理員等安全功能。
相容性僅限 Win2000/NT/XP (需關閉快速用戶切換);Vista+ 完全不支援。

現代替代方案 (Windows 7+)

  • Credential Provider:官方擴展點,可自定義登入 UI、欄位、驗證邏輯,但無法攔截 SAS。
  • Group Policy:Computer Configuration → Administrative Templates → System → Ctrl+Alt+Del Options 可移除「工作管理員」等選項,但無法完全屏蔽組合鍵。
  • 鍵盤過濾驅動:鍵盤類別過濾驅動 (KMDF) 在輸入層攔截 Ctrl+Alt+Del,需簽名驅動、測試極其嚴格,不建議一般應用層開發者嘗試。

結語

GINA 替換是 Windows 2000 時代「深度系統定製」的經典案例,展示了微軟早期為企業客戶提供的靈活性。隨著安全模型演進 (Vista+ 安全桌面、VBS、HVCI),系統關鍵路徑已封閉,開發者應轉向官方支援的擴展機制,避免走上不歸路。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved