1 winlogon 簡(jiǎn)介
Windows Logon Process:Windows NT 用戶登陸管理程序,負(fù)責(zé)管理登錄相關(guān)的安全性工作,它負(fù)責(zé)處理用戶的登錄與注銷、啟動(dòng)用戶shell、輸入口令、更改口令、鎖定與解鎖工作站等。該進(jìn)程的正常路徑應(yīng)是 [系統(tǒng)盤]:\Windows\System32 且是以 SYSTEM 用戶。
Winlogon進(jìn)程保證其與安全相關(guān)操作對(duì)其他進(jìn)程不可見,以免其他進(jìn)程取得登錄密碼。系統(tǒng)初始化時(shí),啟動(dòng)用戶程序之前,Winlogon進(jìn)行特定工作已保障以上的需求。Winlogon進(jìn)程將創(chuàng)建并打開一個(gè)Window Stations,然后設(shè)置一個(gè)訪問(wèn)控制人口(ACE),該ACE中只包含Winlogon進(jìn)程的SID,這樣就只有Winlogon進(jìn)程才能訪問(wèn)該Window Stations 。然后winlogon創(chuàng)建桌面,設(shè)置其中的winlogon桌面只有winlogon可以訪問(wèn),其他進(jìn)程不能訪問(wèn)該桌面的任何數(shù)據(jù)和代碼;利用這一特性保護(hù)口令、鎖定桌面等操作的安全。winlogon還會(huì)注冊(cè)安全注意序列(SAS - secure attention sequence)的熱鍵,任何時(shí)候按下SAS熱鍵(缺省為ctrl+alt+del),將調(diào)用Winlogon,切換到安全桌面,從而使密碼捕捉程序不能接收登錄密碼和更改密碼等安全活動(dòng)。
2 GINA DLL
而登錄進(jìn)程的驗(yàn)證和身份驗(yàn)證都是在GINA(GINA - Graphical Identification and Authentication圖形標(biāo)識(shí)和身份驗(yàn)證)中實(shí)現(xiàn)的,微軟的GINA是MSGINA.dll,實(shí)現(xiàn)了默認(rèn)的Windows NT登錄界面。WinLogon和GINA DLL交互如下圖示:
微軟同時(shí)也為我們提供了接口,我們可以自己編寫GINA DLL來(lái)代替MSGINA.DLL。由此,用戶可以自己開發(fā)GINA DLL以實(shí)現(xiàn)其他的身份驗(yàn)證方法,如磁卡。當(dāng)然這也為木馬留下了機(jī)會(huì),可以通過(guò)編寫和系統(tǒng)GINA界面相同的GINA,然后取代GINA.dll來(lái)盜取用戶的密碼信息。(在編寫GIAN DLL中要注意,GINA DLL使用的是unicode。)
WinLogon和GINA DLL進(jìn)行交互,GINA DLL要輸出下列函數(shù)供winlogon調(diào)用:
WlxNegotiate
WlxInitialize
WlxDisplaySASNotice
WlxLoggedOutSAS
WlxActivateUserShell
WlxLoggedOnSAS
WlxDisplayLockedNotice
WlxWkstaLockedSAS
WlxIsLockOk
WlxIsLogoffOk
WlxLogoff
WlxShutdown
WlxScreenSaverNotify
WlxStartApplication
WlxNetworkProviderLoad
WlxDisplayStatusMessage
WlxGetStatusMessage
WlxRemoveStatusMessage
WlxGetConsoleSwitchCredentials
WlxReconnectNotify
WlxDisconnectNotify
當(dāng)winlogon彈出用戶登錄界面,提示用戶輸入用戶名和密碼時(shí)會(huì)調(diào)用gina dll中的WlxLoggedOutSAS函數(shù)。如果用戶需要定制特殊的身份驗(yàn)證方式可以寫一個(gè)新的GINA DLL,其中提供接口調(diào)用msgina.dll的函數(shù)WlxLoggedOutSAS。其他的函數(shù)則直接從MSGINA.DLL中動(dòng)態(tài)獲取。如果要獲得用戶名和密碼 ,方法雷同。。。
WlxLoggedOutSAS函數(shù)的原型如下:
int WlxLoggedOutSAS(
PVOID pWlxContext,
DWORD dwSasType,
PLUID pAuthenticationId,
PSID pLogonSid,
PDWORD pdwOptions,
PHANDLE phToken,
PWLX_MPR_NOTIFY_INFO pNprNotifyInfo,
PVOID* pProfile
);
其中PWLX_MPR_NOTIFY_INFO pNprNotifyInfo參數(shù)會(huì)記錄用戶的名稱和密碼信息。木馬可以記錄此信息到某些文件或者注冊(cè)表中并尋找時(shí)機(jī)發(fā)送到木馬作者手中。代碼參考
3 安裝和注意事項(xiàng):
在編寫GIAN DLL中要注意,GINA DLL使用的是unicode。
【安裝】GINA DLL的安裝:
1. 添加注冊(cè)表
鍵名 : \HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
變量名 : GinaDLL
變量類型 : [REG_SZ]
內(nèi)容 : "你的GINA DLL的名稱" 如:"MyGina.DLL:
2. 將你的GINA DLL(MyGina.dll)拷貝到系統(tǒng)目錄下(system32);
3. 重啟機(jī)器,你的GINA DLL(MyGina.dll)就會(huì)運(yùn)行。
【注意】
1. 如果出現(xiàn)進(jìn)不了你的系統(tǒng),那你進(jìn)入DOS后,將msgina.dll拷貝成你的GINA DLL(MyGina.dll)就可進(jìn)入了;或者進(jìn)入安全模式,刪除掉那個(gè)注冊(cè)表鍵值( GinaDLL )。
2. Console 程序如果想使用MFC類,必須包含<afx.h>,同時(shí)注釋掉<windows.h>。
3. 如果出現(xiàn)這種錯(cuò)誤:“LINK : fatal error LNK1104: cannot open file "mfc42u.lib" ”,那么說(shuō)明 lib路徑的設(shè)置問(wèn)題,你的鏈接器在指定的目錄下沒(méi)有找到這個(gè)的文件,你應(yīng)該添加新的目錄以便編譯器找到所需的庫(kù)文件。具體位置:IDE中 菜單Tools\Options\Directories\show directories for\ <library files>。
4. 如果出現(xiàn)這種錯(cuò)誤:“uafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in main.obj ”或者“mfcs42ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in main.obj ”,那么“See if you have _AFXDLL and _USRDLL in the preprocessor definitions. Try removing one of them”。具體位置:IDE中 菜單Project \ Setting \ C/C++ \ preprocessor definition 。