Как устроен rar архиватор? Как он закодирован?
Архиватор RAR — это проприетарный формат сжатия данных, разработанный Евгением Рошалем. Его внутренняя структура сложна, и исходный код не открыт, но известны ключевые принципы того, как устроен RAR, как он кодирует и сжимает данные.
🔧 Основы устройства RAR-архива:
📁 1. Общая структура файла RAR:
RAR-архив состоит из следующих блоков:
+---------------------+
| Заголовок архива | ← подпись, версия, флаги
+---------------------+
| Блоки файлов | ← по каждому файлу: имя, размер, CRC, методы
+---------------------+
| Данные файлов | ← сжатые данные
+---------------------+
| Информация о восстановлении (если включено) |
+---------------------+
Каждый блок имеет чёткую структуру: ID, длину, данные, CRC и флаги.
🔐 2. Методы сжатия (RAR5):
RAR использует многоступенчатую компрессию:
🔽 A. Предобработка (преобразование)
Фильтры для типов данных:
Тексты → словари
Изображения → специальные фильтры
Исполняемые файлы → преобразуются в “чистую” форму
Таблицы повторов → сжимаются отдельно
🔁 B. Кодирование:
RAR применяет собственный гибридный метод, включая:
PPM (Prediction by Partial Matching) — статистическое кодирование текста;
LZSS (Sliding Window) — дедупликация повторяющихся данных;
RNC (Roshal's Native Compression) — собственный вариант RLE + Huffman + дельта-сжатия.
🔐 C. Шифрование:
AES-256 в режиме CBC — с использованием PBKDF2 для генерации ключей из пароля (начиная с RAR 3.0+).
Шифруются данные, имена файлов и заголовки — в RAR5.
🧾 3. Кодировка метаданных:
RAR 4.0 → обычная ANSI/UTF-8
RAR 5.0 → UTF-8 только, заголовки имеют проверочные суммы CRC32/CRC64
Поддерживаются флаги:
Сжатие, многотомность
Пароль/шифрование
Восстановление (recovery record)
🧪 4. Как декодируется архив:
Читается заголовок архива, определяется версия.
Последовательно читаются блоки файлов — каждый содержит:
имя файла, размер, CRC, смещение, флаг зашифрованности
Декодер проверяет флаг шифрования:
Если есть — расшифровывает заголовок через AES
Сжатые данные передаются в соответствующий декодер по методу:
PPMd, LZSS, RLE и др.
Проверяется CRC (целостность) и собирается файл.
🧰 5. Как это реализовано:
RAR написан на C/C++, закрытый исходный код, но известны некоторые проекты:
UnRAR — открытая библиотека (только распаковка) от автора RAR;
libarchive — частичная поддержка RAR;
The Unarchiver — open-source декодер RAR3/RAR5 на Objective-C.
📦 Примеры структурного анализа
В hex-редакторе .rar файл может начинаться так:
52 61 72 21 1A 07 00 CF 90 73 00 ...
52 61 72 21 = RAR! — сигнатура
1A 07 — версия (например, 4.0 или 5.0)
Далее идут блоки и флаги, читаемые только по спецификации
📘 Интересные факты:
Формат RAR официально не лицензируется для записи третьими сторонами.
Только WinRAR может создавать RAR. Остальные — только читать (UnRAR).
RAR5 (2013+) не поддерживается старыми архиваторами.
Благодарим за вопрос. GLAVQA