使用Python破解RAR文件密码的代码实例

 更新时间:2023年11月04日 08:51:00   作者:Kant101  
这篇文章主要介绍了使用Python破解RAR文件密码的代码实例,rar 压缩文件资源又不少是被加密的,密码通常也比较简单,我们可以通过暴力破解的方式来获取,通常耗时也比较小,需要的朋友可以参考下

1. 简介

rar 压缩文件资源又不少是被加密的,密码通常也比较简单,我们可以通过暴力破解的方式来获取,通常耗时也比较小。

2. 使用说明

2.1 基本语法

rar-bruteforce-crack.py [--start START] [--stop STOP] [--verbose VERBOSE] [--alphabet ALPHABET] [--file FILE]
  • –start START 设置密码长度位数的最小值;
  • –stop STOP 设置密码长度位数的最大值;
  • –verbose VERBOSE 设置是否显示破解的过程;
  • –alphabet ALPHABET 设置密码的组成集合;
  • – file FILE 设置待破解的rar压缩文件

2.1 密码长度

可以大致估算一下密码的位数,一般不会很长,绝大部分都是4 ~ 10位的密码,则 --start 4 --stop 10 .

2.2 设置是否显示破解过程

--verbose 设置为 True 时将显示破解的详细过程,默认是不显示的

2.3 设置密码的组成集合

--alphabet 用于设置密码的组成集合,默认的密码是由 0123456789 这些数字组成的。 可以根据需要设置,如设置成数字加小写字母,则 --alphabet 0123456789abcdefghijklmnopqrstuvwxyz .

2.4 设置文件

如要对 rartest.rar 这个rar压缩文件解密即解压需要设置 --file rartest.rar .

3. 例子

加密压缩

my_directory 文件夹下有3个文件 file1.txtfile2.txtfile3.txt,将 my_directory 文件夹下文件全部压缩成 rartest.rar 文件,并且使用密码:

rar a rartest.rar my_directory/* -p

两次输入压缩密码得到压缩文件 rartest.rar.

破解压缩密码

python3 rar-bruteforce-crack.py --start 4 --stop 10 --alphabet 0123456789 --file rartest.rar --verbose True

开始暴力破解

... ...

可以看到得到了压缩密码 “2351”

解压文件

unrar x rartest.rar

成功解压!

4. 代码

from argparse import ArgumentParser
from itertools import chain, product
from os.path import exists
from string import digits, ascii_lowercase, ascii_uppercase, ascii_letters, printable
from subprocess import PIPE, Popen
from time import time

chars = (
    # 默认的密码只来自数字 "0123456789"
    digits

    # 若需要更多的组合可加上如下
    # 若要加上小写英文字母 "abcdefghijklmnopqrstuvwxyz" 的排列组合
    # digits + ascii_lowercase

    # 若要加上大小写英文字母 ascii_uppercase
    # digits + ascii_lowercase + ascii_uppercase

    # 若要加上标点符号和空白号,直接用string库下的 printable
    # printable
)
special_chars = "();<>`|~\"&\'}]"

parser = ArgumentParser(description='Python combination generator to unrar')
parser.add_argument(
    '--start',
    help='Number of characters of the initial string [1 -> "a", 2 -> "aa"]',
    type=int,
)

parser.add_argument(
    '--stop',
    help='Number of characters of the final string [3 -> "aaa"]',
    type=int,
)

parser.add_argument(
    '--verbose', help='Show combintations', default=False, required=False
)

parser.add_argument(
    '--alphabet',
    help='alternative chars to combinations',
    default=chars,
    required=False,
)

parser.add_argument('--file', help='.rar file [file.rar]', type=str)

args = parser.parse_args()


def generate_combinations(alphabet, length, start=1):
    """Generate combinations using alphabet."""
    yield from (
        ''.join(string)
        for string in chain.from_iterable(
            product(alphabet, repeat=x) for x in range(start, length + 1)
        )
    )


def format(string):
    """Format chars to write them in shell."""
    formated = map(
        lambda char: char if char not in special_chars else f'\\{char}', string
    )
    return ''.join(formated)


if __name__ == '__main__':
    if not exists(args.file):
        raise FileNotFoundError(args.file)

    if args.stop < args.start:
        raise Exception('Stop number is less than start')

    start_time = time()
    for combination in generate_combinations(args.alphabet, args.stop, args.start):

        formated_combination = format(combination)

        if args.verbose:
            print(f'Trying: {combination}')

        cmd = Popen(
            f'unrar t -p{formated_combination} {args.file}'.split(),
            stdout=PIPE,
            stderr=PIPE,
        )
        out, err = cmd.communicate()

        if 'All OK' in out.decode():
            print(f'Password found: {combination}')
            print(f'Time: {time() - start_time}')
            exit()

到此这篇关于使用Python破解RAR文件密码的代码实例的文章就介绍到这了,更多相关Python破解RAR文件密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python学习之subprocess模块详解

    python学习之subprocess模块详解

    这篇文章主要介绍了python学习之subprocess模块的相关资料,该模块用于创建子进程并与其进行交互,它提供了多个函数和类来执行操作系统命令、获取命令输出以及管理子进程的生命周期,需要的朋友可以参考下
    2024-12-12
  • 完全卸载Anaconda的最新教程

    完全卸载Anaconda的最新教程

    本文主要介绍了使用anaconda-clean依赖包来完全清除Anaconda的附带文件,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • pandas dataframe rolling移动计算方式

    pandas dataframe rolling移动计算方式

    在Pandas中,rolling()方法用于执行移动窗口计算,常用于时间序列数据分析,例如,计算某商品的7天或1个月销售总量,可以通过rolling()轻松实现,该方法的关键参数包括window(窗口大小),min_periods(最小计算周期)
    2024-09-09
  • Python的Flask开发框架简单上手笔记

    Python的Flask开发框架简单上手笔记

    这篇文章主要介绍了Python的Flask开发框架的入门知识整理,Flask是一款极轻的Python web开发框架,需要的朋友可以参考下
    2015-11-11
  • python搭建项目的虚拟环境

    python搭建项目的虚拟环境

    本文主要介绍了python搭建项目的虚拟环境,主要就是在多个项目中进行一个隔离,防止包的版本冲突或者其他情况,下面就来介绍一下具体步骤,感兴趣的可以了解一下
    2024-03-03
  • python实现kNN算法

    python实现kNN算法

    这篇文章主要为大家详细介绍了python实现kNN算法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Python3 扫描库文件并获取版本号信息的操作方法

    Python3 扫描库文件并获取版本号信息的操作方法

    在 C/C++ 开发中使用了第三方库,具体说是 .a, .lib, .dll 等文件,想通过 Python 查询出这些文件中的版本号信息,下面小编给大家带来了Python3中扫描库文件并获取版本号信息的知识,需要的朋友可以参考下
    2023-05-05
  • keras 读取多标签图像数据方式

    keras 读取多标签图像数据方式

    这篇文章主要介绍了keras 读取多标签图像数据方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 教你用Python查看茅台股票交易数据的详细代码

    教你用Python查看茅台股票交易数据的详细代码

    CSV是以逗号分隔数据项(也被称为字段)的数据交换格式,主要应用于电子表格和数据库之间的数据交换,本文给大家介绍下用Python查看茅台股票交易数据的详细代码,感兴趣的朋友一起看看吧
    2022-03-03
  • python实现用户登录系统

    python实现用户登录系统

    这篇文章主要为大家详细介绍了python实现用户登录系统的相关资料,感兴趣的朋友可以参考一下
    2016-05-05

最新评论