Está en la página 1de 6

RAR version 3.

93 -Información Técnica
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
EL FORMATO DE ARCHIVO DESCRITO A CONTINUACION ES VÁLIDO SOLO PARA VERSIONES
POSTERIORES A LA 1.50

==========================================================================
Formato de los ficheros RAR
==========================================================================
Los ficheros están constituidos por bloques de longitud variable. El
orden de estos bloques puede variar, pero el primer bloque debe ser
siempre un bloque de identificación seguido de un bloque de cabecera de
archivo.
Cada bloque empieza con los siguientes campos:
HEAD_CRC 2 bytes CRC total o parcial del bloque
HEAD_TYPE 1 byte Tipo de bloque
HEAD_FLAGS 2 bytes Indicaciones del bloque
HEAD_SIZE 2 bytes Tamaño del bloque
ADD_SIZE 4 bytes Tamaño del campo adicional - tamaño añadido del bloque
El campo ADD_SIZE sólo está presente si (HEAD_FLAGS & 0x8000) != 0
El tamaño total del bloque es HEAD_SIZE si (HEAD_FLAGS & 0x8000) == 0
y HEAD_SIZE+ADD_SIZE si el campo ADD_SIZE está presente - cuando
(HEAD_FLAGS & 0x8000) != 0.
En cada bloque los siguientes bits en HEAD_FLAGS tienen el mismo
significado:
0x4000 - Si está activado, antiguas versiones de RAR ignorarán el
bloque y lo borrarán cuando el archivo sea actualizado.
Si está a cero, el bloque es copiado al nuevo archivo
cuando el archivo es actualizado.
0x8000 - Si está€activado, el campo ADD_SIZE está€presente y el
tamaño total del bloque es HEAD_SIZE+ADD_SIZE.
Tipos válidos de bloques:
HEAD_TYPE=0x72 bloque de identificación
HEAD_TYPE=0x73 cabecera de archivo
HEAD_TYPE=0x74 cabecera de fichero
HEAD_TYPE=0x75 estilo antiguo cabecera de comentario
HEAD_TYPE=0x76 estilo antiguo información de autenticidad
HEAD_TYPE=0x77 estilo antiguo sub-bloque
HEAD_TYPE=0x78 estilo antiguo recuperación de registro
HEAD_TYPE=0x79 estilo antiguo información de autenticidad
HEAD_TYPE=0x7a sub-bloque
El bloque de comentario es usado actualmente sólo dentro de otros
bloques y no existe por separado.
El proceso del fichero se realiza de la siguiente forma:
1. Leer y comprobar bloque de identificación
2. Leer cabecera de archivo
3. Leer u omitir HEAD_SIZE- tamaño de(MAIN_HEAD) bytes
4. Si se llegó al final del archivo entonces acabar el proceso
del archivo, sino, leer 7 bytes en los campos HEAD_CRC,
HEAD_TYPE, HEAD_FLAGS, HEAD_SIZE.
5. Comprobar HEAD_TYPE.
si HEAD_TYPE==0x74
leer cabecera de fichero (los primeros 7 bytes ya han sido leídos)
leer u omitir HEAD_SIZE- tamaño de(FILE_HEAD) bytes
si (HEAD_FLAGS & 0x100)
leer u omitir HIGH_PACK_SIZE*0x100000000+PACK_SIZE bytes
sino
leer u omitir PACK_SIZE bytes
sino
leer el correspondiente bloque HEAD_TYPE:
leer HEAD_SIZE-7 bytes
si (HEAD_FLAGS & 0x8000)
leer ADD_SIZE bytes
6. ir al punto 4.
==========================================================================
Formato de los bloques
==========================================================================
Bloque de identificación ( MARK_HEAD )

HEAD_CRC Siempre 0x6152


2 bytes
HEAD_TYPE Tipo de bloque: 0x72
1 byte
HEAD_FLAGS Siempre 0x1a21
2 bytes
HEAD_SIZE Tamaño del bloque = 0x0007
2 bytes
El bloque de identificación es actualmente considerado como una
secuencia fija de bytes: 0x52 0x61 0x72 0x21 0x1a 0x07 0x00

Cabecera de archivo ( MAIN_HEAD )

HEAD_CRC CRC de los campos HEAD_TYPE a RESERVED2


2 bytes
HEAD_TYPE Tipo de bloque: 0x73
1 byte
HEAD_FLAGS Pequeñas indicaciones:
2 bytes
0x0001 - Atributo de archivo multi-volumen
0x0002 - Comentario de archivo presente
RAR 3.x usa el bloqueo separado del comentario
y no establece esta indicación.
0x0004 - Atributo de bloqueo del archivo
0x0008 - Atributo de archivo sólido
0x0010 - Nombrar nuevo esquema de volumen ('volname.partN.rar
')
0x0020 - Información de autenticidad presente
RAR 3.x no establece esta indicación.
0x0040 - Registro de recuperación presente
0x0080 - Cabeceras de bloque son codificadas
0x0100 - Primer volumen (sólo establecido en RAR 3.0 y posterio
res)
los demás bits de HEAD_FLAGS están reservados para uso interno.
HEAD_SIZE Tamaño total de la cabecera del bloque incluyendo comentarios del
2 bytes archivo

RESERVED1 Reservado
2 bytes
RESERVED2 Reservado
4 bytes

Cabecera de fichero (Fichero en el archivo)

HEAD_CRC CRC de los campos desde HEAD_TYPE a FILEATTR


2 bytes y el nombre del fichero
HEAD_TYPE Tipo de bloque: 0x74
1 byte
HEAD_FLAGS Pequeñas indicaciones:
2 bytes
0x01 - El fichero continúa del volumen anterior
0x02 - El fichero continúa en el siguiente volumen
0x04 - Fichero protegido con contraseña
0x08 - Comentario de fichero presente
RAR 3.x usa el bloqueo separado del comentario
y no establece esta indicación.
0x10 - Se usa información del fichero anterior
(indicador de archivo sólido), para RAR
2.00 y posteriores
Bits 7 6 5 (RAR 2.0 y posteriores)
0 0 0 - diccionario de 64 Kb
0 0 1 - diccionario de 128 Kb
0 1 0 - diccionario de 256 Kb
0 1 1 - diccionario de 512 Kb
1 0 0 - diccionario de 1024 Kb
1 0 1 - diccionario de 2048 KB
1 1 0 - diccionario de 4096 KB
1 1 1 - el fichero es un directorio
0x100 - Campos HIGH_PACK_SIZE y HIGH_UNP_SIZE
están presentes. Estos campos son sólo usados por el
archivo para ficheros enormes (más grandes de 2Gb),
para ficheros pequeños estos campos están ausentes.
0x200 - FILE_NAME contiene ambos nombres, el Unicode habitual
y el codificado, separados por un cero. En este caso si
el campo NAME_SIZE es igual a la longitud habitual el
nombre más el nombre codificado Unicode más 1
Si esta indicación está presente, pero FILE_NAME
difiere de cero bytes, Quiere decir que el nombre
del fichero está codificado usando UTF-8.
0x400 - La cabecera contiene 8 bytes adicionales después del
nombre del fichero, cuando es requerido para incrementar
la seguridad de codificación (también llamado 'salt').
0x800 - Indicación de versión. Si es fichero de una antigua versión,
se añade al fichero un número de versión llamado ';n'.
0x1000 - campo de extensión de tiempo presente.
0x8000 - este bit siempre es determinado, debido a que el tamaño
total del bloque es HEAD_SIZE + PACK_SIZE
(y más HIGH_PACK_SIZE, si bit 0x100 está determinado)
HEAD_SIZE Tamaño total del bloque incluyendo el nombre del
2 bytes fichero y comentarios.
PACK_SIZE Tamaño del fichero comprimido
4 bytes
UNP_SIZE Tamaño del fichero sin comprimir
4 bytes
HOST_OS Sistema operativo usado para comprimir el archivo
1 byte 0 - MS DOS
1 - OS/2
2 - Win32
3 - Unix
4 - Mac OS
5 - BeOS
FILE_CRC CRC del fichero
4 bytes
FTIME Fecha y hora en formato estándar MS DOS
4 bytes
Bits Descripción
0-4 Segundos divididos por 2
5-10 Minutos (0-59)
11-15 Hora (0-23)
16-20 Dia del mes (1-31)
21-24 Mes (1=Enero, ...)
25-31 Años transcurridos desde 1980
UNP_VER Versión de RAR necesaria para extraer el fichero
1 byte
La versión necesaria para la extracción está€codificada
como 10 * versión mayor + versión menor.
METHOD Método de compresión
1 byte
0x30 - sin comprimir
0x31 - compresión muy rápida
0x32 - compresión rápida
0x33 - compresión normal
0x34 - buena compresión
0x35 - la mejor compresión
NAME_SIZE Tamaño del nombre de fichero
2 bytes
ATTR Atributos del fichero
4 bytes
HIGH_PACK_SIZE Valor de tamaño 64 bits para fichero comprimido mayor de 4 bytes.
4 bytes Valor opcional, presente sólo si bit 0x100 en HEAD_FLAGS está
determinado.
HIGH_UNP_SIZE Valor de tamaño 64 bits para fichero descomprimido mayor de 4 byte
s.
4 bytes Valor opcional, presente sólo si bit 0x100 en HEAD_FLAGS está
determinado.

FILE_NAME Nombre del fichero - cadena de longitud NAME_SIZE bytes

SALT presente si (HEAD_FLAGS & 0x400) != 0


8 bytes
EXT_TIME presente si (HEAD_FLAGS & 0x1000) != 0
tamaño variable
otros nuevos campos se pueden añadir aquí.

==========================================================================
Notas para aplicaciones
==========================================================================

1. Para procesar archivos SFX es necesario omitir el módulo SFX,


buscando el bloque de identificación en el archivo. No hay ninguna
secuencia de identificación (0x52 0x61 0x72 0x21 0x1a 0x07 0x00) en
el módulo SFX.

2. El CRC se calcula usando el polinomio estándar 0xEDB88320. En el


caso de que el tamaño del CRC sea menor de 4 bytes, sólo los bytes
de orden más bajo serán usados.

También podría gustarte