Современные решения

для защиты Windows приложений

и восстановления исходного кода

Visual Basic 6.0 - Упаковка в ZIP и CAB


Упаковка в ZIP и CAB

XC: arc-echo
[WinAmp: [Hi-Fi/Georgia -- freq: alb8 498.mp3]]
Здравствуй, A.!

МК>> Zip? Cab - прекрасно, а вот под Rar я что-то никакой доки не

МК>> нашел..

AS> Сжатие раром "коммерческое", т.е. большая-большая тайна. Если кто-то и

AS> знает, как сжимать, то только если он "изучал" сам rar.exe

Вт что я наpыл :) Из доки к pаpy. Лови! Пpигодится.

До свиданья, A.!
[АмГУ/ФСH]
* Origin: Юбочка с надписью R/O. (2:5041/2000)

rar - 1

XC: arc-echo
[WinAmp: [Hi-Fi/Georgia -- freq: alb8 498.mp3]]
Здравствуй, All!


_---===[ Windows Clipboard ]===---_

RAR версия 3.20 - Техническая информация
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


ОПИСЫВАЕМЫЙ ФОРМАТ АРХИВА ДЕЙСТВИТЕЛЕH ТОЛЬКО ДЛЯ RAR ВЕРСИИ 1.50 И СТАРШЕ

==========================================================================
Формат архивного файла RAR
==========================================================================

Файл архива состоит из блоков разной длины. Порядок следования этих блоков
может меняться, но первым блоком всегда должен быть блок-маркер, за которым
следует блок заголовка архива.

Каждый блок начинается со следующих полей:

HEAD_CRC 2 байта CRC всего блока или его части
HEAD_TYPE 1 байт Тип блока
HEAD_FLAGS 2 байта Флаги блока
HEAD_SIZE 2 байта Размер блока
ADD_SIZE 4 байта Hеобязательное поле - добавление к размеру блока

Поле ADD_SIZE присутствует, только если (HEAD_FLAGS & 0x8000) != 0

Общий размер блока указан в поле HEAD_SIZE, если (HEAD_FLAGS & 0x8000) == 0
или HEAD_SIZE+ADD_SIZE, если есть поле ADD_SIZE, при этом
(HEAD_FLAGS & 0x8000) != 0.

Во всех блоках следующие биты в HEAD_FLAGS имеют одинаковое значение:

0x4000 - если установлен, то старые версии RAR будут игнорировать этот блок
и удалять его при изменении архива;
если не установлен, то блок копируется в новый архивный файл при
изменении архива;
_---===[ Windows Clipboard ]===---_

До свиданья, All!
[АмГУ/ФСH]
* Origin: Если аплинк мою почту читает,знаю,ребяты,он ща угарает (2:5041/2000)

rar - 2

XC: arc-echo
[WinAmp: [Hi-Fi/Georgia -- freq: alb8 498.mp3]]
Здравствуй, All!


_---===[ Windows Clipboard ]===---_
0x8000 - если установлен, то присутствует поле ADD_SIZE, и размер полного
блока составляет HEAD_SIZE+ADD_SIZE.

Заявленные типы блоков:

HEAD_TYPE=0x72 блок-маркер
HEAD_TYPE=0x73 заголовок архива
HEAD_TYPE=0x74 заголовок файла
HEAD_TYPE=0x75 заголовок комментария старого типа
HEAD_TYPE=0x76 электронная подпись старого типа
HEAD_TYPE=0x77 субблок старого типа
HEAD_TYPE=0x78 информация для восстановления старого типа
HEAD_TYPE=0x79 электронная подпись старого типа
HEAD_TYPE=0x7a субблок

Блок комментария используется только внутри других блоков.

Обработка архива происходит следующим образом:

1. Читается и проверяется блок-маркер
2. Читается заголовок архива
3. Читаются или пропускаются HEAD_SIZE-размер(MAIN_HEAD) байт
4. Если обнаружен конец архива, то обработка архива прекращается, иначе
читаются 7 байт в полях HEAD_CRC, HEAD_TYPE, HEAD_FLAGS, HEAD_SIZE.
5. Проверяется HEAD_TYPE.
Если HEAD_TYPE==0x74
прочитать заголовок файла (первые 7 байт уже прочитаны)
прочитать или пропустить HEAD_SIZE-размер(FILE_HEAD) байт
Если (HEAD_FLAGS & 0x100)
прочитать или пропустить HIGH_PACK_SIZE*0x100000000+PACK_SIZE байт
иначе
прочитать или пропустить FILE_SIZE байт
иначе
прочитать соответствующий блок HEAD_TYPE:
прочитать HEAD_SIZE-7 байт
если (HEAD_FLAGS & 0x8000)
прочитать ADD_SIZE байт
6. Перейти к шагу 4.
_---===[ Windows Clipboard ]===---_

До свиданья, All!
[АмГУ/ФСH]
* Origin: Рэйнджеры! Включаю турбо на хрен бластер! (2:5041/2000)

rar - 3

XC: arc-echo
[WinAmp: [Hi-Fi/Georgia -- freq: alb8 498.mp3]]
Здравствуй, All!


_---===[ Windows Clipboard ]===---_
==========================================================================
Форматы блоков
==========================================================================


Блок-маркер (MARK_HEAD)
~~~~~~~~~~~~~~~~~~~~~~~

HEAD_CRC Всегда 0x6152
2 байта

HEAD_TYPE Тип заголовка: 0x72
1 байт

HEAD_FLAGS Всегда 0x1a21
2 байта

HEAD_SIZE Размер блока = 0x0007
2 байта

Блок-маркер в действительности считается фиксированной последовательностью
байт: 0x52 0x61 0x72 0x21 0x1a 0x07 0x00
Заголовок архива (MAIN_HEAD)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

HEAD_CRC CRC полей от HEAD_TYPE до RESERVED2
2 байта

HEAD_TYPE Тип заголовка: 0x73
1 байт

HEAD_FLAGS Битовые флаги:
2 байта
0x0001 - Атрибут тома (том многотомного архива)
0x0002 - Присутствует архивный комментарий
RAR 3.x использует отдельный блок комментария
и не устанавливает этот флаг.

_---===[ Windows Clipboard ]===---_

До свиданья, All!
[АмГУ/ФСH]
* Origin: Юбочка с надписью R/O. (2:5041/2000)

rar - 4

XC: arc-echo
[WinAmp: [freq: alb8 451.mp3]]
Здравствуй, All!


_---===[ Windows Clipboard ]===---_
0x0004 - Атрибут блокировки архива
0x0008 - Атрибут непрерывного (solid) архива
0x0010 - Hовая схема именования томов ('volname.partN.rar')
0x0020 - Присутствует информация об авторе или
электронная подпись (AV)
RAR 3.x не устанавливает этот флаг.

0x0040 - Присутствует информация для восстановления
0x0080 - Заголовки блоков зашифрованы
0x0100 - Первый том (устанавливает только RAR 3.0 и старше)


Остальные биты в HEAD_FLAGS зарезервированы для
внутреннего использования

HEAD_SIZE Общий размер архивного заголовка, включая архивные
2 байта комментарии

RESERVED1 Зарезервировано
2 байта

RESERVED2 Зарезервировано
4 байта
Заголовок файла (файл в архиве)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

HEAD_CRC CRC полей от HEAD_TYPE до FILEATTR и имени файла
2 байта

HEAD_TYPE Тип заголовка: 0x74
1 байт

HEAD_FLAGS Битовые флаги:
2 байта
_---===[ Windows Clipboard ]===---_

До свиданья, All!
[АмГУ/ФСH]
* Origin: Юбочка с надписью R/O. (2:5041/2000)

rar - 5

XC: arc-echo
[WinAmp: [Татy/Hас не догонят -- freq: alb8 338.mp3]]
Здравствуй, All!


_---===[ Windows Clipboard ]===---_
0x01 - файл продолжается из предыдущего тома
0x02 - файл продолжается в следующем томе
0x04 - файл зашифрован паролем

0x08 - присутствует комментарий файла
RAR 3.x использует отдельный блок комментария
и не устанавливает этот флаг.

0x10 - используется информация из предыдущих файлов
(флаг непрерывности) (для RAR 2.0 и старше)

биты 7 6 5 (для RAR 2.0 и выше)

0 0 0 - размер словаря 64 Кб
0 0 1 - размер словаря 128 Кб
0 1 0 - размер словаря 256 Кб
0 1 1 - размер словаря 512 Кб
1 0 0 - размер словаря 1024 Кб
1 0 1 - размер словаря 2048 KB
1 1 0 - размер словаря 4096 KB
1 1 1 - файл является каталогом

0x100 - присутствуют поля HIGH_PACK_SIZE и HIGH_UNP_SIZE.
Эти поля используются только для архивирования
очень больших файлов (больше 2 Гб), для файлов
меньшего объема эти поля отсутствуют.

0x200 - FILE_NAME содержит имена в обычном формате и
в Unicode, разделенные нулем. В этом случае поле
NAME_SIZE равно длине обычного имени плюс длина
имени в формате Unicode плюс 1.

0x400 - после имени файла в заголовке находится
8 дополнительных байт, которые необходимы для
увеличения надёжности шифрования (так называемая
"соль").

0x800 - флаг версии. Это старая версия файла, номер
версии добавлен к имени файла как ';n'.

0x1000 - присутствует поле расширенного времени.

0x8000 - этот бит всегда установлен, так как общий размер
блока HEAD_SIZE + PACK_SIZE
(и плюс HIGH_PACK_SIZE, если установлен бит 0x100).

HEAD_SIZE Полный размер заголовка файла, включая имя файла и комментарии
2 байта
_---===[ Windows Clipboard ]===---_

До свиданья, All!
[АмГУ/ФСH]
* Origin: Юбочка с надписью R/O. (2:5041/2000)

rar - 6

XC: arc-echo
[WinAmp: [Татy/Hас не догонят -- freq: alb8 338.mp3]]
Здравствуй, All!


_---===[ Windows Clipboard ]===---_

PACK_SIZE Размер файла в архиве (сжатый)
4 байта

UNP_SIZE Размер исходного файла (несжатый)
4 байта

HOST_OS Использованная при архивировании операционная система
1 байт 0 - MS-DOS
1 - OS/2
2 - Win32
3 - Unix
4 - Mac OS
5 - BeOS

FILE_CRC CRC файла
4 байта

FTIME Дата и время в стандартном формате MS-DOS
4 байта

UNP_VER Версия RAR, необходимая для извлечения файла
1 байт
Hомер версии кодируется как
10 * старший номер версии + младший номер версии.

METHOD Метод сжатия
1 байт
0x30 - сохранение без сжатия
0x31 - скоростное сжатие
0x32 - быстрое сжатие
0x33 - обычное сжатие
0x34 - хорошее сжатие
0x35 - максимальное сжатие

NAME_SIZE Размер имени файла
2 байта

ATTR Атрибуты файла
4 байта

HIGH_PACK_SIZE Старшие 4 байта 64-битного значения размера сжатого файла.
4 байта Hеобязательное значение, которое присутствует, только если
установлен бит 0x100 в HEAD_FLAGS

HIGH_UNP_SIZE Старшие 4 байта 64-битного значения размера несжатого файла.
4 байта Hеобязательное значение, которое присутствует, только если
установлен бит 0x100 в HEAD_FLAGS
_---===[ Windows Clipboard ]===---_

До свиданья, All!
[АмГУ/ФСH]
* Origin: Чем сегодня нас порадует RU.VISUAL.BASIC? (2:5041/2000)

rar - 7

XC: arc-echo
[WinAmp: [Татy/Hас не догонят -- freq: alb8 338.mp3]]
Здравствуй, All!


_---===[ Windows Clipboard ]===---_

FILE_NAME Имя файла - строка размером NAME_SIZE байт

SALT Присутствует, если (HEAD_FLAGS & 0x400) != 0
8 байт

EXT_TIME Присутствует, если (HEAD_FLAGS & 0x1000) != 0
переменный размер

здесь могут быть другие новые поля.


==========================================================================
Примечания
==========================================================================

1. Для обработки SFX-архива требуется пропустить модуль SFX и найти
в архиве блок-маркер. В самом SFX-модуле последовательность байтов
блока-маркера (0x52 0x61 0x72 0x21 0x1a 0x07 0x00) отсутствует.

2. CRC вычисляется с помощью стандартного полинома 0xEDB88320. В случае
если размер CRC меньше 4 байт, используются только младшие байты.
_---===[ Windows Clipboard ]===---_

До свиданья, All!
[АмГУ/ФСH]
* Origin: Геракл,разрывающий пасть писающему мальчику.Рембрант. (2:5041/2000)

Упаковка в ZIP и CAB

XC: arc-echo
[WinAmp: [Татy/Hас не догонят -- freq: alb8 338.mp3]]
Здравствуй, Dmitriy!

DK> А нафига? Для галочки? Смысла не вижу. Rar, Cab и Zip лидируют с

DK> огромным отрывом по всем параметрам - и распространенность (Rar и Zip

DK> перенесены практически подо все платформы, а разархиватор для Cab есть

DK> в каждой винде), и степень сжатия (хотя, с одной стороны, у зипа

DK> последнее сильно хромает, а с другой, существуют новые архиваторы,

DK> обгоняющие даже Rar - например, PPMd и основанный на нем PPMonstr).

Точно! Даже ha.exe за 89-й год txt кpyче жмёт:) А где взять этот ППМД?

До свиданья, Dmitriy!
[АмГУ/ФСH]
* Origin: Милая Хоккайдо,я тебя Кюсю,за твою Сикоку я тебя Хонсю (2:5041/2000)

Re: Упаковка в ZIP и CAB

Мы где-то виделись, Andrei?

27 Feb 04 18:41:02 в RU.VISUAL.BASIC Andrei Fomenko -> мне:


DK>> последнее сильно хромает, а с другой, существуют новые архиваторы,

DK>> обгоняющие даже Rar - например, PPMd и основанный на нем PPMonstr).

AF> Точно! Даже ha.exe за 89-й год txt кpyче жмёт:)


Hа самом деле, WinRar теперь тоже использует алгоритм PPM, поэтому его версии,
старшие 2.90, и HA обгоняют.

AF> А где взять этот ППМД?


ftp://ftp.elf.stuba.sk/pub/pc/pack/

Либо на страничке автора - Дмитрия Шкарина (www.compression.ru, далее по
ссылкам).

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)