Есть архив и нужно извлечь содержимое, а пароль забыт. Можно погуглить и довериться разным программам (раз, два, три), но
Единственный способ взлома архива 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
Именно многократное вычитывание — наиболее надежный способ избежать ошибок. Спасибо всем откликнувшимся.
tronix286
Отличный материал! Ждем с нетерпением гайды, как развернуть окошко ворд на полный экран.
Dreddsa Автор
Очень рад наличию у автора комментария остроумия, и, самое главное, терпимости к окружающим
justhabrauser
Окружающие тоже не подарок.
Вы точно не хотите спрятать статью взад в черновики?
Принципиально?
Dreddsa Автор
Спасибо за внимание. Тут такое дело: 1. Мне нечего стыдиться — я ничего не украл, не отобрал и никого не обидел. 2. В общем в сети и на Хабре в частности есть разные категории пользователей. Кому-то это все кажется банальным и он минусует, а кто-то только знакомится с темой, и это для него открытие. Так что, пусть остаётся.
tvr
Вот, кстати, поддержу обеими руками такую позицию. Я нуб и ламер, и если бы где-то на Хабре не прочитал, то никогда в жизни не узнал бы обо всяких хоткеях в винде.
tvr
А что, так можно было?! о_О
MaxALebedev
Это вы ещё на маке не работали!
tvr
После турецкой винды меня маком не напугать :))