zip密码暴力破解脚本
昨天了解到python的zipfile库,想到可以写一个暴力破解压缩密码的脚本
P.s 顺带练习markdown语法: )
主要使用zipfile库,实现多线程的暴力破解
首先是usage提示
def usage():
print('***************************************************************')
print('Crack the zip file, use args: -f :zip file name, -d dic name')
print('e.g. zip_crack.exe -f 1.zip -d dic.txt')
print('***************************************************************')
-f 指定破解的zip文件
-d 指定使用的字典文件
获取参数并解析
file_name = ''
dic_name = ''
try:
opts,args = getopt.getopt(sys.argv[1:],'f:d:')
for a,b in opts:
if a == '-f':
file_name = b
if a == '-d':
dic_name = b
crack_dic = open(dic_name,'r')
except:
usage()
sys.exit()
使用字典进行破解
try:
file_gue.extractall(pwd = i.strip('\n').encode('utf-8'))
print('[*]Successfully crack, passwd is '+i)
break
except:
pass
完整版代码
import zipfile
import getopt
import sys
import threading
def usage():
print('***************************************************************')
print('Crack the zip file, use args: -f :zip file name, -d dic name')
print('e.g. zip_crack.exe -f 1.zip -d dic.txt')
print('***************************************************************')
def crack(file_name,crack_dic,file_gue):
kv = crack_dic.readlines()
end_num = kv[-1]
for i in kv:
print('[+]try passwd:'+i)
if i.strip('\n') == end_num.strip('\n'):
try:
file_gue.extractall(pwd = i.strip('\n').encode('utf-8'))
print('[*]Successfully crack, passwd is '+i)
break
except:
print('[*]Crack fail, please change your dic')
sys.exit()
try:
file_gue.extractall(pwd = i.strip('\n').encode('utf-8'))
print('[*]Successfully crack, passwd is '+i)
break
except:
pass
crack_dic.close()
def main():
file_name = ''
dic_name = ''
try:
opts,args = getopt.getopt(sys.argv[1:],'f:d:')
for a,b in opts:
if a == '-f':
file_name = b
if a == '-d':
dic_name = b
crack_dic = open(dic_name,'r')
except:
usage()
sys.exit()
file_gue = zipfile.ZipFile(file_name)
t = threading.Thread(target = crack(file_name,crack_dic,file_gue))
t.start()
main()
代码的github地址:
github
P.s
此处有个文件操作的坑,此处代码
kv = crack_dic.readlines()
end_num = kv[-1]
for i in kv:
如果替换成两次对crack_dic进行readlines()操作,则第二次读取的将会是0字节文件,且解释器不会报错。
end_num =crack_dic.readlines()[-1]
for i in crack_dic.readlines():
考虑到压缩密码大多是四位以下,就顺手写了个密码生成脚本,包含1-4位的英文数字字符密码
import string
num = []
for i in string.uppercase+string.lowercase:
num.append(i)
for i in range(0,10):
num.append(str(i))
print(num)
fh = open('dic_weak.txt','w')
for i in num:
fh.write(i+'\n')
for i in num:
for j in num:
fh.write(i+j+'\n')
for i in num:
for j in num:
for k in num:
fh.write(i+j+k+'\n')
for i in num:
for j in num:
for k in num:
for l in num:
fh.write(i+j+k+l+'\n')
fh.close()
生成的密码字典有80M左右,共1500万行
end
此次全篇用markdown编辑,不得不说确实方便
网友评论