自己动手制破解软件的方法

自己动手破解软件

一、起因

有一次在用啊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

相关文档
最新文档