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