一、前言

下载一本电子书,打开一瞧要密码,正准备给钱了事呢,发现收钱的图片挂了…上网找个破解软件嘛,很多的,可惜都要小钱钱…我要看个书就这么难吗?所以有了本文。
这种事情不是Python的强项,是最弱项。应该找C哥来干的,可C哥写起来麻烦,弄出个能用的程序,我去买本书都快递来了~(主要是手艺不行哈)所以就用 Python试试吧。小P出名的快手嘛。

二、开始

要破解首先得有密码本,这个重复造轮子是没必要滴。网上有很多同鞋已经造了很多好用的轮子,这里选了骨灰家的轮子(Linux版)。随便生成了一个密码本,共约1800多个密码,文件名为dic,其实就是个文本文件,每行一个密码。并把我正确的密码藏在文件最后用来测试软件。

from threading import Thread
from unrar import rarfile
import os
import timefile_path = './aaa.rar'     # 需要破解的文件路径,这里仅对单个文件进行破解
output_path = './extract/'  # 解压输出文件路径
dict_path = './dic'         # 字典文件def get_pw(dict_path):      # 从字典读取文件,生成跌代器with open(dict_path, 'r') as f:for pwd in f:yield pwd.strip()

上面的代码很简单,读取文件,做一个迭代器。主要考虑密码本很大的情况,这两千来个测试密码可以一次性读入内存,那种几十G的密码本可没法这么做。

下面的代码就是破解代码了:
这里要注意的是,unrar这个包要装,笔者这是ubuntu 1804
用pip3 install unrar (此命令注意权限) 就装好了,但是光这样还是不行的。会提示 Couldn’t find path to unrar library…的错误
在https://github.com/matiasb/python-unrar 项目官方文档上有答案:
请参考文档Install UnRAR library的说明。
大致就是本python项目需要官方库,如下(注意权限):

  1. RARLab官方下载库文件,http://www.rarlab.com/rar/unrarsrc-5.2.6.tar.gz ;(最新版5.9.1应该也是可以的,笔者这里是5.4.5)

2.tar -zxvf unrarsrc-5.2.6.tar.gz ->> cd unrar ->> sudo make lib ->> sudo make install-lib (make不了的装g++,sudo apt install g++)
在 /usr/lib 目录下面会产生产生 libunrar.so 文件;

  1. 添加环境变量,编辑文件:
    sudo vi /etc/profile
    在最后面添上: export UNRAR_LIB_PATH=/usr/lib/libunrar.so

  2. 保存退出后,运行:source /etc/profile

  3. 如果还不行呢:则在~目录下的.bash_profile中配置环境变量,如上面所示一致。还不行就重启一下,保你OK。

def dec_pwd(file_path, output_path, pwd):# 传入被解压的文件路径,生成待解压文件对象file = rarfile.RarFile(file_path)# 输出解压后的文件路径out_put_file_path = './extract/{}'.format(file.namelist()[0])# 尝试解压文件file.extractall(path=output_path, pwd=pwd)try:# 删除解压后的第一个文件,用来测试是否成功os.remove(out_put_file_path)# 上一句被执行,说明当前密码有效,并告知print('Find password is "{}"'.format(pwd))end = time.time()print('程序耗时{}'.format(end - start))return Trueexcept Exception as e:# 如果删除文件出错passif __name__ == '__main__':pwds = get_pw(dict_path)start = time.time()while True:     # 单线程版本 运行时好看 没有错误提示pwd = pwds.__next__()print(pwd)try:dec_pwd(file_path, output_path, pwd=pwd)except:continueend = time.time()print('程序耗时{}'.format(end - start))

以下提供多线程版本:最后的while True:这里开始替换就行

    while True:    # 多线程版本,实测比下面的单线程版快45% 运行时会有很多异常提示,不影响使用try:pwd = pwds.__next__()th = Thread(target=dec_pwd, args=(file_path, output_path, pwd))th.start()except:pass

三、总结

代码还是比较简单的,结合注释我想是比较容易看明白的。这是本人实际测试的,在写代码前也想着去找找现成代码,结果大多都不靠谱!而且无数文章全长一样,当真是
天下文章全靠抄,靠不靠谱都要抄…
在笔者的I5,8G,固态硬盘,Ubuntu1804的ThinkPad笔记本上,单线程版解出密码用时363秒左右,平均每秒才约5个…多线程版解出密码用时190秒,平均每秒也不到10个…
最后老实地掏钱去买实体书吧!本程序适用于你自己设置的密码却又忘记了但记得个大概的情况,也可以用来试试弱密码。只要字典做得好,还是有点机会的!

附多线程测试图片

原创文章,未经许可,严禁转载

Python爆力破解rar密码并对比多线程的效率相关推荐

  1. python暴力破解压缩包密码(python暴力破解zip压缩包)

    python暴力破解压缩包密码 简介 简介: ZIP文件格式是一种数据压缩和文档储存的文件格式,原名Deflate,发明者为菲尔·卡茨(Phil Katz),他于1989年1月公布了该格式的资料.ZI ...

  2. python字典破解zip密码

    python字典破解zip密码 思路 代码 思路 1.用密码字典暴力破解 2.可以根据个人信息设置专用的字典,需要用到itertools工具包来实现排列组合 博主用的字典 代码 已加密压缩文件'sec ...

  3. Python练习-破解wifi密码

    #是这样的,本想着自己写点啥东西,用python,发现转一圈不知道啥好.就抱着学习的态度,研究了以下破解wifi密码的代码 先贴上代码,然后一段段分析 # coding:utf-8from tkint ...

  4. cRARk的使用,破解rar密码

    cRARk的使用,破解密码 官网下载地址 1.解压密码为空 或 UTF-16 2.解压后,双击安装注册表文件 driver-timeout.reg 3.复制一个english.def,重命名passw ...

  5. hashcat 破解RAR密码操作使用记录

    因为忘记了一个重要rar文件的密码,怎么都想不起来了,只好翻工具把密码给找出来了 这次用的是hashcat v6.2.6 官网下载地址戳这里hashcat - advanced password re ...

  6. Python遍历破解FTP密码,并上传webshell

    使用来自ftplib包的FTP模块,就可以轻松暴力输入FTP密码,进行破解,下面为了方便演示,使用用户名为admin来测试 网上一时没有找到可以使用的FTP站点,所以自己搭建一个FTP服务器测试下,官 ...

  7. 用python暴力破解压缩包密码

    import rarfile import random import time import sysclass MyIterator():# 单位字符集合letters = '0123456789' ...

  8. Python暴力破解wifi密码,你看了你也行

    免责声明 本文仅供参考,不建议您将此代码用于不想要的实践,否则本文/博客的作者将不承担任何责任. 需要打包好的软件关注小编,QQ群:721195303领取. 让我们开始吧 import subproc ...

  9. python暴力破解wifi密码原理

    首先,用python 函数生成一个类似的密码本,这里是5位数的,12345,qwert ,---,密码本结束完后会讲数据储存在超级密码本里],然后导入那个超级密码本再进行另一个函数比对,如果比对成功则 ...

  10. python暴力破解zip密码文件

    原理非常简单,不说了直接上代码 update:说一些注意点,python3.x 下的string不支持bytes编码方式,而python2.x下是支持的.encode(),和decode()方法就是进 ...

最新文章

  1. 课程实验代码及动手动脑测试
  2. numpy 修改数组维度
  3. aspnet中操作excel报com错误的解决方法
  4. 24.Interpreter-解释器模式
  5. POJ1226 Substrings(二分+后缀数组)
  6. lost connection to MySQL server at waiting for initial communication packet,system error:o
  7. 编程语言的发展趋势及未来方向(4):动态语言
  8. adb打开网页_android 使用指定浏览器打开网页
  9. Microblogging Freedom
  10. bzoj 1293: [SCOI2009]生日礼物
  11. 多项分布(一种离散分布)
  12. 武汉市最好的计算机专科学校,武汉中专排名前十位_武汉最好的3加2学校_武汉中专技校有哪些_计算机平面设计_365导学网...
  13. html改变按钮形状6,6个HTML5/CSS3按钮悬停边界旋绕动画
  14. TypeError: decoding str is not supported
  15. 360极速浏览器取消默认迅雷下载的正确方法
  16. java ping域名
  17. world分节及分节首页分节页码总页码设置方法
  18. 组合数学(4)——拉丁方矩阵
  19. 计算机蓝屏代码0xc0000020,Win10运行程序提示“损坏的映像 错误0xc0000020”解决方法图文教程...
  20. 如何给 Windows 和 npm 加上 socks 代理

热门文章

  1. 从IAP升级到涂鸦OTA升级介绍 (下)
  2. 贪心算法 Y 美味酸奶
  3. 修电脑入门名词及等级划分
  4. EhCache初体验
  5. 毕业设计-两轮自平衡小车主控板
  6. 三种文本特征提取(TF-IDF/Word2Vec/CountVectorizer)
  7. Mixly-呼吸灯及可调灯
  8. 录制软件obs的使用方法
  9. 图像的旋转——imrotate
  10. halfstone 原理_打水漂的原理研究