有时从网盘或 p2p 下载了几个 G 的资源,下载了几天,终于下载完成,结果发现还需要密码,有链接可以联系上传人,结果链接失效,这时候我们可以使用 Python 编写一个简单的程序来尝试破解 RAR 压缩包的密码。
在开始编写破解程序之前,我们需要了解一些 Python 库,这些库可以帮助我们处理 RAR 文件和密码破解过程。
rarfile 是一个用于处理 RAR 文件的 Python 库。它提供了读取、解压缩和写入 RAR 文件的功能。要使用这个库,首先需要安装:
pip install rarfile
itertools 是一个 Python 标准库,提供了许多用于处理迭代对象的函数。在密码破解过程中,我们可以使用 itertools 生成可能的密码组合。无需额外安装。
更多内容可以学习《测试工程师 Python 工具开发实战》书籍、《大话性能测试 JMeter 实战》书籍
接下来,我们将编写一个简单的 Python 程序来暴力破解 RAR 压缩包的密码。程序的主要步骤如下:
下面是完整的 Python 代码:
import os
import rarfile
from itertools import product, permutations, combinations_with_replacement
def generate_passwords(length, characters):
"""生成指定长度和字符集的可能密码组合"""
if length == 1:
return characters
else:
passwords = []
for c in characters:
for p in generate_passwords(length - 1, characters):
passwords.append(c + p)
return passwords
def try_decrypt(file_path, password):
"""尝试使用给定密码解压RAR文件"""
with rarfile.RarFile(file_path) as rf:
try:
rf.extractall(pwd=password)
return True
except rarfile.BadRarFile:
return False
except Exception as e:
print(f"Error: {e}")
return False
def main():
# RAR文件路径和密码长度限制
file_path = "example.rar"
password_length = 4
max_attempts = 1000000000000000000000000000000000000000000000000000000000000000 # 设置一个足够大的上限值,以防止程序过早终止
characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789" # 可以根据实际情况修改字符集
passwords = generate_passwords(password_length, characters)
for password in passwords:
if try_decrypt(file_path, password):
print(f"Found password: {password}")
break
if len(passwords) > max_attempts:
print("Exceeded maximum attempts. Please try a shorter password length or increase the maximum attempts.")
break
else:
print("No valid password found.")
if __name__ == "__main__":
main()
先构建一个四位的压缩包,字符集采用密码字符集的全排列,包含大小写字母,数字和特殊字符。图片运行代码,4 位的密码有 7 千多万组件,占用内存 5 个多 G,start password length: 4, passwords num: 78074896,破解 10 位的 RAR 密码大概只要 6000 年,所以本代码仅供学习使用。
注意事项