最近恰好有个压缩包要解密,所以稍微研究了一下该怎么去破解加密的压缩包(zip,rar在道理上是一样的)。由于现有的方法中没想到高级的破解方式,所以只有暴力破解压缩包了。
暴力破解压缩包的原理很简单,就是先制作一个密码字典,这个字典是暴力破解的核心,首先就来讲讲如何制作这样一个密码字典,对于一个加密压缩包,我们首先需要猜测的是真实密码会是哪种类型,比如说有纯数字类型(0-9)、纯字母类型(a-z,A-Z)、特殊符号(*&……%…¥)、各种类型相互夹杂的特殊类型。
下面直接上干货(以纯数字为例):
import itertools
import string
import time
paswd_candidate_dict=list(itertools.permutations(['0','1','2','3','4','5','6','7','8','9',],4))
paswd_dict=[]
start=time.clock()
for k in paswd_candidate_dict:
list_i=list(k)
paswd_candidate=''.join(list_i)
file=open('C:/Users/Admin/Desktop/i.txt','r+')
file.read()
file.write('\n'+paswd_candidate)
file.close()
end=time.clock()
print("time :",round(((end-start)/60),2),"min")
上述代码中,可以看到是假设密码是由纯数字构成的,并且密码只有四位数,paswd_candidate_dict这个就是从0-9之中排列出四个数字的全排列,很明显排列出来的数字都是各不相同的,如果密码中有叠字(1111)这种的话,就需要将上述列表复制4次后再放到列表中候选,也就是说为了一次成功就要看真实密码是多少位数字,0-9就需要多少遍。OK,到这里就已经制作好了需要的密码字典。
接下来就是不断的迭代过程了,从i.txt中不断的读取每一行候选密码,送到压缩包去尝试,直到最终破解出密码。至于具体过程已经有了一位同学写出来了[密码破解]
上面的版本很容易看出,所选数字是没有重复的,所以下面是加强版的秘钥字典:
candidate_list = ['0','1','2','3','4','5','6','7','8','9']
file=open('C:/Users/Admin/Desktop/i.txt','r+')
for i in candidate_list:
for j in candidate_list:
for z in candidate_list:
for k in candidate_list:
key = i+j+z+k
file.read()
file.write('\n'+key)
file.close()
代码中的循环次数由密码位数决定!比如密码有四位的话,那么就有四层循环,如果是5位密码的话,那么只需要在此例上再添加一个循环即可。
candidate_list中的字符由密码字符决定,此例中假设密码由纯数字组成,如果有字幕的话,那么:candidate_list = ['0','1','2','3','4','5','6','7','8','9,'a’,'b','c',...,'z']
文中的file=open('C:/Users/Admin/Desktop/i.txt','r+')
中使用的TXT需要先创建好,输入对应的绝对路径即可。
(https://blog.csdn.net/hhhhh_51/article/details/87118028)
本例仅供学习科研,千万不可用于非法途径!