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) breakexcept: pass
完整版代码
import zipfileimport getoptimport sysimport 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
作者:Eddie_Ivan
链接:https://www.jianshu.com/p/cc65175cedbb
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦