Есть архив и нужно извлечь содержимое, а пароль забыт. Можно погуглить и довериться разным программам ( первая, вторая, третья), но! ✔️ Единственный способ взлома архива RAR – брутфорс.
1️⃣ Исходные данные • Архив, словарь паролей (и если на архив пароль поставил ты %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) } }
И если пароль есть в архиве — тогда получилось!
• ⚙️ Версия с блэкджеком и многопоточностью • ⚙️ Есть еще более интересная версия — с многопоточностью и горутинами.