http://topic.csdn.net/t/20060301/15/4585911.html#
先說說登錄過程吧,首先聲明,winlogon.exe可不是隨意可更換的,我們更換的是GINA,而非winlogon.exe,如果處理不當,可能WINDOWS就起不來了.
在“交互式登錄”過程中,Winlogon調用了GINA組文件,把用戶提供的賬號和密碼傳達給GINA,由GINA負責對賬號和密碼的有效性進行驗證,然后把驗證結果反饋給Winlogon程序。在與Winlogon.exe對話時,GINA會首先確定Winlogon.exe的當前狀態,再根據不同狀態來執行不同的驗證工作。通常Winlogon.exe有三種狀態:
1.已登錄狀態
顧名思義,用戶在成功登錄后,就進入了“已登錄狀態”。在此狀態下,用戶可以執行有控制權限的任何操作。
2.已注銷狀態
用戶在已登錄狀態下,選擇“注銷”命令后,就進入了“已注銷狀態”,并顯示Winlogon桌面,而由GINA負責顯示登錄對話框或歡迎屏幕。
3.已鎖定狀態
當用戶按下“Win+L”鍵鎖定計算機后,就進入了“已鎖定狀態”。在此狀態下,GINA負責顯示可供用戶登錄的對話框。此時用戶有兩種選擇,一種是輸入當前用戶的密碼返回“已登錄狀態”,另一種是輸入管理員賬號和密碼,返回“已注銷狀態”,但原用戶狀態和未保存數據丟失。
////登錄到本機的過程
1.用戶首先按Ctrl+Alt+Del組合鍵。
2.Winlogon檢測到用戶按下SAS鍵,就調用GINA,由GINA顯示登錄對話框,以便用戶輸入賬號和密碼。
3.用戶輸入賬號和密碼,確定后,GINA把信息發送給LSA進行驗證。
4.在用戶登錄到本機的情況下,LSA會調用Msv1_0.dll這個驗證程序包,將用戶信息處理后生成密鑰,同SAM數據庫中存儲的密鑰進行對比。
5.如果對比后發現用戶有效,SAM會將用戶的SID(Security Identifier--安全標識),用戶所屬用戶組的SID,和其他一些相關信息發送給LSA。
6.LSA將收到的SID信息創建安全訪問令牌,然后將令牌的句柄和登錄信息發送給Winlogon.exe。
7.Winlogon.exe對用戶登錄稍作處理后,完成整個登錄過程。
////登錄到域的過程
登錄到域的驗證過程,對于不同的驗證協議也有不同的驗證方法。如果域控制器是Windows NT 4.0,那么使用的是NTLM驗證協議,其驗證過程和前面的“登錄到本機的過程”差不多,區別就在于驗證賬號的工作不是在本地SAM數據庫中進行,而是在域控制器中進行;而對于Windows 2000和Windows 2003域控制器來說,使用的一般為更安全可靠的Kerberos V5協議。通過這種協議登錄到域,要向域控制器證明自己的域賬號有效,用戶需先申請允許請求該域的TGS(Ticket-Granting Service--票據授予服務)。獲準之后,用戶就會為所要登錄的計算機申請一個會話票據,最后還需申請允許進入那臺計算機的本地系統服務。
其過程如下:
1.用戶首先按Ctrl+Alt+Del組合鍵。
2.Winlogon檢測到用戶按下SAS鍵,就調用GINA,由GINA顯示登錄對話框,以便用戶輸入賬號和密碼。
3.用戶選擇所要登錄的域和填寫賬號與密碼,確定后,GINA將用戶輸入的信息發送給LSA進行驗證。
4.在用戶登錄到本機的情況下,LSA將請求發送給Kerberos驗證程序包。通過散列算法,根據用戶信息生成一個密鑰,并將密鑰存儲在證書緩存區中。
5.Kerberos驗證程序向KDC(Key Distribution Center--密鑰分配中心)發送一個包含用戶身份信息和驗證預處理數據的驗證服務請求,其中包含用戶證書和散列算法加密時間的標記。
6.KDC接收到數據后,利用自己的密鑰對請求中的時間標記進行解密,通過解密的時間標記是否正確,就可以判斷用戶是否有效。
7.如果用戶有效,KDC將向用戶發送一個TGT(Ticket-Granting Ticket--票據授予票據)。該TGT(AS_REP)將用戶的密鑰進行解密,其中包含會話密鑰、該會話密鑰指向的用戶名稱、該票據的最大生命期以及其他一些可能需要的數據和設置等。用戶所申請的票據在KDC的密鑰中被加密,并附著在AS_REP中。在TGT的授權數據部分包含用戶賬號的SID以及該用戶所屬的全局組和通用組的SID。注意,返回到LSA的SID包含用戶的訪問令牌。票據的最大生命期是由域策略決定的。如果票據在活動的會話中超過期限,用戶就必須申請新的票據。
8.當用戶試圖訪問資源時,客戶系統使用TGT從域控制器上的Kerberos TGS請求服務票據(TGS_REQ)。然后TGS將服務票據(TGS_REP)發送給客戶。該服務票據是使用服務器的密鑰進行加密的。同時,SID被Kerberos服務從TGT復制到所有的Kerberos服務包含的子序列服務票據中。
9.客戶將票據直接提交到需要訪問的網絡服務上,通過服務票據就能證明用戶的標識和針對該服務的權限,以及服務對應用戶的標識。