
 ۻ   ۻ  ۻ
 ۻ ۻ ۻ     RAR versin 2.02 - Informacin Tcnica
 ɼ ۺ ɼ     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ۻ ۺ ۻ
 ۺ  ۺ ۺ  ۺ ۺ  ۺ
 ͼ  ͼ ͼ  ͼ ͼ  ͼ

           Ŀ
            EL FORMATO DE ARCHIVO DESCRITO A CONTINUACION ES 
            VALIDO SOLO PARA VERSIONES POSTERIORES A LA 1.50 
           

 ͻ
  Formato de los ficheros RAR 
 ͼ

   Los ficheros estn constituidos por bloques de longitud variable. El
orden de estos bloques puede variar, pero el primer bloque debe ser
siempre un bloque de identificacin 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     Flags del bloque
HEAD_SIZE      2 bytes     Tamao del bloque
ADD_SIZE       4 bytes     Tamao del campo adicional

   El campo ADD_SIZE slo est presente si (HEAD_FLAGS & 0x8000) != 0

   El tamao 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, viejas versiones de RAR ignorarn el
	   bloque y lo borrarn 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
	   tamao total del bloque es HEAD_SIZE+ADD_SIZE.

  Tipos vlidos de bloques:

HEAD_TYPE=0x72          bloque de identificacin
HEAD_TYPE=0x73          cabecera de archivo
HEAD_TYPE=0x74          cabecera de fichero
HEAD_TYPE=0x75          cabecera de comentario
HEAD_TYPE=0x76          informacin extra
HEAD_TYPE=0x77          sub-bloque
HEAD_TYPE=0x78          proteccin

   El bloque de comentario es usado actualmente slo 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 identificacin
2. Leer cabecera de archivo
3. Leer o saltar HEAD_SIZE-sizeof(MAIN_HEAD) bytes
4. Si se lleg al final del archivo entonces acaba el proceso
   del archivo, si no, leer 7 bytes en los campos HEAD_CRC,
   HEAD_TYPE, HEAD_FLAGS, HEAD_SIZE.
5. Comprobar HEAD_TYPE.
   Si es necesario leer el bloque:
	 si HEAD_TYPE==0x74
	   leer cabecera de fichero
	    ( los primeros 7 bytes ya han sido ledos )
	   leer o saltar HEAD_SIZE-sizeof(FILE_HEAD) bytes
	   leer o saltar FILE_SIZE bytes
	 si no
	   leer el correspondiente bloque HEAD_TYPE:
	     leer HEAD_SIZE-7 bytes
	     si (HEAD_FLAGS & 0x8000)
	       leer ADD_SIZE bytes
   Si no es necesario leer el bloque:
	 saltar HEAD_SIZE-7 bytes
	 si (HEAD_FLAGS & 0x8000)
	   saltar ADD_SIZE bytes
6. ir al punto 4.


 ͻ
   Formato de los bloques  
 ͼ


   Bloque de identificacin ( MARK_HEAD )


HEAD_CRC        Siempre 0x6152
2 bytes

HEAD_TYPE       Tipo de bloque: 0x72
1 byte

HEAD_FLAGS      Siempre 0x1a21
2 bytes

HEAD_SIZE       Tamao del bloque = 0x0007
2 bytes

   El bloque de identificacin 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      Flags:
2 bytes
		0x01    - Atributo de volumen (archivo multi-volumen)
		0x02    - Comentario de archivo presente
		0x04    - Atributo de bloqueo de archivo
		0x08    - Atributo de solidez (archivo slido)
		0x10    - No usado
		0x20    - Informacin de autenticidad presente

		los dems bits de HEAD_FLAGS estn reservados para
		uso interno.

HEAD_SIZE       Tamao total del bloque incluyendo el archivo,
2 bytes         comentarios y otros campos adicionales

RESERVED1       Reservado
2 bytes

RESERVED2       Reservado
4 bytes


Comentario      presente si (HEAD_FLAGS & 0x02) != 0



   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      Flags:
2 bytes
		0x01 - El fichero contina del volumen anterior
		0x02 - El fichero contina en el siguiente volumen
		0x04 - Fichero protegido con contrasea
		0x08 - Comentario de fichero presente
		0x10 - Se usa informacin del fichero anterior
		       (indicador de archivo slido), slo en
		       la versin 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  - reservado
		     1 1 0  - reservado
		     1 1 1  - el fichero es un directorio

		(HEAD_FLAGS & 0x8000) == 1, debido a que el tamao
		total del bloque es HEAD_SIZE + PACK_SIZE

HEAD_SIZE       Tamao total del bloque incluyendo el nombre del
2 bytes         fichero, comentarios y otros campos adicionales.

PACK_SIZE       Tamao del fichero comprimido
4 bytes

UNP_SIZE        Tamao 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

FILE_CRC        CRC del fichero
4 bytes

FTIME           Fecha y hora en formato estandar MS DOS
4 bytes

UNP_VER         Versin de RAR necesaria para extraer el fichero
1 byte

METHOD          Mtodo de compresin
1 byte

NAME_SIZE       Tamao del nombre de fichero
2 bytes

ATTR            Atributos del fichero
4 bytes

FILE_NAME       Nombre del fichero - cadena de longitud NAME_SIZE bytes


Comentario      presente si (HEAD_FLAGS & 0x08) != 0



  cabecera de comentario


HEAD_CRC        CRC de los campos HEAD_TYPE a COMM_CRC
2 bytes

HEAD_TYPE       Tipo de bloque: 0x75
1 byte

HEAD_FLAGS      Flags
2 bytes

HEAD_SIZE       Tamao del bloque + tamao del comentario
2 bytes

UNP_SIZE        Tamao del comentario sin comprimir
2 bytes

UNP_VER         Versin de RAR necesaria para extraer el comentario
1 byte

METHOD          Mtodo de compresin
1 byte

COMM_CRC        CRC del comentario
2 bytes

COMMENT         Texto del comentario



  Bloque de informacin extra


HEAD_CRC        CRC del bloque
2 bytes

HEAD_TYPE       Tipo de bloque: 0x76
1 byte

HEAD_FLAGS      Flags
2 bytes

HEAD_SIZE       Tamao total del bloque
2 bytes

INFO            Otros datos

  Sub-bloque

Cualquier objecto del archivo (bloque o cabecera) puede ir seguido
de un sub-bloque. El sub-bloque depende del objecto principal y
puede ser borrado o movido a una nueva versin del archivo cuando
este es actualizado.

 El sub-bloque contiene los siguientes campos:

HEAD_CRC        CRC
2 bytes

HEAD_TYPE       Tipo de cabecera: 0x77
1 byte

HEAD_FLAGS      Flags
2 bytes
		(HEAD_FLAGS & 0x8000) == 1, ya que el tamao total
		es HEAD_SIZE + DATA_SIZE

HEAD_SIZE       Tamao total del bloque
2 bytes

DATA_SIZE       Tamao total de los datos
4 bytes

SUB_TYPE        Tipo de sub-bloque
2 bytes

RESERVED        Siempre 0
1 byte

Otros           Dependen del tipo de sub-bloque
campos


  Sub-bloque para atributos extendidos de OS/2


HEAD_CRC        CRC
2 bytes

HEAD_TYPE       Tipo de cabecera: 0x77
1 byte

HEAD_FLAGS      Flags
2 bytes
		(HEAD_FLAGS & 0x8000) == 1, ya que el tamao total
		es HEAD_SIZE + DATA_SIZE

HEAD_SIZE       Tamao total del bloque
2 bytes

DATA_SIZE       Tamao total de los datos (tamao de los
		atributos comprimidos)
4 bytes

SUB_TYPE        0x100
2 bytes

RESERVED        Siempre 0
1 byte

UNP_SIZE        Tamao sin comprimir de los atributos
4 bytes

UNP_VER         Versin del RAR necesaria para descomprimir los
		atributos
1 byte

METHOD          Mtodo de compresin
1 byte

EA_CRC          CRC de los atributos
4 bytes


 ͻ
   Notas para aplicaciones  
 ͼ


   1. Si en el futuro se aadiesen ms bloques, su tamao ser incluido
      en el campo HEAD_SIZE.

   2. Para procesar archivos SFX es necesario saltar el mdulo SFX
      buscando el bloque de identificacin en el archivo. No hay ninguna
      secuencia de identificacin (0x52 0x61 0x72 0x21 0x1a 0x07 0x00) en
      el mdulo SFX.

      Actualmente, el mtodo ms rpido para determinar si se trata de
      un archivo Rar SFX es localizar la cadena 'RSFX' en el offset 0x1C.
      El uso de este mtodo, que no estaba documentado, no se asegur
      para futuras versiones de RAR.

   3. El CRC se calcula usando el polinomio estndar 0xEDB88320. En
      caso de que el tamao del CRC sea de menos de 4 bytes, slo los bytes
      de orden ms bajo sern usados.

   4. Mtodos de compresin:
	 0x30 - no comprimir
	 0x31 - compresin super-rpida
	 0x32 - compresin rpida
	 0x33 - compresin normal
	 0x34 - buena compresin
	 0x35 - compresin mxima

   5. La versin necesaria para la extraccin est codificada como
      10 * versin mayor + versin menor.

