TechNote.txt

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


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


  ============================================================================
                               Format archiwum RAR
  ============================================================================

   Archiwum sk�ada si� z blok�w o r�nej d�ugo�ci. Kolejno�� tych blok�w mo�e
by� r�na, lecz pierwszym blokiem musi by� blok identyfikacyjny, po kt�rym
musi wyst�pi� blok nag��wka archiwum.

   Ka�dy blok rozpoczyna si� nast�puj�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�li (HEAD_FLAGS & 0x8000) != 0

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

   W ka�dym bloku nast�puj�ce bity w polu HEAD_FLAGS oznaczaj�:

  0x4000 - je�li ustawiony, starsze wersje RARa zignoruj� blok i usun� go
           podczas aktualizacji archiwum.
           je�li zgaszony, blok jest kopiowany do nowego archiwum podczas
           jego aktualizacji;

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

  Typy blok�w:

HEAD_TYPE=0x72          blok identyfikacyjny
HEAD_TYPE=0x73          nag��wek archiwum
HEAD_TYPE=0x74          nag��wek pliku
HEAD_TYPE=0x75          nag��wek komentarza starego typu
HEAD_TYPE=0x76          informacja autentyczno�ci starego typu
HEAD_TYPE=0x77          pod-blok starego typu
HEAD_TYPE=0x78          dane naprawcze starego typu
HEAD_TYPE=0x79          informacja autentyczno�ci starego typu
HEAD_TYPE=0x7a          pod-blok

   Blok komentarza jest u�ywany tylko w innych blokach i nie wyst�puje
samodzielnie.

   Przetwarzanie archiwum:

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


  ============================================================================
                                Formaty blok�w
  ============================================================================

   Blok identyfikacyjny (MARK_HEAD)


HEAD_CRC        zawsze 0x6152
2 bajty

HEAD_TYPE       typ nag��wka: 0x72
1 bajt

HEAD_FLAGS      zawsze 0x1a21
2 bajty

HEAD_SIZE       rozmiar bloku = 0x0007
2 bajty

   Blok identyfikacyjny jest w�a�ciwie sta�� sekwencj� bajt�w:
0x52 0x61 0x72 0x21 0x1a 0x07 0x00



   Nag��wek archiwum (MAIN_HEAD)


HEAD_CRC        CRC p�l od HEAD_TYPE do RESERVED2
2 bytes

HEAD_TYPE       typ nag��wka: 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�b nazywania wolumin�w ('nazwa.partN.rar')
                0x0020  - archiwum posiada informacj� autentyczno�ci
                          RAR 3.x nie ustawia tego znacznika.

                0x0040  - archiwum posiada dane naprawcze
                0x0080  - nag��wki blok�w s� zaszyfrowane
                0x0100  - pierwszy wolumin (tylko dla RAR 3.0 i nowszych)

                pozosta�e bity w HEAD_FLAGS s� zarezerwowane do u�ytku
                wewn�trznego

HEAD_SIZE       ca�kowity rozmiar nag��wka archiwum ��cznie z komentarzem
2 bajty

RESERVED1       zarezerwowane
2 bajty

RESERVED2       zarezerwowane
4 bajty




   Nag��wek pliku (plik w archiwum)


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

HEAD_TYPE       typ nag��wka: 0x74
1 bajt

HEAD_FLAGS      znaczniki bitowe:
2 bajty
                0x01 - plik kontynuowany z poprzedniego woluminu
                0x02 - plik kontynuowany w nast�pnym 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�ci)
                       (dla RARa od wersji 2.0 wzwy�)

                bity 7 6 5 (dla RARa 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�re
                       u�ywane s� tylko przy archiwizacji bardzo du�ych
                       plik�w (ponad 2 GB); w przypadku mniejszych plik�w
                       pola te nie s� umieszczane w archiwum.

               0x200 - FILE_NAME zawiera zar�wno zwyk�� nazw� pliku jak
                       r�wnie� nazw� w standardzie UNICODE, oddzielone
                       bajtem 0 (zero). W tym wypadku pole NAME_SIZE
                       jest r�wne d�ugo��i zwyk�ej nazwy plus d�ugo��
                       nazwy w formacie UNICODE plus 1.

                       Je�li ten znacznik jest obecny a FILE_NAME nie zawiera
                       bajt�w o warto�ci 0 (zero) oznacza to, �e nazwa pliku
                       jest w formacie UTF-8.

               0x400 - nag��wek zawiera dodatkowe 8 bajt�w umieszczone
                       za nazw� pliku, kt�re s� wymagane do wzmocnienia
                       bezpiecze�stwa szyfrowania

               0x800 - Znacznik wersji. Je�li 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�wny HEAD_SIZE + PACK_SIZE
                       (plus HIGH_PACK_SIZE, je�li bit 0x100 jest ustawiony)

HEAD_SIZE       pe�ny rozmiar nag��wka 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�rym 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 RARa potrzebna do wypakowania pliku
1 bajt
                Wersja jest kodowana w nast�puj�cy spos�b:
                10 * G��wna 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�laj�cej rozmiar pliku
4 bajty         po kompresji. Warto�� opcjonalna, obecna tylko je�li
                HEAD_FLAGS ma ustawiony bit 0x100

HIGH_UNP_SIZE   4 starsze bajty 64-bitowej liczby okre�laj�cej oryginalny
4 bajty         (przed kompresj�) rozmiar pliku. Warto�� opcjonalna, obecna
                tylko je�li HEAD_FLAGS ma ustawiony bit 0x100

FILE_NAME       nazwa pliku - ci�g znak�w o d�ugo�ci NAME_SIZE bajt�w

SALT            obecne je�li (HEAD_FLAGS & 0x400) != 0
8 bajt�w

EXT_TIME        obecne je�li (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�li
      rozmiar CRC jest mniejszy ni� 4 bajty, u�yte s� tylko 2 m�odsze bajty.
Zgłoś jeśli naruszono regulamin