Top.Mail.Ru
Ответы

Как устроен rar архиватор? Как он закодирован?

По дате
По рейтингу
Аватар пользователя
glavqaЗнаток

Архиватор RAR — это проприетарный формат сжатия данных, разработанный Евгением Рошалем. Его внутренняя структура сложна, и исходный код не открыт, но известны ключевые принципы того, как устроен RAR, как он кодирует и сжимает данные.

🔧 Основы устройства RAR-архива:

📁 1. Общая структура файла RAR:

RAR-архив состоит из следующих блоков:

12345678910
+---------------------+
| Заголовок архива    |  ← подпись, версия, флаги
+---------------------+
| Блоки файлов        |  ← по каждому файлу: имя, размер, 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. Как декодируется архив:

  1. Читается заголовок архива, определяется версия.

  2. Последовательно читаются блоки файлов — каждый содержит:

    • имя файла, размер, CRC, смещение, флаг зашифрованности

  3. Декодер проверяет флаг шифрования:

    • Если есть — расшифровывает заголовок через AES

  4. Сжатые данные передаются в соответствующий декодер по методу:

    • PPMd, LZSS, RLE и др.

  5. Проверяется CRC (целостность) и собирается файл.

🧰 5. Как это реализовано:

RAR написан на C/C++, закрытый исходный код, но известны некоторые проекты:

  • UnRAR — открытая библиотека (только распаковка) от автора RAR;

  • libarchive — частичная поддержка RAR;

  • The Unarchiver — open-source декодер RAR3/RAR5 на Objective-C.

📦 Примеры структурного анализа

В hex-редакторе .rar файл может начинаться так:

12
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



Видео по теме