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 rnej dウugo彡i. Kolejno懈 tych blok moソe by・rna, lecz pierwszym blokiem musi by・blok identyfikacyjny, po ktym 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 zakoz 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, kte 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 zarno zwykウケ nazw・pliku jak rnieソ nazw・w standardzie UNICODE, oddzielone bajtem 0 (zero). W tym wypadku pole NAME_SIZE jest rne 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, kte sケ wymagane do wzmocnienia bezpieczetwa 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 rny 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 ktym 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 rna 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.
JolanPOL