Formato de los archivos RAR

Tamaño de letra Mayor | Menor | Normal - Imprimir este artículo  


Este artículo describe el formato de los ficheros RAR, se trata de una información exclusiva para programadores, si quiere saber lo que es un archivo RAR, por favor, lea este artículo.

RAR version 3.70 -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 posteriores)
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
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 bytes.
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.

Públicado el 29 de agosto de 2006 a las 09:17:51 CEST
Última actualización

42.231 visitas

¿ Alguna pregunta sobre este artículo ?

3,59 puntos 3,59 puntos 3,59 puntos 3,59 puntos 3,59 puntos Valoración media 3,59 sobre 5 ( 175 votos)

Valorar este artículo Valore este artículo del 1 al 5:

¿ Cuál es su opinión ? ¿ Alguna sugerencia ? ¿ Algo que no haya entendido ?
Su opinión nos interesa mucho ...

Si su opinión requiere respuesta, por favor, pregunte usando este enlace o no podremos contestarle.