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.
krzysiell