Python - 优化代码以遍历 .txt 文件,将每一行作为参数传递给另一个程序(子处理?)

问题描述 投票:0回答:1

** 对于我的网络安全实验室,我必须编写一个 python 程序来遍历一个 .txt 密码文件和一个 .txt 用户名文件,并根据 Login.pyc 文件(将其作为参数)检查它们,返回“登陆成功。'如果匹配正确。**

我正在尝试使用子流程模块在每次迭代的命令行上运行

python3 Login.pyc <user> <password>
。密码文件有 100,000 个密码,所以显然需要很长时间。

import subprocess

if __name__ == "__main__":

  gang = open("gang")               #usernames .txt file (20 lines)
  pws = open("PwnedPWs100k")        #passwords .txt file  (100,000 lines)

  for name in gang:
    print("USER = ", name)
    
    for item in pws:
      
      output = subprocess.run(["python3", "Login.pyc", "{}".format(name.rstrip()), "{}".format(item.rstrip())], capture_output=True, text=True).stdout.strip("\n")
      
      if output == 'Login successful.':
        print("USER:" + name + "PASSWORD:" +item)
        break

   pws.close()
   gang.close()

我还能如何在合理的时间内做到这一点?我认为教授不希望我们使用多处理。我也试过提高嵌套循环的效率,但我认为瓶颈因素是 Login.pyc 文件,我不能简单地从中导入 Login() 函数,因为它是加密的。我必须针对文件实际运行用户密码组合。

我也试过在每个循环中打开和关闭文件,而不是在主函数的开始和结束时打开和关闭它们。似乎没有改善时间。

还有其他方法或模块可以帮助我吗?

python loops optimization command-line subprocess
1个回答
0
投票

子流程多处理 是很好的模块。但它们似乎不是 this 工作的正确工具。

启动一个新的 python 解释器的开销和 做一些导入和函数定义会让你丧命。 不需要多做几次。

我不能简单地导入 Login() 函数,因为它是加密的。

我拒绝那个前提。两次。

当你说“加密”时,我相信你指的是源文本 已被编译为字节码。这不是障碍。

import Login
,用
dir(Login)
环顾四周 (甚至
help(Login)
)。 我敢打赌像
check_password
这样的函数会突然出现在你面前。 叫它。两百万次。在same过程中。

此外,

dis.dis()
可供您使用。 所以你可以看到“if name is main:”卫兵跑了, 这样你就可以看到
check_password
中发生了什么。 它为您提供了足够的信息来编写您自己的 执行相同检查的源代码。 我很确定这是你的洞察力 教授希望你最终能到达。


顺便说一句,这些天谁写过像

gang.close()
这样的东西? 已经使用
with open...
上下文管理器。


支持的库不止一个

import
和类似的操作。在 pypi 上四处看看。 有一个完整的生态系统,其中包括标准 导入库, 致力于理解二进制字节码工件。


也许第一次出来的时候事情并不完全顺利。 不用担心。 像攻击者一样思考。 你是Mallet.

构建一些类似于想象中的 Login.py 的源代码。 将其转换为 .pyc 字节码。 假装 你再也看不到来源了。 利用字节码。

如果不是很合您的意, 调整源,生成另一个 .pyc,泡沫,重复, 直到您可以自信地穿越这些水域。

© www.soinside.com 2019 - 2024. All rights reserved.