
                          RAR 汾 3.93 - Ϣ
                          ~~~~~~~~~~~~~~~~~~~~~~~~

                 ѹļʽ԰汾 1.50 ֮Ч

============================================================================
                              RAR ѹļʽ
============================================================================

   ѹļɿɱ䳤ȵĿɡЩ˳Ա仯ǵһһѹ
ļͷıǿ顣

   ÿһнṹʼ:

HEAD_CRC       2 ֽ    п鲿ֵ CRC
HEAD_TYPE      1 ֽ    
HEAD_FLAGS     2 ֽ    
HEAD_SIZE      2 ֽ    С
ADD_SIZE       4 ֽ    ѡṹ - ӿС

   ֻ (HEAD_FLAGS & 0x8000) != 0 ʱ ADD_SIZE Ŵ

    (HEAD_FLAGS & 0x8000) == 0 ܿС HEAD_SIZE
(HEAD_FLAGS & 0x8000) != 0 ʱ ADD_SIZE ṹڣܿС
HEAD_SIZE+ADD_SIZE

   ÿһ HEAD_FLAGS λͬ:

  0x4000 - ãʱɵ RAR 汾鲢ɾ
           ʱ鱻Ƶµѹļ;

  0x8000 - ãADD_SIZE ṹڣȫĴС HEAD_SIZE+ADD_SIZE

  Ŀ:

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          ӿ

   עͿʵֻʹãڵĿ顣

   ѹļв:

1. ȡͼǿ
2. ȡѹļͷ
3. ȡ HEAD_SIZE-sizeof(MAIN_HEAD) ֽ
4. ѹļβѹļֹȡ7ֽڵṹ HEAD_CRC
   HEAD_TYPEHEAD_FLAGSHEAD_SIZE С
5.  HEAD_TYPE
   if HEAD_TYPE==0x74
     ȡļͷ ( ʼ 7 ֽڱȡ)
     ȡ HEAD_SIZE-sizeof(FILE_HEAD) ֽ
     if (HEAD_FLAGS & 0x100)
       ȡ HIGH_PACK_SIZE*0x100000000+PACK_SIZE ֽ
     else
       ȡ PACK_SIZE ֽ
   else
     ȡ corresponding HEAD_TYPE :
       ȡ HEAD_SIZE-7 ֽ
       if (HEAD_FLAGS & 0x8000)
         ȡ ADD_SIZE ֽ
6.  4


 =====================================================================
                               ʽ
 =====================================================================


   ǿ ( MARK_HEAD )


HEAD_CRC         0x6152
2 ֽ

HEAD_TYPE       ͷ: 0x72
1 ֽ

HEAD_FLAGS       0x1a21
2 ֽ

HEAD_SIZE       С = 0x0007
2 ֽ

   ǿʵϰһ̶ֽ: 0x52 0x61 0x72 0x21 0x1a 0x07 0x00


   ѹļͷ ( MAIN_HEAD )


HEAD_CRC        HEAD_TYPE  RESERVED2  CRC ṹ
2 ֽ

HEAD_TYPE       ͷ: 0x73
1 ֽ

HEAD_FLAGS      λ:
2 ֽ
                0x0001  - (ѹļ)
                0x0002  - ѹļעʹ
                          RAR 3.x ʹ÷ֿעͿ飬ǡ

                0x0004  - ѹļ
                0x0008  - ʵ (ʵѹļ)
                0x0010  - µľ ('volname.partN.rar')
                0x0020  - ûϢ
                          RAR 3.x ǡ

                0x0040  - ָ¼
                0x0080  - ͷ
                0x0100  - һ(ֻ RAR 3.0 Ժ汾)

                еλΪڲʹñ

HEAD_SIZE       ѹļͷܴСѹļעͣ
2 ֽ

RESERVED1       
2 ֽ

RESERVED2       
4 ֽ



   ļͷ (ѹļеļ)


HEAD_CRC         HEAD_TYPE  FILEATTR  CRC ṹļ
2 ֽ        

HEAD_TYPE       ͷ: 0x74
1 ֽ

HEAD_FLAGS      λ:
2 ֽ
                0x01 - ļǰһм
                0x02 - ļںһм
                0x04 - ļʹ

                0x08 - ļעʹ
                       RAR 3.x ʹ÷ֿעͿ飬ǡ

                0x10 - ǰһļϢʹ(ʵ)
                       ( RAR 2.0 Ժ汾)

                     7 6 5 λ( RAR 2.0 Ժ汾)

                     0 0 0    - ֵС   64 KB
                     0 0 1    - ֵС  128 KB
                     0 1 0    - ֵС  256 KB
                     0 1 1    - ֵС  512 KB
                     1 0 0    - ֵС 1024 KB
                     1 0 1    - ֵС 2048 KB
                     1 1 0    - ֵС 4096 KB
                     1 1 1    - ļΪֵ

               0x100 - HIGH_PACK_SIZE  HIGH_UNP_SIZE ṹڡЩṹ
                       ڷǳ( 2GB)ĵСļЩṹڡ

               0x200 - FILE_NAME  0 ͨĺ Unicode ļ
                        NAME_SIZE ṹȵͨļĳȼ Unicode 
                       ļĳټ1

                       ˱Ǵڣ FILE_NAME  0 ֽڣζļ
                       ʹ UTF-8 롣

               0x400 - ͷļӵ8λӼܵİȫǱ
                       ġ(ν'Salt')

               0x800 - 汾ǡļ汾汾Ϊ';n'ӵļ

              0x1000 - չʱڡ

              0x8000 - λܱãĿĴСHEAD_SIZE + PACK_SIZE
                       ( 0x100 λãټ HIGH_PACK_SIZE)

HEAD_SIZE       ļͷȫС(ļע)
2 ֽ

PACK_SIZE       ѹļС
4 ֽ

UNP_SIZE        δѹļС
4 ֽ

HOST_OS         ѹļʹõĲϵͳ
1 ֽ                 0 - MS DOS
                       1 - OS/2
                       2 - Win32
                       3 - Unix
                       4 - Mac OS
                       5 - BeOS

FILE_CRC        ļ CRC
4 ֽ

FTIME           MS DOS ׼ʽںʱ
4 ֽ

UNP_VER         ѹļҪ RAR 汾
1 ֽ
                汾뷽 10 * 汾 + 汾

METHOD          ѹʽ
1 ֽ
                0x30 - 洢
                0x31 - ѹ
                0x32 - ѹ
                0x33 - ׼ѹ
                0x34 - Ϻѹ
                0x35 - ѹ

NAME_SIZE       ļС
2 ֽ

ATTR            ļ
4 ֽ

HIGH_PACK_SIZE  ѹļС 64 λֵĸ4ֽڡѡֵֻ HEAD_FLAGS е
4 ֽ          0x100 λòŴڡ

HIGH_UNP_SIZE   δѹļС64λֵĸ4ֽڡѡֵֻ HEAD_FLAGS е
4 ֽ          0x100 λòŴڡ

FILE_NAME       ļ - NAME_SIZE ֽڴСַ


SALT             (HEAD_FLAGS & 0x400) != 0 
8 ֽ

EXT_TIME         (HEAD_FLAGS & 0x1000) != 0 
ɱС

µʾ

 ==========================================================================
                              Ӧóע
 ==========================================================================

   1. ԽѹѹļʱҪѹļǿԽѹģ顣Խѹ
ģ鱾ûбǿ(0x52 0x61 0x72 0x21 0x1a 0x07 0x00)

   2. CRC ʹñ׼ʽ 0xEDB88320 CRC СС4ֽڣֻʹõλ
ֽڡ
