徐松亮Python教学-黑客篇-zip压缩文件的破解

版权声明:本文为博主徐松亮的原创作品,未经允许不得转载,多谢支持!QQ:5387603

推荐点击此链接:欢迎进入徐松亮博客一站式导航搜索(随时更新)


首先,此文档已学习为主,不要用来随意破解别人的zip文件。其次,你想破解也破解不了,千万不要以为这么多人用的保密文件方式,靠本文几句话就给破解啦,那是扯淡!上面两句话是不是互相矛盾?哈哈,本文介绍的是字典破解和暴力破解,字典破解就是有个密码集,挨个试,说破解不了是因为你怎么建立密码集?暴力破解就是完全穷举,如果密码只是几位数字还好说,如果是字母数字加符号的长密码,需要的时长估计你在有限的生命里是够呛能看到结果啦,闲言少叙,进入正题!

目录

一,概念

字典破解

暴力破解

二,准备工作

建立用于字典破解的字典文件

建立用于字典破解的密码文件

建立用于穷举破解的密码文件

三,代码讲解

字典破解

暴力破解

四,源码

五,运行效果

六,注意事项


一,概念

  • 字典破解

    • 建立一个密码集,程序通过读取密码集的每条数据作为密码来逐个尝试。
  • 暴力破解

    • 根据条件穷举所有的可能性,比如4为数据密码就是从0000~9999挨个实验

二,准备工作

  • 建立用于字典破解的字典文件

    • 新建文本文件:xsl_hacker_1_crackzip.txt,因为只是用于实验,我们只加入以下少量密码集。
  • 建立用于字典破解的密码文件

    • 用任意一种zip软件,压缩任意文件,压缩的时候加上压缩密码(从上面的字典里选取,本示例是用的xslxhn),压缩后的文件名称为:xsl_hacker_1_crackzip.zip
  • 建立用于穷举破解的密码文件

    • 用任意一种zip软件,压缩任意文件,压缩的时候加上压缩密码99999(因为在本例中我们做暴力破解实验是从0-9,00-99,000-999,0000-9999,00000-99999这些数据段逐个尝试,设置到最末尾,我们可以了解到破解5以内数字密码的计算机单线程最长时间),压缩后的文件名称为:xsl_hacker_1_crackzip99999.zip

三,代码讲解

  • 字典破解

  • 暴力破解

四,源码

  • #!/usr/bin/python
    #--------------------------------------------------
    #                       徐松亮编写
    #--------------------------------------------------
    import sys              # 系统
    import time             # 时间
    import zipfile          # 压缩与解压缩
    import threading        # 多线程
    #--------------------------------------------------	
    StrLine = "--------------------"
    LineNum = 1
    #--------------------------------------------------
    #                       字典破解
    #--------------------------------------------------
    crackzip_str_zipfileName = "xsl_hacker_1_crackzip.zip"
    crackzip_str_passfileName = "xsl_hacker_1_crackzip.txt"
    #
    print (StrLine,LineNum,"-字典破解解压zip文件")
    LineNum+=1
    
    zipfile_state=0
    timeout=0
    
    # fun:extract file
    def extractFile(zFile, password):
        try:
            global zipfile_state 
            zFile.extractall(pwd=str.encode(password))
            print('\nFound Password = ' + password + '\n')
            zipfile_state=1
        except:
            pass
    # open zip file
    zfile = zipfile.ZipFile(crackzip_str_zipfileName)
    # open dictionaries
    passfile=open(crackzip_str_passfileName)
    # read passfile line
    for line in passfile.readlines():
            # strip \n
            password = line.strip('\n')
            # run thread extract file
            t = threading.Thread(target=extractFile, args=(zfile, password))
            # run thread
            t.start()
    # waiting finish
    while zipfile_state==0:
            timeout=timeout+1
            if timeout>10:
                    break
            else:
                    time.sleep(1)
    # file close        
    passfile.close()
    zfile.close()
    #--------------------------------------------------
    #                       暴力破解
    #--------------------------------------------------
    crackzip_str_zipfile99999Name = "xsl_hacker_1_crackzip99999.zip"
    #
    print (StrLine,LineNum,"-暴力破解解压zip文件")
    print ("5位数字暴力破解(单线程) 包括0-9 00-99 000-999 0000-9999 00000-99999")
    zfile = zipfile.ZipFile(crackzip_str_zipfile99999Name)
    password=0
    zipfile_state=0;
    ticks_begin = time.time()
    zfile_cmt=0;
    # fun:
    def str_setlen(d,l):
            s=str(d)
            while len(s) < l:
                    s='0'+s
            return s
    for num in range(1,6):
            password=0
            dmax = pow(10,num)-1
            while 1:
                    extractFile(zfile,str_setlen(password,num))
                    password = password+1
                    zfile_cmt = zfile_cmt+1
                    if password>dmax or zipfile_state==1:
                            break;
                    if zfile_cmt%1000==0:
                            print("%02d %%" % int((zfile_cmt*100)/(9+99+999+9999+99999)))
    ticks_end = time.time()                
    if zipfile_state==0:
            print ("单线程暴力破解失败 耗时(秒)=%d" % int(ticks_end-ticks_begin))
    else:
            print ("单线程暴力破解成功 耗时(秒)=%d" % int(ticks_end-ticks_begin))
    zfile.close()
    '''
    print ("5位数字暴力破解(多线程)")
    zfile = zipfile.ZipFile('zip_99999.zip')
    password=0
    zipfile_state=0;
    ticks_begin = time.time()
    while(1):
            t = threading.Thread(target=extractFile, args=(zfile, str_setlen(password,5)))
            t.start()
            password = password+1
            if zipfile_state==1:
                    break
    while zipfile_state==0:
            if zipfile_state==1:
                    break
            else:
                    time.sleep(1)
    ticks_end = time.time()                
    if zipfile_state==0:
            print ("多线程暴力破解失败 耗时(秒)=%d" % int(ticks_end-ticks_begin))
    else:
            print ("多线程暴力破解成功 耗时(秒)=%d" % int(ticks_end-ticks_begin))
    zfile.close()
    '''
    del zfile
    del passfile
    del zipfile_state
    del ticks_begin
    del ticks_end
    del zfile_cmt
    #--------------------------------------------------
    sys.exit()
    #--------------------------------------------------
    
    
    

五,运行效果

六,注意事项

  • 所有文件必须放到同一目录下。
  • 暴力破解的多线程解决方案在源码中已经被屏蔽,不用开启了,开启也不好使。
  • 本文的运行环境是在windows10+python3.7。
发布了28 篇原创文章 · 获赞 81 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/xslxhn/article/details/83543283
今日推荐