1 winlogon 簡介
Windows Logon Process:Windows NT 用戶登陸管理程序,負責管理登錄相關的安全性工作,它負責處理用戶的登錄與注銷、啟動用戶shell、輸入口令、更改口令、鎖定與解鎖工作站等。該進程的正常路徑應是 [系統(tǒng)盤]:\Windows\System32 且是以 SYSTEM 用戶。
Winlogon進程保證其與安全相關操作對其他進程不可見,以免其他進程取得登錄密碼。系統(tǒng)初始化時,啟動用戶程序之前,Winlogon進行特定工作已保障以上的需求。Winlogon進程將創(chuàng)建并打開一個Window Stations,然后設置一個訪問控制人口(ACE),該ACE中只包含Winlogon進程的SID,這樣就只有Winlogon進程才能訪問該Window Stations 。然后winlogon創(chuàng)建桌面,設置其中的winlogon桌面只有winlogon可以訪問,其他進程不能訪問該桌面的任何數(shù)據(jù)和代碼;利用這一特性保護口令、鎖定桌面等操作的安全。winlogon還會注冊安全注意序列(SAS - secure attention sequence)的熱鍵,任何時候按下SAS熱鍵(缺省為ctrl+alt+del),將調(diào)用Winlogon,切換到安全桌面,從而使密碼捕捉程序不能接收登錄密碼和更改密碼等安全活動。
2 GINA DLL
而登錄進程的驗證和身份驗證都是在GINA(GINA - Graphical Identification and Authentication圖形標識和身份驗證)中實現(xiàn)的,微軟的GINA是MSGINA.dll,實現(xiàn)了默認的Windows NT登錄界面。WinLogon和GINA DLL交互如下圖示:
微軟同時也為我們提供了接口,我們可以自己編寫GINA DLL來代替MSGINA.DLL。由此,用戶可以自己開發(fā)GINA DLL以實現(xiàn)其他的身份驗證方法,如磁卡。當然這也為木馬留下了機會,可以通過編寫和系統(tǒng)GINA界面相同的GINA,然后取代GINA.dll來盜取用戶的密碼信息。(在編寫GIAN DLL中要注意,GINA DLL使用的是unicode。)
WinLogon和GINA DLL進行交互,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
當winlogon彈出用戶登錄界面,提示用戶輸入用戶名和密碼時會調(diào)用gina dll中的WlxLoggedOutSAS函數(shù)。如果用戶需要定制特殊的身份驗證方式可以寫一個新的GINA DLL,其中提供接口調(diào)用msgina.dll的函數(shù)WlxLoggedOutSAS。其他的函數(shù)則直接從MSGINA.DLL中動態(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ù)會記錄用戶的名稱和密碼信息。木馬可以記錄此信息到某些文件或者注冊表中并尋找時機發(fā)送到木馬作者手中。代碼參考
3 安裝和注意事項:
在編寫GIAN DLL中要注意,GINA DLL使用的是unicode。
【安裝】GINA DLL的安裝:
1. 添加注冊表
鍵名 : \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. 重啟機器,你的GINA DLL(MyGina.dll)就會運行。
【注意】
1. 如果出現(xiàn)進不了你的系統(tǒng),那你進入DOS后,將msgina.dll拷貝成你的GINA DLL(MyGina.dll)就可進入了;或者進入安全模式,刪除掉那個注冊表鍵值( GinaDLL )。
2. Console 程序如果想使用MFC類,必須包含<afx.h>,同時注釋掉<windows.h>。
3. 如果出現(xiàn)這種錯誤:“LINK : fatal error LNK1104: cannot open file "mfc42u.lib" ”,那么說明 lib路徑的設置問題,你的鏈接器在指定的目錄下沒有找到這個的文件,你應該添加新的目錄以便編譯器找到所需的庫文件。具體位置:IDE中 菜單Tools\Options\Directories\show directories for\ <library files>。
4. 如果出現(xiàn)這種錯誤:“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 。
聯(lián)系客服