自己动手制破解软件的方法
自己动手破解软件
一、起因
有一次在用啊D入侵网站时,管理入口、用户名和密码的MD5值都已经猜到了,只是拿到MD5网站上一查,居然要收费,如图:
我可是穷光蛋一个,没什么钱,只好放弃这个网站了。
二、思考
我越想越不甘心,忽然想起MD5解密的意义:
由于MD5是一种不可逆的编码算法,因此要“还原”出原始密码就只能用穷举法。
所以只能说用穷举“还原”法,没有真正意义上的解密。
这样思路就出来了:编一个程序,逐行读入字典里的明文,加密成密文,与已知密文比较,相同的话就输出此行的明文。
于是程序的界面就出来了:
现在问题又来了——这进度应该怎样显示?
现在有两个方案:
1.先读一遍文件,再用“已测试行数/总文件行数”计算出进度。这个方案的优点是:显示准确,缺点是:速度减慢了近1/3。
2.创建一个一行的文件,储存6个标准Ascii字符,再用“该文件大小/字典大小*已测
试条数”算出进度。这个方案的优点是:可以做到加速,缺点是:显示不一定准确。
最后一个问题:在循环的时候数据不会被刷新,如图:
这个问题可以用闲置循环DoEvents语句解决。
三、实践
全部代码如下(配有注释):
Dim jindu, m As Double '进度计算变量
Dim zidian_md5 As String '存放一条字典明文的MD5值
Dim zidian_str As String '存放一条字典明文
Dim yizhi_md5 As String '存放已知MD5密文
Private Sub Command1_Click()
Label6.Caption = "破解结果:未知" '显示初始化
yizhi_md5 = Text1.Text '取已知MD5密文
yizhi_md5 = LCase(yizhi_md5) '有可能是大写的,为了统一格式及编程方便,将其一律转为小写
m = 0 '初始化进度计算变量
On Error GoTo err1 '异常处理
Open App.Path & "\dictionary.txt" For Input As #1 '打开字典文件
'_______________________________________________________________________
Do While Not (EOF(1)) ' 循环至文件尾
Line Input #1, zidian_str '读入一行
m = m + 1 '进度计算变量加1
jindu = Round((FileLen(App.Path & "\howbig.txt") / LOF(1)) * 100 * m, 0) '取现在进度的百分比
zidian_md5 = LCase(Md5_String_Calc(zidian_str)) '将"Md5_String_Calc"函数
的返回结果转为小写并写入zidian_md5
DoEvents '闲置循环,用以刷新数据
Label5.Caption = "状态:" & "测试" & zidian_str '给用户信息反馈,使用户不
焦急等待
Label4.Caption = jindu & "%" '显示进度百分比
If (zidian_md5 = yizhi_md5) Or (LCase(zidian_md5) = yizhi_md5) Then '若
已知密文与字典里这一行的明文MD5吻合
Label6.Caption = "破解结果:" & zidian_str '显示字典中这一行的明文
GoTo finsh '跳出循环,并执行显示\变量初始化
End If
Loop
'___________________________________________________________________
Close #1 '关闭文件
'___________________________________________________________________
finsh:
Close #1
Label5.Caption = "状态:闲置"
Label4.Caption = "0%"
' 功能:查找完成后的初始化
Exit Sub
err1:
MsgBox "程序因为意外原因终止!可能是你没有将字典文件挂载到目录下!" & Chr(13) &
Chr(10) & "挂载字典文件的方法:将字典文件替换本文件夹下的“dictionary.txt”" '错误提示语
End Sub
四、拓展
关于这个字典文件的生成:
1.在本文件夹下新建文本文档,命名为"dictionary.txt",然后在里面住行输入可能的MD5
明文。
2.通过网络上的字典生成器生成,存放在本文件夹下,命名为"dictionary.txt"。(注意:
该文件中存放明文) /*推荐使用此方法*\
3.若密码只有5位,打开本文件夹下"5位数英文字母字典生成器.exe"(打开后单击便开始
生成,需要耐心等待)
“5位数英文字母字典生成器”源码如下:
Dim a, b, c, d, e As Integer
Dim str As String
'---------------------------
Open App.Path & "\dictionary.txt" For Append As #1
For a = 48 To 122
For b = 48 To 122
For c = 48 To 122
For d = 48 To 122
For e = 48 To 122
str = Chr(a) & Chr(b) & Chr(c) & Chr(d) & Chr(e) Print #1, str
Next e
Next d
Next c
Next b
Next a
Close #1