写代码之前先吐槽一下rarfile这个第三方工具
因为unrar的代码不公开所以python的解压工具还要依赖c的动态链接库,可非了我半天时间搜索
具体解决办法:https://blog.csdn.net/ysy950803/article/details/52939708
还有就是rarfile的extractall方法在遇到错误密码的时候竟然没有抛出异常信息,所以检查密码是否正确就只能观察解压路径下文件是否增加,感觉这个办法好蠢。。。
#暴力破解压缩包密码rar版
from unrar import rarfile
def extractfile(file,password):
try:
file.extractall(pwd=password)
except:
pass
def main():
fp = rarfile.RarFile('file.rar')
f = open('pass.txt')
print('暴力破解开始请等待......')
for line in f.readlines():
line = line.strip('\n')
print(line)
extractfile(fp,line)
print('破解结束.....')
if __name__=='__main__':
main()
这里可以升级一下,使用optparse库让rar文件、字典文件以参数的形式传给python代码
升级版
#暴力破解压缩包密码rar版
from unrar import rarfile
import optparse
def extractfile(file,password):
try:
#print(password)
file.extractall(pwd=password)
except:
pass
def main():
parser = optparse.OptionParser("Usage%org"+"-f -d ")
parser.add_option("-f",dest="rfile",type="string",help="specify rar file")
parser.add_option("-d",dest="dfile",type="string",help="specify dictionary file")
(option,args) = parser.parse_args()
rfile = option.rfile
dfile = option.dfile
if(rfile==None or dfile==None):
print(parser.usage)
exit(0)
fp = rarfile.RarFile(rfile)
f = open(dfile)
print('暴力破解开始请等待......')
for line in f.readlines():
line = line.strip('\n')
#print(line)
extractfile(fp,line)
print('破解结束.....')
if __name__=='__main__':
main()
示例:
带解压文件和.py文件 字典 在同一目录
cmd输入命令:
破解成功:
后记
暴力破解依赖于字典中有正确密码,如果压缩包密码特别复杂或者干脆用中文当密码破解的可能性就比较小了
这里找到一个更好的解决方法
https://blog.csdn.net/ddxwltan/article/details/76551168