You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Python编写的7ZIP密码暴力破解代码运行过慢优化方案

解决7-ZIP暴力破解速度过慢的问题

Hey there! I totally get the frustration of slow brute-force attempts when you're so close to recovering your password. Let's break down why your current code is lagging and fix it step by step.

核心瓶颈分析

你的代码速度慢主要有三个关键原因:

  • 用错了7-Zip命令:你用的7z e是提取命令,每次尝试都要写入临时文件,磁盘IO的开销远大于密码验证本身。
  • 单线程串行执行:每次只能等一个7-Zip进程结束,完全没利用到CPU的多核能力。
  • 冗余的临时文件操作:每次尝试前删除文件的操作也会额外消耗时间。

优化方案

1. 改用7-Zip的测试命令(最立竿见影的优化)

7-Zip自带7z t命令,专门用来验证密码正确性,不会提取任何文件,直接省去了大量磁盘IO开销,这能让你的尝试速度提升数倍甚至数十倍。

替换原来的命令行,建议用列表形式传递参数(避免路径空格导致的问题):

cmd_base = [r"C:\Program Files\7-Zip\7z.exe", "t", r"C:\archive.7z", "-p"]

2. 多进程并行处理

利用Python的multiprocessing.Pool并行启动多个7-Zip进程,充分榨干CPU多核性能,同时尝试多个密码,速度能提升到接近核心数的倍数。

注意:一旦找到正确密码,要立即终止所有进程,避免做无用功。

3. 砍掉冗余操作

因为改用了7z t命令,完全不需要再处理临时文件了,直接删掉原来的文件删除逻辑即可。

优化后的完整代码

import os
import time
import itertools
import subprocess
from multiprocessing import Pool, freeze_support

# 全局变量,用于存储找到的密码(一旦找到就停止所有进程)
found_password = None

def check_single_password(password):
    global found_password
    if found_password is not None:
        return None  # 已找到密码,直接返回
    
    cmd = cmd_base.copy()
    cmd[-1] += password  # 拼接密码到命令参数
    try:
        # 启动进程,隐藏命令行窗口,设置超时避免卡住
        sp = subprocess.Popen(
            cmd,
            stderr=subprocess.STDOUT,
            stdout=subprocess.PIPE,
            creationflags=subprocess.CREATE_NO_WINDOW
        )
        stdout, _ = sp.communicate(timeout=10)
        if sp.returncode == 0:
            found_password = password
            return password
    except subprocess.TimeoutExpired:
        sp.kill()
    return None

if __name__ == "__main__":
    freeze_support()  # Windows下多进程必须加这个
    start_time = time.time()
    known_part = 'MiStup!dB'
    unknown_part = '$oz'
    cmd_base = [r"C:\Program Files\7-Zip\7z.exe", "t", r"C:\archive.7z", "-p"]
    attempts = 0
    
    # 提前生成所有可能的密码组合
    password_candidates = []
    for length in range(2, 4):
        for guess in itertools.product(unknown_part, repeat=length):
            password_candidates.append(known_part + ''.join(guess))
    
    # 用CPU核心数设置进程池大小,充分利用硬件
    with Pool(processes=os.cpu_count()) as pool:
        for result in pool.imap_unordered(check_single_password, password_candidates):
            attempts += 1
            if result is not None:
                print(f"Password is {result}, Found in {attempts} attempts in {time.time()-start_time:.2f} seconds")
                pool.terminate()  # 找到密码后立即终止所有进程
                break

额外小技巧

  • 隐藏命令行窗口:加上creationflags=subprocess.CREATE_NO_WINDOW,避免每次启动7-Zip都弹出黑窗口,减少系统开销。
  • 超时机制:给communicate()加超时时间,防止个别进程因为异常卡住。
  • 调整进程数:如果你的CPU是4核就设processes=4,8核就设8,别超过核心数太多,避免系统卡顿。

这样修改后,你的暴力破解速度应该会有质的飞跃!

内容的提问来源于stack exchange,提问作者PatheticJoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:43:20