破解Windows屏幕保護(hù)密碼
發(fā)表時(shí)間:2023-07-28 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]作者:田茂均 大家都知道,屏幕保護(hù)密碼最多為16個(gè)字符。微軟內(nèi)置了16字節(jié)的密鑰:48 EE 76 1D 67 69 A1 1B 7A 8C 47 F8 54 95 97 5F。Windows便...
作者:田茂均
大家都知道,屏幕保護(hù)密碼最多為16個(gè)字符。微軟內(nèi)置了16字節(jié)的密鑰:48 EE 76 1D 67 69 A1 1B 7A 8C 47 F8 54 95 97 5F。Windows便用上述密鑰加密你輸入的密碼。其加密過程為:首先將你輸入的密碼字符逐位轉(zhuǎn)換為其16進(jìn)制的ASCⅡ碼值(小寫字母先轉(zhuǎn)為大寫字母),再依次與對(duì)應(yīng)密鑰逐位進(jìn)行異或運(yùn)算,把所得16進(jìn)制值的每一位當(dāng)作字符,轉(zhuǎn)換為其16進(jìn)制ASCII碼,并在其尾加上00作為結(jié)束標(biāo)志,存入注冊(cè)表HKEY_CURRENT_USER\Control Panel\desktop下的二進(jìn)制鍵ScreenSave_Data中。
懂得其加密原理后,便不難編程破解我的屏幕保護(hù)密碼(即上網(wǎng)密碼)了。本人用VB6.0編制了一讀取注冊(cè)表中ScrrenSave_Data值的函數(shù)GetBinaryValue(Entry As String),讀出其值為31 43 41 33 33 43 35 35 33 34 32 31 00,去掉其結(jié)束標(biāo)志00,把余下字節(jié)轉(zhuǎn)換為對(duì)應(yīng)的ASCII字符,并把每?jī)蓚(gè)字符組成一16進(jìn)制數(shù):1C A3 3C 55 34 21,顯然,密碼為6位,將其與前6字節(jié)密鑰逐一異或后便得出密碼的ASCII碼(16進(jìn)制值):54 4D 4A 48 53 48,對(duì)應(yīng)的密碼明文為TMJHSH,破解成功!用它拔號(hào)一試,呵,立刻傳來Modem歡快的叫聲。
附VB源程序:(程序中使用了窗體Form1,文本框Text1,命令按鈕Command1)
1、窗體代碼:
Option Explicit
Dim Cryptograph As String
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim CryptographStr(32) As Integer
Dim PWstr As String
Dim PassWord As String
Private Sub Command1_Click()
PWstr = “"
PassWord = “"
Text1.Text =“"
Cryptograph = GetBinaryValue(“ScreenSave_Data")
k = Len(Cryptograph)
For j = 1 To k - 1
For i = 32 To 126
If Mid(Cryptograph, j, 1) = Chr(i) Then
CryptographStr(j) = i
End If
Next i
Next j
i = (k - 1) / 2 '密碼位數(shù)為(h-1)/2,根據(jù)位數(shù)選擇解密過程。
Select Case i
Case 16
GoTo 16
Case 15
GoTo 15
Case 14
GoTo 14
Case 13
GoTo 13
Case 12
GoTo 12
Case 11
GoTo 11
Case 10
GoTo 10
Case 9
GoTo 9
Case 8
GoTo 8
Case 7
GoTo 7
Case 6
GoTo 6
Case 5
GoTo 5
Case 4
GoTo 4
Case 3
GoTo 3
Case 2
GoTo 2
Case 1
GoTo 1
Case Else
End
End Select
16: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(31)) & Chr(CryptographStr(32))) Xor &H5F)
15: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(29)) & Chr(CryptographStr(30))) Xor &H97)
14: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(27)) & Chr(CryptographStr(28))) Xor &H95)
13: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(25)) & Chr(CryptographStr(26))) Xor &H54)
12: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(23)) & Chr(CryptographStr(24))) Xor &HF8)
11: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(21)) & Chr(CryptographStr(22))) Xor &H47)
10: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(19)) & Chr(CryptographStr(20))) Xor &H8C)
9: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(17)) & Chr(CryptographStr(18))) Xor &H7A)
8: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(15)) & Chr(CryptographStr(16))) Xor &H1B)
7: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(13)) & Chr(CryptographStr(14))) Xor &HA1)
6: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(11)) & Chr(CryptographStr(12))) Xor &H69)
5: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(9)) & Chr(CryptographStr(10))) Xor &H67)
4: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(7)) & Chr(CryptographStr(8))) Xor &H1D)
3: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(5)) & Chr(CryptographStr(6))) Xor &H76)
2: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(3)) & Chr(CryptographStr(4))) Xor &HEE)
1: PWstr = PWstr & Chr((“&H" & Chr(CryptographStr(1)) & Chr(CryptographStr(2))) Xor &H48)
For i = i To 1 Step -1 '所得PWstr的值為密碼的倒序列,將其倒置便得出密碼。
PassWord = PassWord & Mid(PWstr, i, 1)
Next i
Text1.Text = PassWord '在文本框內(nèi)顯示密碼。
End Sub
2、模塊代碼:
Option Explicit
Const ERROR_SUCCESS = 0&
Const ERROR_BADDB = 1009&
Const ERROR_BADKEY = 1010&
Const REG_EXPAND_SZ = 2&
Const REG_BINARY = 3&
Const KEY_QUERY_VALUE = &H1&
Const KEY_ENUMERATE_SUB_KEYS = &H8&
Const KEY_NOTIFY = &H10&
Const READ_CONTROL = &H20000
Const STANDARD_RIGHTS_READ = READ_CONTROL
Const KEY_READ = STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY
Const HKEY_CURRENT_USER = &H80000001
Dim hKey As Long, MainKeyHandle As Long
Dim rtn As Long, lBuffer As Long, sBuffer As String, SubKey As String
Dim lBufferSize As Long
Declare Function RegOpenKeyEx Lib “advapi32.dll" Alias “RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Declare Function RegCloseKey Lib “advapi32.dll" (ByVal hKey As Long) As Long
Declare Function RegQueryValueEx Lib“advapi32.dll" Alias“Reg QueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
Function GetBinaryValue(Entry As String)
MainKeyHandle = HKEY_CURRENT_USER
SubKey = “Control Panel\desktop\"
rtn = RegOpenKeyEx(MainKeyHandle, SubKey, 0, KEY_READ, hKey)
If rtn = ERROR_SUCCESS Then '如果HKEY_CURRENT_USER\Control Panel\desktop鍵被成功打開
lBufferSize = 1
rtn = RegQueryValueEx(hKey, Entry, 0, REG_BINARY, 0, lBufferSize) '讀取ScreenSave_Data的值
sBuffer = Space(lBufferSize)
rtn = RegQueryValueEx(hKey, Entry, 0, REG_BINARY, sBuffer, lBufferSize)
If rtn = ERROR_SUCCESS Then '如果讀取ScreenSave_Data的值成功
rtn = RegCloseKey(hKey)
GetBinaryValue = sBuffer '函數(shù)返回ScreenSave_Data的值
Else '如果讀取ScreenSave_Data的值不成功
Call ErrorMsg
End
End If
Else '如果HKEY_CURRENT_USER\Control Panel\desktop鍵不能打開
Call ErrorMsg '調(diào)用ErrorMsg()過程
End
End If
End Function
Private Sub ErrorMsg() '顯示錯(cuò)誤信息過程
Select Case rtn
Case ERROR_BADDB
MsgBox (“您的計(jì)算機(jī)注冊(cè)表有錯(cuò)誤!")
Case ERROR_BADKEY, REG_EXPAND_SZ
MsgBox (“您的計(jì)算機(jī)未設(shè)屏保密碼!")
Case Else
MsgBox (“破解過程中遇到未知錯(cuò)誤,錯(cuò)誤號(hào):" & Str$(rtn))
End Select
End Sub