版权声明:本文为博主徐松亮的原创作品,未经允许不得转载,多谢支持!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。