ITСooky

IT-рецепты съедобные и не очень!

Подбираем забытый пароль для архива RAR ZIP через John-the-ripper!

дата 04.09.2022

Обычная житейская ситуация, свой старый архив пароль давно забыт, что делать? Можно подобрать в реальные сроки на видеокарте — если это был конечно человеческий пароль а не 8 символов с одной заглавноый буквой одной прописной, одной русской, одной англ, одной цифрой, одним специальным символом! Можно подбирать и на CPU а не на GPU но вместо месяцев это займет годы, все дело в ядрах в процессерах всего десяток ядор, а в видеокарте тысячи.

John-the-ripper выбрал потому что он(Джон) хоть как то подавала признаки жизни работы, но странностей у ней конечно многовато, но сначала о странностях Ubuntu 22!

В Ubuntu можем поставить его из репозиториев
sudo apt-get install john-the-ripper
но поставиться старая версия 1.8 где вообще нет современных настроек

Можно поставить через snap
sudo snap install john-the-ripper
Я snap то не очень и сейчас выяснилось почему. Если вы ставите через snap вам нельзя менять файлы установленного в вашей системе пакета, ну вот вообще никак, даже если разработчики пишут отредатируйте конфиг — snap вам этого не даст сделать. Можно скопировать конфиг в другое место отредактировать его и запускать jhon так

john --config=./myjohn.conf ...

Если бы не следующая проблемы John-the-ripper из snap Ubuntu не хочет, не умеет работать с OpenCL
john --list=opencl-devices

Error: No OpenCL-capable platforms were detected by the installed OpenCL driver.
Error: No OpenCL-capable devices were detected by the installed OpenCL driver.

А поэтому надо ставить третьим способом по инструкции от сюда https://github.com/openwall/john/tree/bleeding-jumbo/doc и именно INSTALL-UBUNTU

Nvidia драйверы у меня уже стоят конечно, и честно говоря не знаю что мне помогло, просто кину тут теже все команды что из инструкции

mkdir -p ~/src
sudo apt-get -y install git build-essential libssl-dev zlib1g-dev

вот это
sudo apt-get -y install nvidia-opencl-dev
было уже установлено
cd ~/src
git clone https://github.com/openwall/john -b bleeding-jumbo john
cd ~/src/john/src
./configure && make -s clean && make -sj4

И вот
./src/john/run/john --list=opencl-devices
после процессора

Platform #1 name: NVIDIA CUDA, version: OpenCL 3.0 CUDA 11.7.101
    Device #0 (2) name:     NVIDIA RTX A4500
    Device vendor:          NVIDIA Corporation
    Device type:            GPU (LE)
    Device version:         OpenCL 3.0 CUDA
    Driver version:         515.65.01 [recommended]
    Native vector widths:   char 1, short 1, int 1, long 1
    Preferred vector width: char 1, short 1, int 1, long 1
    Global Memory:          20183 MiB
    Global Memory Cache:    1568 KiB
    Local Memory:           48 KiB (Local)
    Constant Buffer size:   64 KiB
    Max memory alloc. size: 5045 MiB
    Max clock (MHz):        1650
    Profiling timer res.:   1000 ns
    Max Work Group Size:    1024
    Parallel compute cores: 56
    CUDA INT32 cores:       3584  (56 x 64)
    Speed index:            5913600
    Warp size:              32
    Max. GPRs/work-group:   65536
    Compute capability:     8.6 (sm_86)
    Kernel exec. timeout:   yes
    NVML id:                0
    PCI device topology:    0a:00.0
    PCI lanes:              16/16
    Fan speed:              54%
    Temperature:            79°C
    Utilization:            100%

Не понял строку

CUDA INT32 cores:       3584  (56 x 64)

самих куда то должно быть 7168 ровно в два раза больше!!!

Стратегия подбора пароля
Для начала надо сделать файл с HASH паролем
./src/john/run/rar2john test_en.rar > ./output.txt

Это для RAR а для ZIP
./src/john/run/zip2john test_en.rar > ./output.txt

Получаем

test_en.rar:$rar5$16$26c27c1cc4aebf2737c7fc0c28afec80$15$260bb794536e9b71c7a28ee68587776e$8$3c88574d72c1341a

По умолчанию Джон заточен для подбора паролей на английском, есть даже список часто используемых паролей, я для теста конечно упрощю работу ему будем подбирать пароль только из строчных английских букв

Для этого в файле ./src/john/run/john.conf

в районе

[Subsets]
...

# Subsets mode charsets 0-9. These are literal strings. TAB and space
# characters can be used as long as they do not come first or last. The only
# "magic" used here is \U+HHHH or \U+HHHHH for any Unicode character (except
# the very highest private area that has six hex digits). For example, you

на месте 6 строчки(они там от 0 до 9) добавляем

6 = abcdefghijklmnopqrstuvwxyz

Тут кстати на 4 строчке уже прописан русски алфавит — вот с этим придется играться писать наиболее вероятные символы разных языков для подбора перебора!

и запускам сначала на видеокарте
./src/john/run/john --subsets=6 --format=rar5-opencl ./output.txt
—format=rar5-opencl — тут 5 потому что архив новейшей версии WinRAR и opencl чтобы на видеокарте читался
—subsets=6 — шестая строка

пошло считаться

[Device 2: NVIDIA RTX A4500
Using default input encoding: UTF-8
Loaded 1 password hash (RAR5-opencl [PBKDF2-SHA256 OpenCL])
Cost 1 (iteration count) is 32768 for all loaded hashes
LWS=32 GWS=131072 (4096 blocks) 
Press 'q' or Ctrl-C to abort, 'h' for help, almost any other key for status
0g 0:00:00:00 1.00% (4) (ETA: 11:58:14) 0g/s 0p/s 0c/s 0C/s Dev#2:53°C
0g 0:00:00:03 19.73% (4) (ETA: 11:58:29) 0g/s 42974p/s 42974c/s 42974C/s Dev#2:56°C grgrgggg..yyxn

в скобках цифра 4 это сколко сейчас символов в пароле перебирается, так же показывает температуру карты на всякий случай

более подробную инфу можно получить нажав s

Remaining hashes    1 (0 removed)
Remaining salts     1 (0 removed)
Time in seconds     817 (476.01 new)
Successful guesses  0 (0 new, 0 g/s)
Passwords tested    52953088 (30670848 new, 64433 p/s)
 dupe suppressor    is disabled
 and it accepted    0 (0.00%, 0 p/s)
        rejected    0 (0.00%, 0 p/s)
    out of total    0 (0 p/s)
Hash computations   52953088 (30670848 new, 64433 c/s)
Hash combinations   52953088 (30670848 new, 64433 C/s)

Большинство кнопок просто обновляют превью где сейчас перебирается

0g 0:03:45:45 1.62% (7) (ETA: 2022-09-14 03:51) 0g/s 65714p/s 65714c/s 65714C/s Dev#2:82°C jehhhjheehj..ekkkkhhhehh

В пароле у меня 7 букв и когда дошло до перебара 7 букв я понял что переборшил!!! В ETA (англ. Estimated time of arrival) мне показало через пять дней — перебор это прям ну очень долго, но тут меня осенило, нет ни как это ускорить, а почему просят пароль менять каждые 3 месяца при том что он даже очень сложный — а потому что на Земле нет оборудования которое сложный пароль подберет перебором за три месяца!

Тут вспоминается Задача о зёрнах на шахматной доске, как пример того что казалось незначительным с первого взгляда, но потом оказалось огромным и непосильным — а тут кстати начиналось всего лишь с 2 в степени — а у нас начинается с 26 буков и с добавлением каждого символа возводится в степень…. э для примера сделаю пароль из 4х строчных букв!!!

И вуаля

0g 0:00:00:13 39.84% (4) (ETA: 16:00:17) 0g/s 62966p/s 62966c/s 62966C/s Dev#2:58°C oywa..bhxu
itco             (test_en4.rar)     
1g 0:00:00:14 54.18% (4) (ETA: 16:00:10) 0.07137g/s 65489p/s 65489c/s 65489C/s Dev#2:59°C lxfc..emdz
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 

Видиокарта находит пароль itco из четырех строчных английских букв за 17 секунд!!!

Вот тут у john странность он запоминает hash для которых нашел пароль и больше их не ищет

No password hashes left to crack (see FAQ)

При этом он гад не показывает пароли как должен
./src/john/run/john --show

Password files required, but none specified

Но пароли лежат вместе с ним в файле john.pot
cat ./src/john/run/john.pot

$rar5$16$7f018d3b28b056d9d12001fb022c5a2e$15$59f623db6fa6534d7fe26f2681c6b8ba$8$2bde8da77cc53370:itco

Вот он в самом конце строки

И чтобы нам снова прогнать подбор паролей по новой надо удалить этот файл
rm ./src/john/run/john.pot

Но есть в john и полезные странности можно перезапустить перебор паролей с последнего места когда его прервали или он вылетел с ошибкой
./src/john/run/john --restore
Тут старнность в том что, никаких настроек просто берет последний то есть только одного, а не всех других попыток

Чего стоит добавить еще одну букву — каждая следующая буква займет весго лишь в 26 раз больше времени
5 — 7 минут
6 — 3.2 часа
7 — 3.4 дня
8 — 89 дней
Вот всем и говорят делайте пароль в 8 символов — нафиг никому не надо будет его взламывать! А если добавить одну заглавную букву то это будет уже 52 в степени а если одну русскую(без уточнения строчну или заглавную) то 118 АААААА!!!

Сравним а как на CPU
17 секунд 62966p/s — GPU NVIDIA RTX A4500
317 секунд 2767p/s — CPU AMD Ryzen 7 3700X

На видео карте почти в 18 раз быстрее — можно за пару месяцев а не лет подобрать пароль 🙂

Что же делать?
Вспомнить себя в годы создания архива, может вы тогда делали пароли только из русских букв и цифр — это сильно упрошает процесс. Если вы тогда смешивали буквы разных языков да еще и специальные символы вставля то… а с другой стороны вы же годами не знали не помнили про этот архив, что вам стоит год его подбирать, да даже не вам, а вашей видеокарте — тут и цена вопроса(видиокарты) не важна по сравнению с ностальгией, да и электричество тоже стоит!!!

Можно еще совсем себя унизить и решить что вставляли просто слово без цифр без заглавной, тогда подойдет подбор по словарю
Находите словарь русского языка списком и
./src/john/run/john —wordlist=./word_rus.utf8 —format=rar-opencl ./output.txt

А вдруг?! Но скорей весго 100% нет!!!


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *