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