Gina DLL
Windows的開機密碼認證模塊一般是由Gina DLL完成的。在NT/2000中交互式的登陸支持是由WinLogon調(diào)用GINA DLL實現(xiàn)的,GINA DLL提供了一個交互式的界面為用戶登陸提供認證請求。
1.Gina原理
WinLogon會和GINA DLL進行交互,缺省是MSGINA.DLL(在System32目錄下)。微軟同時也為我們提供了接口,我們可以自己編寫GINA DLL來代替MSGINA.DLL。
WinLogon初始化時會創(chuàng)建3個桌面:
(1) winlogon桌面:主要顯示W(wǎng)indows 安全等界面,如你按下CTRL+ALT+DEL,登陸的界面等
(2) 應用程序桌面:我們平時見到的那個有我的電腦的界面
(3) 屏幕保護桌面:屏幕保護顯示界面。
在默認情況下,GINA顯示登陸對話框,用戶輸入用戶名及密碼 。所以要獲得用戶名和密碼 ,則可以寫一個新的GINA DLL,其中提供接口調(diào)用msgina.dll的函數(shù)WlxLoggedOutSAS。
2.Gina DLL導出函數(shù)
在NT/2000 中交互式的登陸支持是由WinLogon調(diào)用GINA DLL實現(xiàn)的,GINA DLL提供了一個交互式的界面為用戶登陸提供認證請求。GINA DLL要輸出下列函數(shù)(Winlogon會調(diào)用):
(1) WlxActivateUserShell:激活用戶外殼程序。
(2) WlxDisplayLockedNotice:允許GINA DLL顯示鎖定信息。
(3) WlxDisplaySASNotice:當沒有用戶登陸時,Winlogon調(diào)用此函數(shù)。
(4) WlxDisplayStatusMessage:Winlogon用一個狀態(tài)信息調(diào)用此函數(shù)進行顯示。
(5) WlxGetStatusMessage:Winlogon 調(diào)用此函數(shù)獲取當前狀態(tài)信息。
(6) WlxInitialize:針對指定的窗口位置進行GINA DLL初始化。
(7) WlxIsLockOk:驗證工作站正常鎖定。
(8) WlxIslogoffOk:驗證注銷正常。
(9) WlxLoggedOnSAS:用戶已登陸并且工作站沒有被加鎖,如果此時接收到SAS事件,則Winlogon 調(diào)用此函數(shù)。
(10) WlxLoggedOutSAS:沒有用戶登陸,如果此時收到SAS事件,則Winlogon調(diào)用此函數(shù)。
(11) WlxLogoff:請求注銷操作時通知GINA DLL。
(12) WlxNegotiate:表示當前的Winlogon版本是否能使用GINA DLL。
(13) WlxNetworkProviderLoad:在加載網(wǎng)絡服務提供程序收集了身份和認證信息后,Winlogon 調(diào)用此函數(shù)。
(14) WlxRemoveStatusMessage:Winlogon調(diào)用此函數(shù)告訴GINA DLL停止顯示狀態(tài)信息。
(15) WlxScreensaverNotify:允許GINA與屏幕保護操作交互。
(16) WlxShutdown:在關閉之前Winlogon 調(diào)用此函數(shù),允許GINA實現(xiàn)任何關閉任務,例如從讀卡器中退出智能卡。
(17) WlxStartApplication:當系統(tǒng)需要在用戶的上下文中啟動應用程序時調(diào)用此函數(shù)。
(18) WlxWkstaLockedSAS:當工作站被鎖定,如果接收到一個SAS,則Winlogon調(diào)用此函數(shù)。
我們通過對上述的18個基本函數(shù)進行重寫,來實現(xiàn)USB身份認證系統(tǒng)的Windows登錄身份認證。
3. Gina DLL原型代碼
// USBGina.cpp : 定義 DLL 應用程序的導出函數(shù)。 //4. Gina DLL安裝
(1) 添加注冊表
(2) 鍵名:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\
(3) CurrentVersion\Winlogon\
(4) 變量名:GinaDLL
(5) 變量類型:[REG_SZ]
(6) 內(nèi)容:Yourname.dll
(7) 將Gina DLL(Yourname.dll)拷貝到系統(tǒng)目錄下(system32)。
(8) 重新啟動計算機, Gina DLL(Yourname.dll)就會運行。
5. 結語
以上,Gina DLL就完成,重啟之后就可以看到,盡管這個原型調(diào)用的是Windows的msgina.dll里面的函數(shù),但是事實上所有的函數(shù)已經(jīng)被我們Hook了,在調(diào)用系統(tǒng)函數(shù)之前必然會經(jīng)過我們的函數(shù)。以下是與本主題相關信息:
(1)可以通過WlxLoggedOnSAS來屏蔽Windows操作系統(tǒng)下的Ctrl+Alt+Del。
(2)可以在WlxLoggedOutSAS中截獲用戶登錄的用戶名以及密碼。
(3)通過此原型,可以實現(xiàn)一些個性化的開機認證,包括用指紋(例如ThinkPad筆記本電腦),以及特定的USB才能登錄等等。
轉載于:https://www.cnblogs.com/DeeLMind/p/7160292.html
總結
- 上一篇: C#调用WebService实例和开发(
- 下一篇: Jquery学习笔记:删除节点的操作