继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

zip压缩文件密码暴力破解脚本

绝地无双
关注TA
已关注
手记 211
粉丝 59
获赞 324

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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP