python多线程暴力破解压缩包

python多线程暴力破解压缩包

网上下载下来别人共享的压缩包有时会有密码,而且多半是弱口令;有人经常会忘记自己的几位密码,只记得大概格式…遇到诸如此类情况的时候,你或许就需要一个暴力破解工具了。

0x01 基于python2.7的暴力破解脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import zipfile
import optparse
from threading import Thread
def extractFile(zipFile,password):
try:
zipFile.extractall(pwd=password)
print 'password is:'+password + '\n'
except:
pass
def main():
parser = optparse.OptionParser()
parser.add_option('-f',dest='zname',type='string',help="zipfile name")
parser.add_option('-d',dest='dname',type='string',help="dictionary name")
(options,args)= parser.parse_args()
if(options.zname==None)|(options.dname==None):
print '---wrong input!---'+'\n'
exit(0)
else:
zname = options.zname
dname = options.dname
zipFile = zipfile.ZipFile(zname)
passFile = open(dname)
for line in passFile.readlines():
password = line.strip('\n')
t = Thread(target=extractFile,args=(zipFile,password))
t.start()
if __name__ =='__main__':
main()

代码如上,我们用到了三个库:

  • zipfile模块用来做zip格式编码的压缩和解压缩的,要解压zip文件当然需要用到这个库。
  • threading模块是用来创建线程的,我们为了加快破解速度要使用多线程。
  • optparse模块用来处理命令行参数,这样就不会出现每次需要改代码或者交到别人手中不会用的问题。

我们在main函数中读取命令行传递过来的压缩文件名和字典文件名,用open命令读取字典,然后创建线程并在extractFile函数中尝试字典,密码正确则返回密码的值。
一些函数的具体用法 :

0x02 制作字典

首先,我们下载一个名为“木头超级字典工具集”的软件,这里可以生成各种各样类型的字典,可以选择密码包含的字符集以及设定已知的每一位,还有一些特殊的字典。

我在这里创建了一个一到四位的纯数字密码做实验,字典里面也可以随意加入自己想测试的密码,但要注意字典的最后面要空一行。

0x03 测试

我们先添加一个压缩文件,嗯,为了节约时间密码就设置成紫的年龄了。

然后在压缩文件和字典的目录按shift+鼠标右键在当前目录打开命令行

然后测试一下,成功得到密码

实际上,真正用到暴力破解的时候不多,因为穷举法十分耗费时间,而且现今稍具严密度的密码验证机制都会设下试误的可容许次数以应对使用密码穷举法的破解者。当试误次数达到可容许次数时,密码验证系统会自动拒绝继续验证,有的甚至还会自动启动入侵警报机制。不过在面对弱口令的时候还是十分有效的。