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

网络安全实验室:优化用户名密码爆破Python代码运行效率

优化Login.pyc批量验证的运行效率方案

1. 重构Login函数,摆脱sys.argv依赖

你当前修改sys.argv传参的方式会产生不必要的全局变量操作开销,完全不符合函数调用的高效模式。可以先反编译Login.pyc拿到源码,调整函数逻辑让它直接接收用户名和密码参数:

  • 用uncompyle6反编译:uncompyle6 Login.pyc > Login.py
  • 修改生成的Login.py,把函数改成直接收参的形式:
def Login(user, password):
    # 保留原有的验证逻辑,仅把sys.argv的读取替换为参数传入
    # 给函数添加返回值,方便批量验证时判断结果
    if 验证条件成立:
        print('Login successful.')
        return True
    return False

之后直接导入修改后的Login函数调用,无需再操作sys.argv,调用效率会明显提升。

2. 多进程并行处理验证任务

密码遍历属于CPU密集型操作,Python的GIL会限制多线程的实际效率,改用多进程可以充分利用多核CPU资源:

from concurrent.futures import ProcessPoolExecutor
import sys

# 导入修改后的Login函数
from Login import Login

def check_credentials(args):
    user, pwd = args
    return (user, pwd, Login(user, pwd))

def main():
    # 一次性把所有用户名和密码读到内存,避免重复文件IO
    with open('users.txt', 'r') as f:
        users = [line.strip() for line in f if line.strip()]
    with open('passwords.txt', 'r') as f:
        passwords = [line.strip() for line in f if line.strip()]
    
    # 生成所有待验证的用户-密码组合
    all_combinations = [(user, pwd) for user in users for pwd in passwords]
    
    # 启动多进程池,max_workers设为CPU核心数
    with ProcessPoolExecutor(max_workers=sys.cpu_count()) as executor:
        for user, pwd, success in executor.map(check_credentials, all_combinations):
            if success:
                print(f"找到有效登录组合: {user} / {pwd}")
                # 找到目标后立即终止所有进程并退出
                executor.shutdown(wait=False)
                sys.exit(0)

if __name__ == '__main__':
    main()

3. 提前过滤无效密码

如果反编译后能得知Login的验证规则(比如密码长度、字符类型限制),提前过滤不符合规则的密码,减少不必要的函数调用:

# 示例:过滤长度小于6的密码
passwords = [pwd.strip() for pwd in f if pwd.strip() and len(pwd.strip()) >= 6]

4. 改用PyPy运行脚本

PyPy的JIT编译器对循环和函数调用的优化远优于CPython,直接用pypy3 your_script.py运行,不用修改代码就能获得2-5倍的速度提升,尤其适合这种大规模循环场景。

5. 深挖验证逻辑做针对性优化

如果反编译后发现Login的验证逻辑是哈希值对比(比如存储了用户名对应的密码哈希),可以直接提取每个用户的目标哈希,然后遍历密码计算哈希值对比,跳过Login函数的调用开销,这会是效率最高的方案:

# 假设反编译后得知各用户的正确哈希
target_hashes = {"admin": "abc123...", "user1": "def456..."}

def check_hash(args):
    user, pwd = args
    if user not in target_hashes:
        return False
    # 用原函数相同的哈希算法计算密码哈希
    hashed_pwd = hash_function(pwd)
    return hashed_pwd == target_hashes[user]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:02:54