Как взломать архив с паролем самому

от автора

КПДВ

Есть архив и нужно извлечь содержимое, а пароль забыт. Можно погуглить и довериться разным программам (раз, два, три), но

Единственный способ взлома архива RAR – брутфорс.

Исходные данные

Архив, словарь паролей (и если на архив пароль поставил ты %username%, то не забываем добавить свои часто применяемые, только локально!).

Порядок действий

Из предыдущих статей:

Принцип разархирования прост – при вводе пароля, из него 262144 раз вычисляется хеш по алгоритму SHA1, и полученным ключом WinRAR пытается расшифровать (по AES) и разархировать файлы (тут не проверяется правильный пароль или нет). После того как файлы расшифрованы и разархированны, из них вычисляется контрольная сумма по CRC32, и это сумма сравнивается с другой суммой, которая прописана в самом архиве. Если эти суммы совпадают – мы получает расшифрованные файлы, а если не совпадает, то получаем предупреждение что контрольная сумма или пароль неправильны. Нет в RAR других проверок правильности пароля — только вот эта проверка контрольный суммы «готового продукта».

Тут просто нечего ломать. Любые попытки сломать сам WinRAR или архив приведет к тому, что файлы будут открыты не правильно.

Поэтому алгоритм в первой версии будет прост: открыть файл с паролями и перебирать пароли к архиву пока не сломается.

Не забываем, что используем Go.
Файл с паролями

dictFile, err := os.Open(dictionary) if err != nil {     log.Fatalln(err)     } defer dictFile.Close()

Сам архив

zipr, err := zip.OpenReader(zipfile) if err != nil {     log.Fatal(err) }

И наш супер алгоритм

scanner := bufio.NewScanner(dictFile) for scanner.Scan() {     pass := scanner.Text()     for _, z := range zipr.File {         z.SetPassword(pass)         _, err := z.Open()         // если все ок         if err == nil {             println("[+] Found password")             println("[+] Password = " + pass)             os.Exit(0)         }     }

И если пароль есть в архиве — вуаля!

Версия с блэкджеком и многопоточностью

Есть еще более интересная версия — с многопоточностью и горутинами.

В репозитории есть еще 63 не сложные утилиты на разные темы. И если есть идеи, что добавить — пишите.

UPD

Именно многократное вычитывание — наиболее надежный способ избежать ошибок. Спасибо всем откликнувшимся.

ссылка на оригинал статьи https://habr.com/ru/post/491310/


Комментарии

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

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