TechNote.txt

(9 KB) Pobierz
                    RAR wersja 3.51 - Informacje techniczne
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


       FORMAT ARCHIWUM OPISANY PONIッEJ DOTYCZY TYLKO WERSJI OD 1.50 WZWYッ


  ============================================================================
                               Format archiwum RAR-a
  ============================================================================

   Archiwum skウada si・z blok o rnej dウugo彡i. Kolejno懈 tych blok moソe
by・rna, lecz pierwszym blokiem musi by・blok identyfikacyjny, po ktym
musi wystケpi・blok nagウka archiwum.

   Kaソdy blok rozpoczyna si・nast麪ujケcymi polami:

HEAD_CRC      2 bajty   CRC (suma kontrolna) caウego bloku lub jego cz龕ci
HEAD_TYPE     1 bajt    typ bloku
HEAD_FLAGS    2 bajty   znaczniki bloku
HEAD_SIZE     2 bajty   rozmiar bloku
ADD_SIZE      4 bajty   pole opcjonalne

   Pole ADD_SIZE jest obecne tylko je徑i (HEAD_FLAGS & 0x8000) != 0

   Caウkowity rozmiar bloku to HEAD_SIZE je徑i (HEAD_FLAGS & 0x8000) == 0
lub HEAD_SIZE+ADD_SIZE je徑i pole ADD_SIZE jest obecne - gdy
(HEAD_FLAGS & 0x8000) != 0.

   W kaソdym bloku nast麪ujケce bity w polu HEAD_FLAGS oznaczajケ:

  0x4000 - je徑i ustawiony, starsze wersje RAR-a zignorujケ blok i usunケ go
           podczas aktualizacji archiwum.
           je徑i zgaszony, blok jest kopiowany do nowego archiwum podczas
           jego aktualizacji;

  0x8000 - je徑i ustawiony, pole ADD_SIZE jest obecne i caウkowitym rozmiarem
           bloku jest HEAD_SIZE+ADD_SIZE.

  Typy blok:

HEAD_TYPE=0x72          blok identyfikacyjny
HEAD_TYPE=0x73          nagウek archiwum
HEAD_TYPE=0x74          nagウek pliku
HEAD_TYPE=0x75          nagウek komentarza starego typu
HEAD_TYPE=0x76          informacja autentyczno彡i starego typu
HEAD_TYPE=0x77          pod-blok starego typu
HEAD_TYPE=0x78          dane naprawcze starego typu
HEAD_TYPE=0x79          informacja autentyczno彡i starego typu
HEAD_TYPE=0x7a          pod-blok

   Blok komentarza jest uソywany tylko w innych blokach i nie wyst麪uje
samodzielnie.

   Przetwarzanie archiwum:

1. Odczytaj i sprawd・blok identyfikacyjny
2. Odczytaj nagウek archiwum
3. Odczytaj lub pomi・HEAD_SIZE-sizeof(MAIN_HEAD) bajt
4. Je徑i napotkaウe・koniec archiwum to zakoz przetwarzanie archiwum,
   w przeciwnym wypadku odczytaj 7 bajt do p HEAD_CRC, HEAD_TYPE,
   HEAD_FLAGS, HEAD_SIZE.
5. Sprawd・HEAD_TYPE.
   je徑i HEAD_TYPE==0x74
     odczytaj nagウek pliku (pierwsze 7 bajt juソ zostaウo odczytane)
     odczytaj lub pomi・HEAD_SIZE-sizeof(FILE_HEAD) bajt
     je徑i (HEAD_FLAGS & 0x100)
       odczytaj lub pomi・HIGH_PACK_SIZE*0x100000000+PACK_SIZE bajt
     w przeciwnym wypadku
       odczytaj lub pomi・FILE_SIZE bajt
   w przeciwnym wypadku
     odczytaj odpowiedni blok:
       odczytaj HEAD_SIZE-7 bajt
       je徑i (HEAD_FLAGS & 0x8000)
         odczytaj ADD_SIZE bajt
6. id・do punktu 4.


  ============================================================================
                                Formaty blok
  ============================================================================

   Blok identyfikacyjny (MARK_HEAD)


HEAD_CRC        zawsze 0x6152
2 bajty

HEAD_TYPE       typ nagウka: 0x72
1 bajt

HEAD_FLAGS      zawsze 0x1a21
2 bajty

HEAD_SIZE       rozmiar bloku = 0x0007
2 bajty

   Blok identyfikacyjny jest wウa彡iwie staウケ sekwencjケ bajt:
0x52 0x61 0x72 0x21 0x1a 0x07 0x00



   Nagウek archiwum (MAIN_HEAD)


HEAD_CRC        CRC p od HEAD_TYPE do RESERVED2
2 bytes

HEAD_TYPE       typ nagウka: 0x73
1 bajt

HEAD_FLAGS      znaczniki bitowe:
2 bajty
                0x0001  - wolumin (archiwum jest woluminem)
                0x0002  - archiwum posiada komentarz
                          RAR 3.x uソywa osobnego bloku komentarza
                          i nie ustawia tego znacznika.

                0x0004  - archiwum jest zablokowane
                0x0008  - archiwum jest ciケgウe
                0x0010  - nowy spos nazywania wolumin ('nazwa.partN.rar')
                0x0020  - archiwum posiada informacj・autentyczno彡i
                          RAR 3.x nie ustawia tego znacznika.

                0x0040  - archiwum posiada dane naprawcze
                0x0080  - nagウki blok sケ zaszyfrowane
                0x0100  - pierwszy wolumin (tylko dla RAR 3.0 i nowszych)

                pozostaウe bity w HEAD_FLAGS sケ zarezerwowane do uソytku
                wewn黎rznego

HEAD_SIZE       caウkowity rozmiar nagウka archiwum ウケcznie z komentarzem
2 bajty

RESERVED1       zarezerwowane
2 bajty

RESERVED2       zarezerwowane
4 bajty




   Nagウek pliku (plik w archiwum)


HEAD_CRC        CRC p od HEAD_TYPE do FILEATTR
2 bajty         i nazwy pliku

HEAD_TYPE       typ nagウka: 0x74
1 bajt

HEAD_FLAGS      znaczniki bitowe:
2 bajty
                0x01 - plik kontynuowany z poprzedniego woluminu
                0x02 - plik kontynuowany w nast麪nym woluminie
                0x04 - plik zaszyfrowany hasウem
                0x08 - plik posiada komentarz
                       RAR 3.x uソywa osobnego bloku komentarza
                       i nie ustawia tego znacznika.

                0x10 - uソyta jest informacja z poprzedniego pliku
                       (znacznik ciケgウo彡i)
                       (dla RAR-a od wersji 2.0 wzwyソ)

                bity 7 6 5 (dla RAR-a od wersji 2.0 wzwyソ)

                     0 0 0    - rozmiar sウownika   64 KB
                     0 0 1    - rozmiar sウownika  128 KB
                     0 1 0    - rozmiar sウownika  256 KB
                     0 1 1    - rozmiar sウownika  512 KB
                     1 0 0    - rozmiar sウownika 1024 KB
                     1 0 1    - rozmiar sウownika 2048 KB
                     1 1 0    - rozmiar sウownika 4096 KB
                     1 1 1    - plik jest katalogiem

               0x100 - obecne sケ pola HIGH_PACK_SIZE i HIGH_UNP_SIZE, kte
                       uソywane sケ tylko przy archiwizacji bardzo duソych
                       plik (ponad 2 GB); w przypadku mniejszych plik
                       pola te nie sケ umieszczane w archiwum.

               0x200 - FILE_NAME zawiera zarno zwykウケ nazw・pliku jak
                       rnieソ nazw・w standardzie UNICODE, oddzielone
                       bajtem 0 (zero). W tym wypadku pole NAME_SIZE
                       jest rne dウugo懈i zwykウej nazwy plus dウugo懈
                       nazwy w formacie UNICODE plus 1.

               0x400 - nagウek zawiera dodatkowe 8 bajt umieszczone
                       za nazwケ pliku, kte sケ wymagane do wzmocnienia
                       bezpieczetwa szyfrowania

               0x800 - Znacznik wersji. Je徑i plik jest starszケ wersjケ,
                       jej numer jest doウケczany do nazwy jako ';n'.

              0x1000 - obecne jest rozszerzone pole zawierajケce czas

              0x8000 - ten bit jest zawsze ustawiony, dlatego caウkowity
                       rozmiar bloku jest rny HEAD_SIZE + PACK_SIZE
                       (plus HIGH_PACK_SIZE, je徑i bit 0x100 jest ustawiony)

HEAD_SIZE       peウny rozmiar nagウka pliku wraz z nazwケ pliku i komentarzem
2 bajty

PACK_SIZE       rozmiar pliku po kompresji
4 bajty

UNP_SIZE        oryginalny rozmiar pliku
4 bajty

HOST_OS         system operacyjny, w ktym nastケpiウa archiwizacja
1 bajt                 0 - MS DOS
                       1 - OS/2
                       2 - Win32
                       3 - Unix
                       4 - Mac OS
                       5 - BeOS

FILE_CRC        CRC pliku
4 bajty

FTIME           data i czas w standardowym formacie MS DOS
4 bajty

UNP_VER         wersja RAR-a potrzebna do wypakowania pliku
1 bajt
                Wersja jest kodowana w nast麪ujケcy spos:
                10 * Gウna wersja + wersja poboczna.

METHOD          metoda kompresji
1 bajt
                0x30 - brak kompresji
                0x31 - najszybsza kompresja
                0x32 - szybka kompresja
                0x33 - normalna kompresja
                0x34 - dobra kompresja
                0x35 - najlepsza kompresja

NAME_SIZE       rozmiar nazwy pliku
2 bajty

ATTR            atrybuty pliku
4 bajty

HIGH_PACK_SIZE  4 starsze bajty 64-bitowej liczby okre徑ajケcej rozmiar pliku
4 bajty         po kompresji. Warto懈 opcjonalna, obecna tylko je徑i
                HEAD_FLAGS ma ustawiony bit 0x100

HIGH_UNP_SIZE   4 starsze bajty 64-bitowej liczby okre徑ajケcej oryginalny
4 bajty         (przed kompresjケ) rozmiar pliku. Warto懈 opcjonalna, obecna
                tylko je徑i HEAD_FLAGS ma ustawiony bit 0x100

FILE_NAME       nazwa pliku - ciケg znak o dウugo彡i NAME_SIZE bajt

SALT            obecne je徑i (HEAD_FLAGS & 0x400) != 0
8 bajt

EXT_TIME        obecne je徑i (HEAD_FLAGS & 0x1000) != 0
rna wielko懈


tu mogケ si・pojawi・inne nowe pola


  ============================================================================
                                      Uwagi
  ============================================================================

   1. Aby przetwarza・archiwum SFX naleソy pominケ・szukanie bloku
      identyfikacyjnego w module SFX. Moduウ SFX nie zawiera tego bloku
      (0x52 0x61 0x72 0x21 0x1a 0x07 0x00).

   2. CRC liczy si・przy uソyciu standardowego wielomianu 0xEDB88320. Je徑i
      rozmiar CRC jest mniejszy niソ 4 bajty, uソyte sケ tylko mウodsze bajty.
Zgłoś jeśli naruszono regulamin