VB 版 (精华区)
发信人: wpf (呆娃儿), 信区: VB
标 题: 破解WINDOWS屏幕保护密码
发信站: 哈工大紫丁香 (2000年05月27日18:39:32 星期六), 站内信件
发信人: Love1976 (狄飞惊), 信区: VisualBasic
标 题: 破解WINDOWS屏幕保护密码
发信站: BBS 水木清华站 (Sat May 27 04:47:34 2000)
破解WINDOWS屏幕保护密码
------------------------------------------------------------------------
--------
一日,忽然发现用自己输入的密码不能上网,知道自己的健忘症又犯了,于是
便坐下来苦苦回忆线索……只记得当初为方便记忆,上网与屏幕保护程序使用的是
同一密码。于是找出大叠资料,意欲破解屏幕保护密码!
大家都知道,屏幕保护密码最多为16个字符。微软内置了16字节的密钥:48
EE 76 1D 67 69 A1 1B 7A 8C 47 F8 54 95 97 5F。Windows便用上述密钥加密你
输入的密码。其加密过程为:首先将你输入的密码字符逐位转换为其16进制的ASC
Ⅱ码值(小写字母先转为大写字母),再依次与对应密钥逐位进行异或运算,把所
得16进制值的每一位当作字符,转换为其16进制ASCII码,并在其尾加上00作为结
束标志,存入注册表HKEY_CURRENT_USER\Control Panel\desktop下的二进制键
ScreenSave_Data中。
懂得其加密原理后,便不难编程破解我的屏幕保护密码(即上网密码)了。本
人用VB6.0编制了一读取注册表中ScrrenSave_Data值的函数GetBinaryValue(Entry
As String),读出其值为31 43 41 33 33 43 35 35 33 34 32 31 00,去掉其结束
标志00,把余下字节转换为对应的ASCII字符,并把每两个字符组成一16进制数:
1C A3 3C 55 34 21,显然,密码为6位,将其与前6字节密钥逐一异或后便得出密
码的ASCII码(16进制值):54 4D 4A 48 53 48,对应的密码明文为TMJHSH,破解
成功!用它拔号一试,呵,立刻传来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 '密码位数为(h-1)/2,根据位数选择解密过程。
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 '在文本框内显示密码。
End Sub
2、模块代码:
Option Explicit
Const ERROR_SUCCESS = 0&
Const ERROR_BADDB = 1009&
Const ERROR_BADKEY = 1010&
Const REG_EXPAND_SZ = 2&
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 '在文本框内显示密码。
End Sub
2、模块代码:
Option Explicit
Const ERROR_SUCCESS = 0&
Const ERROR_BADDB = 1009&
Const ERROR_BADKEY = 1010&
Const REG_EXPAND_SZ = 2&
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 '函数返回ScreenSave_Data的值
Else '如果读取ScreenSave_Data的值不成功
Call ErrorMsg
End
End If
Else '如果HKEY_CURRENT_USER\Control Panel\desktop键不能打开
Call ErrorMsg '调用ErrorMsg()过程
End
End If
End Function
Private Sub ErrorMsg() '显示错误信息过程
Select Case rtn
Case ERROR_BADDB
MsgBox (“您的计算机注册表有错误!")
Case ERROR_BADKEY, REG_EXPAND_SZ
MsgBox (“您的计算机未设屏保密码!")
Case Else
MsgBox (“破解过程中遇到未知错误,错误号:" & Str$(rtn))
End Select
End Sub(成都 田茂均 )
------------------------------------------------------------------------
--------
--
我并不是在等待奇迹,因为我知道没有奇迹的。
有的,也只是爱情、意志和勇气。
是这些东西的重叠后,而成为奇迹的。
所以,我从未曾想过放弃。
--
据说呆娃儿不笨
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.226.247]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.359毫秒