文章目錄
編程實現Windows系統自動登入
原理:
通過註冊表修改實現。Windows內建了自動登入的機制,在登入系統時,winlogon會檢查註冊表下有沒有設定自動登入,如果設定了就上就會讀取使用者名稱和密碼,然後進行驗證,通過後就登入進系統了。
方法:
登錄機碼:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
索引值:
索引值 |
設定值 |
作用 |
AutoAdminLogon |
1; |
1表示自動登入,0表示禁止自動登入 |
DefaultDomainName |
設定值 |
網域名稱,如果沒有就留空 |
DefaultUserName |
abc |
登入系統用的使用者名稱 |
DefaultPassword |
123 |
登入系統用的使用者名稱使用的密碼,如果想加密儲存就刪除此索引值 |
DontDisplayLastUserName |
1 |
|
注意,下面兩個索引值必須刪除掉,否則會顯示一個通知對話方塊。
- LegalNoticeCaption
- LegalNoticeText
另外還有2個索引值,作用分別如下:
- IgnoreShiftOverride 忽略shift鍵,預設在開機時按shift機會顯示登入對話方塊(即使設定成自動登入),設定成1後,按shift鍵也沒用了。
- AutoLogonCount 設定自動登入次數
- ForceAutoLogon 該值要刪除掉
特別注意:
由於密碼是明文儲存的,很不安全,所以windows中提供了一個秘密的地方來儲存加密後的密碼,就是在lsa中。sysinternals中autologon工具就是把密碼儲存進去的。 在Winlogon中,它會先到lsa中用找“DefaultPassword”的資訊,找到後就用這個密碼,如果找不到就到註冊表下去找“DefaultPassword”值。
讀寫lsa的代碼,這個代碼是pinvoke.net 中找到的。原文:
http://www.pinvoke.net/default.aspx/advapi32/DefaultPassword.html
其中C++代碼由微軟提供:http://msdn.microsoft.com/en-us/library/aa378826(VS.85).aspx
C#代碼為:http://www.pinvoke.net/default.aspx/advapi32/LsaRetrievePrivateData.html
擷取LUAUtil類後,如下調用即可,
LSAutil lsa = new LSAutil("DefaultPassword");lsa.SetSecret(“abc”);Console.Write(lsa.GetSecret());