Vous êtes sur la page 1sur 5

RAR version 3.

51 - Informations Techniques ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LE FORMAT D'ARCHIVE DCRIT CI-DESSOUS EST VALABLE POUR TOUTES LES VERSIONS DEPUIS LA VERSION 1.50 ========================================================================== Format des fichiers d'archive RAR ========================================================================== Un fichier d'archive se compose de blocs de longueur variable. L'ordre de ces blocs peut changer, mais le premier bloc doit tre un marqueur de bloc suivi d'un bloc d'en-tte d'archive. Chaque bloc commence par les champs suivants : HEAD_CRC HEAD_TYPE HEAD_FLAGS HEAD_SIZE ADD_SIZE 2 1 2 2 4 octets octet octets octets octets CRC de la totalit du bloc ou d'une partie Type de bloc Indicateur de bloc Taille du bloc Champ optionnel - taille du bloc ajout

Le champ ADD_SIZE est present uniquement si (HEAD_FLAGS & 0x8000) != 0 La taille totale du bloc est HEAD_SIZE si (HEAD_FLAGS & 0x8000) == 0 et est HEAD_SIZE+ADD_SIZE si le champ ADD_SIZE est prsent - lorsque (HEAD_FLAGS & 0x8000) != 0. Dans chaque bloc les valeurs hexadcimales pour HEAD_FLAGS sont les suivantes : 0x4000 - Si spcifi, les anciennes versions de RAR ignoreront le bloc et le supprimeront lorsque l'archive est mise jour. Si non spcifi, le bloc est copi dans nouveau fichier d'archive lorsque l'archive est mise jour; 0x8000 - Si spcifi, le champ ADD_SIZE est prsent et la taille totale du bloc sera HEAD_SIZE+ADD_SIZE. Dclaration du type de bloc : HEAD_TYPE=0x72 HEAD_TYPE=0x73 HEAD_TYPE=0x74 HEAD_TYPE=0x75 HEAD_TYPE=0x76 HEAD_TYPE=0x77 HEAD_TYPE=0x78 HEAD_TYPE=0x79 HEAD_TYPE=0x7a marqueur de bloc en-tte d'archive en-tte de fichier ancien style d'en-tte d'un commentaire ancien style d'information d'authenticit ancien style de sous-bloc ancien style d'enregistrement de restauration ancien style d'information d'authenticit sous-bloc

Le bloc de commentaire est utilis uniquement dans d'autres blocs et il n'existe pas sparment. Le traitement d'archive est fait de la faon suivante : 1. Lit et contrle le marqueur de bloc 2. Lit l'en-tte de l'archive 3. Lit ou saute les octets de HEAD_SIZE-sizeof(MAIN_HEAD)

4. Si la fin de l'archive est rencontre, alors termine le traitement de l'archive, sinon lit 7 octets dans les champs HEAD_CRC, HEAD_TYPE, HEAD_FLAGS, HEAD_SIZE. 5. Contrle de HEAD_TYPE. si HEAD_TYPE==0x74 lit l'en-tte du fichier ( les 7 premiers octets sont dj lus ) lit ou saute les octets de HEAD_SIZE-sizeof(FILE_HEAD) si (HEAD_FLAGS & 0x100) lit ou saute les octets de HIGH_PACK_SIZE*0x100000000+PACK_SIZE sinon lit ou saute les octets de PACK_SIZE sinon lit le bloc HEAD_TYPE block correspondant : lit HEAD_SIZE-7 octets si (HEAD_FLAGS & 0x8000) lit les octets de ADD_SIZE 6. retourne au 4. ========================================================================== Formats du Bloc ========================================================================== Marqueur de bloc ( MARK_HEAD ) HEAD_CRC 2 octets HEAD_TYPE 1 octet HEAD_FLAGS 2 octets HEAD_SIZE 2 octets Toujours 0x6152 Type d'en-tte : 0x72 Toujours 0x1a21 Taille du bloc = 0x0007

Le marqueur de bloc est considr comme une relle squence d'octets : 0x52 0x61 0x72 0x21 0x1a 0x07 0x00

En-tte d'archive ( MAIN_HEAD ) HEAD_CRC 2 octets HEAD_TYPE 1 octet HEAD_FLAGS 2 octets CRC des champs HEAD_TYPE RESERVED2 Type d'en-tte : 0x73 Indicateurs binaire : 0x0001 - Attribut de volume(volume d'archive) 0x0002 - Commentaire d'archive prsent, RAR 3.x utilise un bloc spar du commentaire et n'active pas ce flag.

0x0004 0x0008 0x0010 0x0020

Attribut de verrouillage d'archive Attribut "Solide" (archive "Solide") Nouveau style de nom de volume('NomVolume.partN.rar') Information d'authenticit prsente, RAR 3.x n'active pas ce flag.

0x0040 - Enregistrement de restauration prsent 0x0080 - Les en-ttes de bloc sont crypts 0x0100 - Premier volume (uniquement partir de la version RA R 3.0 et ultrieures) D'autres bits dans HEAD_FLAGS sont rservs pour l'utilisation interne HEAD_SIZE 2 octets RESERVED1 2 octets RESERVED2 4 octets Archive header total size including archive comments Reserv Reserv

En-tte fichier (Fichier dans l'archive) HEAD_CRC 2 octets HEAD_TYPE 1 octet HEAD_FLAGS 2 octets CRC des champs de HEAD_TYPE FILEATTR et nom du fichier Type d'en-tte : 0x74 Indicateurs binaire : 0x01 - fichier continu depuis le volume prcdent 0x02 - fichier continu depuis le volume suivant 0x04 - fichier crypt avec mot de passe 0x08 - fichier commentaire prsent, RAR 3.x utilise un bloc spar du commentaire et n'active pas ce flag. 0x10 - l'information des fichiers prcdents est utilise (indicateur "Solide")(pour RAR 2.0 et suivants) bits 7 6 5 (pour RAR 2.0 et suivants) 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 taille du dictionnaire 64 KB taille du dictionnaire 128 KB taille du dictionnaire 256 KB taille du dictionnaire 512 KB taille du dictionnaire 1024 KB taille du dictionnaire 2048 KB taille du dictionnaire 4096 KB le fichier est un rpertoire

0x100 - Les champs HIGH_PACK_SIZE et HIGH_UNP_SIZE sont prsents. Ces champs sont utiliss pour

archiver uniquement les gros fichiers (plus gros que 2Go), car pour les fichiers plus petits, ces champs sont absents. 0x200 - FILE_NAME contient deux noms, le premier normal, le deuxime cod Unicode et ils sont spars par un zro. Dans ce cas, NAME_SIZE est gal la longueur du premier nom, plus le nom cod Unicode, plus 1. 0x400 - L'en-tte contient 8 octets supplmentaires aprs le nom de fichier, qui sont ncessaires pour augmenter la scurit du cryptage (qui s'appelle 'salt'). 0x800 - Indicateur pour la version. Pour une ancienne version de fichier, un numro de version ';n' est ajout au nom du fichier. 0x1000 - Champ heure tendue prsent. 0x8000 - Cet indicateur binaire est toujours prsent, ainsi la longueur totale du bloc est HEAD_SIZE + PACK_SIZE (et plus HIGH_PACK_SIZE, si l'indicateur binaire 0x100 est prsent). HEAD_SIZE 2 octets PACK_SIZE 4 octets UNP_SIZE 4 octets HOST_OS 1 octet La taille totale de l'en-tte du fichier, comprend le nom du fichier et son commentaire. Taille du fichier compress. Taille du fichier non compress. Systme d'exploitation utilis pour archiver : 0 - MS DOS 1 - OS/2 2 - Win32 3 - Unix 4 - Mac OS 5 - BeOS CRC du fichier. Date et heure dans le format standard MS-DOS. Version RAR requise pour extraire le fichier. Le numro de version est cod comme 10 * version principale + version mineure. METHOD 1 octet Mthode de compression. 0x30 0x31 0x32 0x33 stockage compression trs rapide compression rapide compression normale

FILE_CRC 4 octets FTIME 4 octets UNP_VER 1 octet

0x34 - compression bonne 0x35 - compression meilleure NAME_SIZE 2 octets ATTR 4 octets Taille du nom du fichier. Attributs du fichier.

HIGH_PACK_SIZE Plus 4 octets la valeur 64 bits du fichier compress. 4 octets Valeur facultative, prsente uniquement si l'indicateur binaire 0x100 dans HEAD_FLAGS est prsent. HIGH_UNP_SIZE 4 octets FILE_NAME SALT 8 octets EXT_TIME taille de la variable Plus 4 octets la valeur 64 bits du fichier non compress. Valeur facultative, prsente uniquement si l'indicateur binaire 0x100 dans HEAD_FLAGS est prsent. Nom du fichier - la taille est dans NAME_SIZE. prsent si (HEAD_FLAGS & 0x400) != 0 prsent si (HEAD_FLAGS & 0x1000) != 0

D'autres nouveaux champs peuvent apparatre ici. =========================================================================== Notes d'application =========================================================================== 1. Pour traiter les archives SFX, vous devez sauter le module SFX en recherchant le marqueur de bloc dans l'archive. Il n'y a aucune squence de marqueur de bloc (0x52 0x61 0x72 0x21 0x1a 0x07 0x00) dans le module SFX lui-mme. 2. Le CRC est calcul en utilisant le polynme standard 0xEDB88320. Dans le cas o la taille du CRC serait moins de 4 octets, seulement les octets de poids faible seront utiliss.