Добавление многопроцессорной обработки к существующему скрипту Python? - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь добавить многопроцессорную обработку в существующий взломщик паролей, источник которого находится здесь: https://github.com/axcheron/pyvboxdie-cracker

Сценарий работает отлично, но он очень медленный, добавляя многопроцессорность конечно ускорит это. Я посмотрел в Интернете (и здесь) несколько примеров, и я наткнулся на стену полной информационной перегрузки, я просто не могу разобраться с этим. Я нашел очень полезную запись от пользователя Camon (здесь: Python Мультипроцессорный взломщик паролей ), но я не вижу, как реализовать это в скрипте.

def crack_keystore(keystore, dict):

wordlist = open(dict, 'r')
hash = get_hash_algorithm(keystore)
count = 0

print("\n[*] Starting bruteforce...")

for line in wordlist.readlines():

    kdf1 = PBKDF2HMAC(algorithm=hash, length=keystore['Key_Length'], salt=keystore['Salt1_PBKDF2'],
                      iterations=keystore['Iteration1_PBKDF2'], backend=backend)

    aes_key = kdf1.derive(line.rstrip().encode())

    cipher = Cipher(algorithms.AES(aes_key), modes.XTS(tweak), backend=backend)
    decryptor = cipher.decryptor()

    aes_decrypt = decryptor.update(keystore['Enc_Password'])

    kdf2 = PBKDF2HMAC(algorithm=hash, length=keystore['KL2_PBKDF2'], salt=keystore['Salt2_PBKDF2'],
                      iterations=keystore['Iteration2_PBKDF2'], backend=backend)

    final_hash = kdf2.derive(aes_decrypt)

    if random.randint(1, 20) == 12:
        print("\t%d password tested..." % count)
    count += 1

    if binascii.hexlify(final_hash).decode() == binascii.hexlify(keystore['Final_Hash'].rstrip(b'\x00')).decode():
        print("\n[*] Password Found = %s" % line.rstrip())
        exit(0)

print("\t[-] Password Not Found. You should try another dictionary.")

Это часть скрипта, которую мне нужно отредактировать, в примере Кармона есть функция для разбиения списка слов на куски, и каждому процессу присваивается свой кусок. Проблема, которую я реализую, состоит в том, что список слов заполняется только внутри функции (после выполнения других задач полный исходный код репо). Как мне реализовать многопроцессорность в этом разделе? Спасибо за любую помощь.

1 Ответ

1 голос
/ 06 февраля 2020
from multiprocessing import Process

# keystore = some_value
# dict1, dict2, dict3, dict4

proc_1 = Process(target=crack_keystore, args=(keystore, dict1))
proc_2 = Process(target=crack_keystore, args=(keystore, dict2))
proc_3 = Process(target=crack_keystore, args=(keystore, dict3))
proc_4 = Process(target=crack_keystore, args=(keystore, dict4))
proc_1.start()
proc_2.start()
proc_3.start()
proc_4.start()
proc_1.join()
proc_2.join()
proc_3.join()
proc_4.join()
print("All processes successfully ended!")

максимальное количество процессов - это число ядер вашего компьютера

о многопроцессорной обработке вы можете прочитать здесь

...