天天看點

Windows 7密碼重設盤的内部原理淺析

可能有兄弟覺得密碼重設盤是雕蟲小技,很簡單,甚至是雞肋,因為既然不怕麻煩特意建立一個密碼重設盤,又怎麼會那麼粗心忘記密碼呢?

其實它背後的原理還是很有意思的,這裡試做簡單分析。

在Windows XP時代,我們知道當使用者建立密碼重設盤時,Windows系統會自動建立一對公鑰和私鑰,以及一張自簽署的證書。接下來,将會用所得的公鑰對使用者帳戶的密碼進行加密,然後儲存在系統資料庫項HKEY_LOCAL_MACHINE\SECURITY\Recovery\< SID>中,其中的< SID>就是指該使用者的SID。而私鑰則從計算機中删除,并且儲存在軟碟裡。

到了Windows 7時代,我們知道私鑰會以userkey.psw檔案的形式儲存在軟碟或者USB閃存裡。

但是如果我們嘗試檢視HKEY_LOCAL_MACHINE\SECURITY\Recovery系統資料庫項,發現其下是空的,并沒有什麼使用者SID。

那麼用公鑰加密的使用者密碼,到底存放在哪裡了呢?很顯然,如果光有私鑰,而沒有經過公鑰加密的帳戶密碼副本,無法擷取使用者帳戶的密碼。

經過研究發現(盆盆是借用Process Monitor發現的,比較懶,不想寫具體過程了,過程也簡單),原來在建立密碼重設盤的過程中,Windows本機安全性授權程序Lsass.exe會自動建立一個Recovery.dat系統資料庫配置單元檔案,儲存在C:\Windows\System32\Microsoft\Protect\Recovery檔案夾中。

而Lsass.exe程序會自動将其加載到系統資料庫HKLM\C80ED86A-0D28-40dc-B379-BB594E14EA1B中。C80ED86A-0D28-40dc-B379-BB594E14EA1B意義不明,Google也沒有結果,哪位老大知道,還請不吝指教。

由于密碼重設盤建立完成後,Lsass.exe程序會自動解除安裝該系統資料庫配置單元,是以我們無法檢視HKLM\C80ED86A-0D28-40dc-B379-BB594E14EA1B下的内容。但是比較容易想到的是,可以借助以下方法進行檢視:

用管理者權限打開指令提示符視窗,并且運作以下指令,以Local System身份啟動系統資料庫編輯器(Recovery.dat需要用Local System權限才能加載):

Psexec -s -i -d regedit

選中HKLM系統資料庫根鍵,然後單擊檔案、加載配置單元,并定位到C:\Windows\System32\Microsoft\Protec\tRecovery\Recovery.dat檔案。

在接下來的對話框裡任意指定一個項名稱,例如可以是Test,然後展開其下的子項,可以看到目前登入帳戶的SID,其右側的預設鍵值,即儲存了用公鑰所加密的帳戶密碼副本,如附圖所示。

Windows 7密碼重設盤的内部原理淺析

繼續閱讀