為了某些原因需要到處為人安裝 Wireless Access Point, 有些人總是把 ISP 的撥接密碼直接紀錄在電腦中,久而久之就忘記了。偏偏為了安裝網路設備,必須把寬頻的帳號密碼都設定起來,為了避免無法設定的尷尬狀況,只好想辦法破解復原撥接密碼。


根據 NT RAS Dial-up Networking “Save Password” Vulnerability 的討論,Windows 是以 DES 研算法將密碼加密後儲存在 Windows Registry (HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\RasCredentials!SID#0) ,只要知道 SYSKEY 就可以把密碼解出來。雖說 HKEY_LOCAL_MACHINE\SECURITY 需要 SYSTEM 權限,但是這可以用其他的辦法把軟體執行權限升級到 SYSTEM,因此取得 Registry 沒有問題。這個漏洞可以從 Windows 98 用到 Windows Vista。

XFocus 的 eyas 為此寫了一篇深入的文章 (NT平台撥號連接密碼恢復原理) 介紹,包含了程式碼展示。文中也解譯了 Nir Sofer (Nir Sofer 的網站提供了相當多免費 Windows 小軟體) 所開發的 Dialupass ,深入說明該如何取得 SYSKEY 或透過 lsass.exe 以 _LsapDbSecretCipherKey 來解密。

如果不想深入閱讀程式碼,就直接下載 Dialupass v2.44 吧。下載之後直接執行程式就可以解出密碼。

若你不想密碼儲存後有機會被竊走,不妨關閉 Remote Access Connection Manager 的密碼儲存功能,細節可參考 Disable Windows 2000 dial-up password caching

備註: 但是你必須在更改 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters\DisableSavePassword 後先刪除舊的連線,再建立一次連線設定,否則舊有的密碼設定還是會存在 Windows Registry 中。