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毫秒