gpt4 book ai didi

python - 我应该使用线程或多处理来对 Python 进行暴力破解吗?

转载 作者:行者123 更新时间:2023-12-03 13:18:55 27 4
gpt4 key购买 nike

前几天我写了一个 ZIP 破解器;基于 TJ O'Connor 的书:Violent Python - A Cookbook for Hackers、Forensic Analysts、Penetration Testers 和安全工程师。

现在作者使用了线程,但我在 Reddit 上被告知使用多处理会更好地进行暴力破解。真的吗?如果是,为什么,我如何为这个实例实现多处理?

是否也可以将线程或多处理绑定(bind)到 GPU 而不是 CPU?因为这在暴力破解时会更加高效和有效,考虑到它不会阻塞 CPU 并利用 GPU 的潜力来完成可以缩短破解时间和每分钟尝试次数的工作?

我的代码如下(因为作者也使用了线程,所以我使用了线程)

import argparse
from threading import Thread
import zipfile

parser = argparse.ArgumentParser(description="Unzips a password protected .zip by performing a brute-force attack using either a word list, password list or a dictionary.", usage="BruteZIP.py -z zip.zip -f file.txt")
parser.add_argument("-z", "--zip", metavar="", required=True, help="Location and the name of the .zip file.") # Creates -z arg
parser.add_argument("-f", "--file", metavar="", required=True, help="Location and the name of the word list/password list/dictionary.") # Creates -f arg
args = parser.parse_args()


def extract_zip(zip_file, password):
try:
zip_file.extractall(pwd=password)
print("[+] Password for the .zip: {0}".format(password.decode("utf-8")) + "\n")
except:
pass # If a password fails, it moves to the next password without notifying the user. If all passwords fail, it will print nothing in the command prompt.


def main(zip, file):
if (zip == None) | (file == None):
print(parser.usage) # If the args are not used, it displays how to use them to the user.
exit(0)
zip_file = zipfile.ZipFile(zip)
txt_file = open(file, "rb") # Opens the word list/password list/dictionary in "read binary" mode.
for line in txt_file:
password = line.strip()
t = Thread(target=extract_zip, args=(zip_file, password))
t.start()


if __name__ == '__main__':
main(args.zip, args.file) # BruteZIP.py -z zip.zip -f file.txt.

总之,线程更好还是多处理更适合暴力破解?是否可以将其中任何一个绑定(bind)到 GPU 而不是 CPU?

最佳答案

我不知道如何将任务绑定(bind)到 GPU 而不是 CPU。但对于其他查询 threading对比 multiprocessing你 100% 想使用 multiprocessing .

Brute forcing 是 CPU 绑定(bind)任务,因为 python 有一个叫做 Global Interpreter Lock 的东西,它只允许一个 CPU 绑定(bind)线程运行一次,你的应用程序根本无法使用你可能产生的多个线程。

但是,Multiprocessing 并非如此,因为它一次启动多个 python 解释器实例,您可以有效地将一个大任务分解为一堆较小的任务,并让每个 python 解释器实例运行它,然后再组合这些结果。

您可以通过运行一些 CPU 基准测试任务来尝试自己进行测试,您会发现与顺序执行相比,线程根本不会产生任何影响,并且在多核系统中,线程甚至可能会降低性能。

但是,使用 Multiprocessing,您将清楚地看到差异。

我故意不提供任何 GIL 是什么的引用链接,因为有数百篇关于这个主题的文章,你很可能会通过其中的多篇文章来了解它的工作原理以及它的好处和影响。

尽管您可以查看 David Beazly 和 Larry Hastings 关于这个主题的 Pycon 演讲,他们对这个主题给出了非常好的见解。

关于python - 我应该使用线程或多处理来对 Python 进行暴力破解吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54501379/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com