lunes, 30 de septiembre de 2013

Formato RAR

Introducción

Por ThE InSpEcToR

Es un formato de compresion de archivos muy diferente del formato ZIP cuya estructura esta conformada por los siguientes elementos:

-Cabecera General del archivo
-Cabecera de archivo comprimido
-Datos comprimidos
-Final de archivo


Cabecera general del archivo


Es una estructura de 20bytes que básicamente corresponden a una firma del tipo de archivo puesto que es igual en todos los archivos de este tipo; y esta compuesta por dos elementos que son:

Firma inicial:
Los primeros 7 bytes que corresponden a:

Nombre del campo
Tamaño
Bytes
Firma: 2 bytes (0x5261)
HEAD_TYPE 1 byte (0x73)
HEAD_FLAG 2 bytes (0x211A)
HEAD_SIZE 2 bytes (0x0700)

Luego continua con una cabecera que contiene otra secuencia de bytes fijos que son:

Nombre
Tamaño
Bytes
CRC 2 bytes (0x90CF)
HEAD_TYPE 1 byte (0x73)
HEAD_FLAG 2 bytes (0x0000)
HEAD_SIZE 2 bytes (0x000D)
RESERVED1 2 bytes (0x0000)
RESERVED2 4 bytes (0x0000)

Valores del elemento HEAD_FLAG


(0x0000) Valor por defecto
(0x0001) Archivo hace parte de un archivo por partes
(0x0002)
Archivo posee un comentario
*RAR 3.x y superior usan un subbloque para almacenar el comentario y no activan esta bandera
(0x0004) Bloqueo de archivo activado(Winrar no puede moficar el archivo)
(0x0008) Archivo solido(Utiliza un solo diccionario para todos los archivos)
(0x0010) Archivo nombrado como ('volname.partN.rar)
(0x0020)
Información de autenticidad presente
*RAR 3.x y superior usan un subbloque para almacenar el comentario y no activan esta bandera
(0x0040) Registro de recuperación activado
(0x0080) Tanto el archivo como su cabecera se encuentran cifrados
(0x0100) El archivo actual es el primer volumen de varios

Cabecera de archivo agregado


Cada archivo que se agrega a la estructura se forma de una secuencia igual a la siguiente y en consectivo uno despues del otro.

Nombre
Tamaño
Descripción
CRC 2 bytes HEAD_TYPE hasta el inicio archivo comprimido
HEAD_TYPE 1 byte

HEAD_FLAG 2 bytes

HEAD_SIZE 2 bytes

PACK_SIZE 4 bytes

UPAC_SIZE 4 bytes

HOST_OS 1 byte

FILE_CRC 4 bytes CRC de datos comprimidos
LAST_TIME 2 bytes

LAST_DATE 2 bytes

VER_NEED 1 byte

PACK_METHOD 1 byte

LENG_NAME 2 bytes

ATTRIBUTE 4 bytes

NAME

Variable termina con byte nulo (0x00)
EXT_TIME Variable


Bytes comprmidos del archivo
PACK_BYTES Variable


Bloque final del archivo


Una vez se terminan de agregar los archivos comprimidos se agrega una firma final que es igual en todos los archivos y se constituye de:

Nombre
Tamaño
Bytes
CRC_BLOQUE 2 bytes (0xC43D)
TIPO_BLOQUE 1 byte (0x7B)
FLAG_BLOQUE 2 bytes (0x0040)
BLOCK_SIZE 2 bytes (0x0700)

Descripción del campo HEAD_TYPE


Cada parte de la estructura posee luego del CRC un elemento llamdo HEAD_TYPE o tipo de cabecera que idenfirica el bloque de datos que contiene el elemento actual y este valor para los programas que procesan este tipo de archivos puede tomar uno de los siguientes valores segun corresponda.

HEAD_TYPE
Descripción
0×72
marca de bloque
0×73
cabecera de carpeta
0×74
cabecera de archivo
0×75
cabecera comentario (viejo estilo)
0×76
información de autenticación (viejo estilo)
0×77
subbloque (viejo estilo)
0×78
registro de recuperación (viejo estilo)
0×79
información de autenticidad (viejo estilo)
0x7A
subbloque
0x7B
Fin de archivo

Descripción del campo HEAD_FLAG


Seguido del elemento HEAD_TYPE sigue el elemento HEAD_FLAG o Banderas de cabecera que contiene información sobre como esta construida la compresión del archivo y como esta conformada la cabecera de actual.

Este campo se constituye de 2bytes y teniendo en cuenta que la forma de almacenamiento del archivo es Big-Endian en el byte (0x9020) se almacenara como (0x2090) ahora la descripcion:

(0×0001) Fichero continua desde volumen previo
(0×0002) Fichero continua en el proximo volumen
(0×0004) Fichero encriptado con contraseña
(0×0008)
Comentario de fichero presente
*RAR 3.x usa un subbloque para el comentario y no activa esta bandera.
(0×0010)
Usa información de archivos previos (solid flag)
*RAR 2.0 y superior

Los bits 7 6 5 para RAR 2.0 y superior se usan para almacenar el tamaño del diccionario utilizado para la comrpesion de datos:

0 0 0 – tamaño del diccionario 64 KB
0 0 1 – tamaño del diccionario 128 KB
0 1 0 – tamaño del diccionario 256 KB
0 1 1 – tamaño del diccionario 512 KB
1 0 0 – tamaño del diccionario 1024 KB
1 0 1 – tamaño del diccionario 2048 KB
1 1 0 – tamaño del diccionario 4096 KB
1 1 1 – fichero es directorio

(0×0100) HIGH_PACK_SIZE y HIGH_UNP_SIZE estan presentes; Estos campos se requieren cuando el tamaño del archivo excede los 2Gb de lo contario no son estan presentes.
(0×0200) FILE_NAME contiene dos nombres uno usual y otro codificado unicode separados por (0x00). En este caso NAME_SIZE es equivalente a la longitud del nombre usual mas el codificado a unicode mas 1. Si esta bandera esta presente, pero FILE_NAME no contiene bytes cero, significa que el nombre esta codificado en UTF-8.
(0×0400) La cabecera contiene adicionalmente 8 bytes despues del nombre de archivo. Estos son requeridos para incrementar la seguridad de la encriptación (tambien llamados ‘salt’).
(0×0800) Indicador de version. Almacena las versiones anteriores de los ficheros al actualizarlos en un archivo existente. Las versiones anteriores se renombraran como ‘nombrefichero;n’, donde ‘n’ es el número de versión.
(0×1000) Campo de tiempo presente.
(0×8000) Este bite siempre esta activo, puesto que el tamaño del bloque completo es: HEAD_SIZE + PACK_SIZE (y suma HIGH_PACK_SIZE, si el bit 0×100 esta activo)

Descripcion del byte HOST_OS


Este byte se refiere al sistema operativo utilizado para generar el archivo:

0 – MS DOS
1 – OS/2
2 – Win32
3 – Unix
4 – Mac OS
5 – BeOS

Descripcion del byte VER_NEED


Se refiere a la versión del programa necesaria para extraer el archivo y esta codificada así:

10 * (Version mayor . version menor)
ejemplo version 2.9 -> 29 -> se guarda como 1D

Descripcion del byte METHOD


Almacena el tipo de compresión utilizado para el archivo:

0×30 – storing
0×31 – fastest compression
0×32 – fast compression
0×33 – normal compression
0×34 – good compression
0×35 – best compression


No hay comentarios.:

Publicar un comentario