Таким образом, я изменил его грубую силу, основанной от базового пароля, который я знаю, это правильно, так что я только грубую силу между 6-8 символами, осуществимо.
Код:
#! / USR / бен / рубин -w
класс Cracker
Защита инициализации (char_array, password_range)
@char_array = char_array
@password_range = password_range
конец
Защиту password_correct? (фраза)
Распечатать "basepassword" + Фраза, "\ т"
система ("./bitcoind walletpassphrase basepassword # {выражение} 20")
Случай $ ?. статус_завершения
когда 0
путы "Нашел! basepassword # {} фраза"
выход 0
конец
вернуться ложным
конец
Защиту generate_password (perm_number, PASSWORD_LENGTH)
пароль =""
(1..password_length) .each сделать | char_number | # Перебрать символы
char_reference = (perm_number / @ char_array.length ** (char_number-1)). этаж% @ char_array.length
символ = @char_array [char_reference]
пароль << персонаж
конец
пароль
конец
Защиту do_combination (num_combinations, PASSWORD_LENGTH)
(0..num_combinations-1) .each сделать | perm_number | # Цикл через комбинации для заданной длины
пароль = generate_password (perm_number, PASSWORD_LENGTH)
вернуть пароль, perm_number если password_correct? (пароль)
конец
конец
Защита трещина ()
(@password_range) .each сделать | PASSWORD_LENGTH | # Цикл, чтобы постепенно увеличивать длину пароля
num_combinations=@char_array.length**password_length
пароль, perm_number = do_combination (num_combinations, PASSWORD_LENGTH)
если пароль
путы "# {Пароль} | Доступ разрешен | # {Perm_number} / {# num_combinations}"
вернуть пароль
конец
конец
конец
конец
# Я извлекал символы я уверен, что я не использовал
символов = "! $ @ 01235 @ ABCDEFGIKLMNOSTWYZabcdefgiklmnopqrstuwyz".Трещина(//)
взломщик = Cracker.new (символы, (6..8))
пароль = cracker.crack ()
путы "Не повезло."
выход 1
класс Cracker
Защита инициализации (char_array, password_range)
@char_array = char_array
@password_range = password_range
конец
Защиту password_correct? (фраза)
Распечатать "basepassword" + Фраза, "\ т"
система ("./bitcoind walletpassphrase basepassword # {выражение} 20")
Случай $ ?. статус_завершения
когда 0
путы "Нашел! basepassword # {} фраза"
выход 0
конец
вернуться ложным
конец
Защиту generate_password (perm_number, PASSWORD_LENGTH)
пароль =""
(1..password_length) .each сделать | char_number | # Перебрать символы
char_reference = (perm_number / @ char_array.length ** (char_number-1)). этаж% @ char_array.length
символ = @char_array [char_reference]
пароль << персонаж
конец
пароль
конец
Защиту do_combination (num_combinations, PASSWORD_LENGTH)
(0..num_combinations-1) .each сделать | perm_number | # Цикл через комбинации для заданной длины
пароль = generate_password (perm_number, PASSWORD_LENGTH)
вернуть пароль, perm_number если password_correct? (пароль)
конец
конец
Защита трещина ()
(@password_range) .each сделать | PASSWORD_LENGTH | # Цикл, чтобы постепенно увеличивать длину пароля
num_combinations=@char_array.length**password_length
пароль, perm_number = do_combination (num_combinations, PASSWORD_LENGTH)
если пароль
путы "# {Пароль} | Доступ разрешен | # {Perm_number} / {# num_combinations}"
вернуть пароль
конец
конец
конец
конец
# Я извлекал символы я уверен, что я не использовал
символов = "! $ @ 01235 @ ABCDEFGIKLMNOSTWYZabcdefgiklmnopqrstuwyz".Трещина(//)
взломщик = Cracker.new (символы, (6..8))
пароль = cracker.crack ()
путы "Не повезло."
выход 1
Это происходит очень медленно, хотя, но это потому, что я использую процессор, чтобы попытаться взломать это, и я должен извлечь урок из горного сообщества и попытаться использовать свой GPU через CUDA или OpenCL. Мне было интересно, если кто-нибудь может мне помочь адаптировать этот сценарий к питона или рубин библиотеки OpenCL / CUDA, так что я могу использовать свою мощь GPU, чтобы попытаться взломать мой пароль, чтобы восстановить его.
Если не возможно, это поможет кому-то еще, кто в итоге может потерять свой кошелек пароль и нужно перебирает его. В 3-5 символов эта работа будет найти с Quadcore.