Koupil jsem si na GOGu hru, která má jen Windows instalátor. Data hry jsou ale uvnitř a já je potřebuji dostat ven na Macu, třeba pro DOSBox nebo jiný emulátor.
Ručně se k nim dá dostat během několika kroků. A ano, NorthPane na to má i zkratku na jedinou klávesu. K té se ale dostaneme až na konci.
Jako příklad použiji setup_x-com_ufo_defense_1.14_gog_cfgfix_(77865).exe, 19MB instalátor otevřený v NorthPane 1.2. U jiných GOG instalátorů budou offsety jiné, princip ale zůstává stejný.
1. Otevřít instalátor v hexu
Najeďte na .exe a stiskněte F3.
NorthPane rozpozná PE soubor a otevře Binary Lab: vlevo navigátor, uprostřed hex dump s pásem entropie a vpravo inspektor.
Chybějící panely lze zobrazit pomocí ⌘0 a ⌘B.
2. Najít overlay
Stiskněte ⌘I.
V tabulce sekcí je řádek overlay. Není to skutečná PE sekce, ale oblast dat připojená za část souboru popsanou PE hlavičkou.
V tomto instalátoru začíná overlay na:
0x2F000
a pokračuje prakticky až na konec souboru. Tvoří zhruba 99 % celé jeho velikosti.
0x2F000.Stejnou věc naznačuje i pás entropie.
Nahoře je krátká členitá oblast s běžným kódem. Pod ní dlouhý téměř souvislý červený blok — vysoká entropie typická pro komprimovaná data.
Ještě před dalším krokem otevřete v navigátoru kartu Strings a vyhledejte Inno.
V tomto případě najdeme:
Inno Setup Setup Data (5.6.2) (u)
Tím máme potvrzené, že jde o instalátor vytvořený pomocí Inno Setupu, a zároveň známe jeho verzi.
3. Najít komprimovaný blok
Inno Setup označuje datové bloky signaturou:
7A 6C 62 1A
tedy ASCII zlb následované bajtem 1A.
Nejjednodušší je v navigátoru kliknout na overlay. Kurzor skočí na 0x2F000 a inspektor ve skupině Komprimované zobrazí:
Inno Setup zlb
Stejného výsledku lze dosáhnout přes F7 a hledání:
7A 6C 62 1A
V tomto konkrétním souboru je 852 výskytů. Zajímá nás ten první.
Tohle je přesně informace, kterou chcete vidět předtím, než začnete data rozbalovat.
4. Rozbalit blok
Stiskněte ⌘E.
NorthPane začne od dat pod kurzorem a automaticky pokračuje přes další vrstvy:
Inno Setup zlb → zlib → gzip → tar
Celkem čtyři vrstvy.
Poslední vrstvou je tar, takže NorthPane zobrazí jeho obsah a nabídne rozbalení do složky.
V tomto případě:
321 souborů, 5,9 MB
Výsledkem je adresář:
dosbox-0.74-2.1
tedy zdrojový strom DOSBoxu, který GOG ke svým DOSovým hrám přibaluje.
Při rozbalování NorthPane zároveň hlídá několik základních bezpečnostních problémů:
- položky mířící mimo cílovou složku (
../, absolutní cesty) přeskočí, - symbolické odkazy pouze vypíše a nevytváří je.
A teď zkratka: Enter
Předchozí postup je užitečný hlavně tehdy, když chcete vidět, jak je instalátor skutečně poskládaný.
Pokud ale potřebujete jen samotnou hru, jde to mnohem rychleji.
Vraťte se na .exe instalátor a stiskněte Enter.
Stejně jako u ZIP nebo TAR archivu.
NorthPane přečte Inno Setup strukturu a otevře instalátor přímo jako složku.
V našem případě se okamžitě objeví například:
MAPS/
ROUTES/
TERRAIN/
UFOGRAPH/
SOUND/
UFO Defense.exe
a příslušné .BAT soubory.
Není potřeba instalátor spouštět a v tuto chvíli se stále nic nerozbalilo na disk.
setup_xcom.exe → NorthPane → Enter → MAPS / SOUND / UFOGRAPH → F5.Pomocí F5 můžete označené soubory zkopírovat do druhého panelu.
Pomocí ⌥F9 rozbalíte celý instalátor do složky v druhém panelu.
Tady jde o 932 souborů a přibližně 20 MB dat. Rozbalení trvá méně než sekundu a každý soubor se ověřuje proti SHA-1 uloženému přímo v instalátoru.
Co se děje uvnitř
Enter samozřejmě není žádná magie.
NorthPane:
- přečte PE overlay,
- rozpozná Inno Setup,
- načte jeho metadata,
- projde tabulku souborů,
- rekonstruuje skutečný adresářový strom.
Poslední krok je důležitější, než se může zdát.
GOG totiž skutečné cesty k souborům ukládá do instalačního skriptu.
Například 925 z 933 záznamů v tomto instalátoru míří na cesty podobné:
{tmp}/9c/3f\<md5>
Skutečná cesta je až ve volání instalačního skriptu:
before_install('…', 'MAPS\XBASE_00.RMP', 1)
Pokud byste četli pouze tabulku souborů, dostali byste adresář plný souborů pojmenovaných pomocí hashů.
NorthPane proto čte i instalační skript a podle něj rekonstruuje původní cesty.
Pokud se odpovídající záznam nepodaří rozpoznat, soubor zůstane pod tmp/.
Kdy to nefunguje
NorthPane tento způsob otevření odmítne, pokud:
- je instalátor chráněný heslem,
- používá kompresi bzip2,
- používá nepodporovanou verzi Inno Setupu mimo rozsah 5.2.5–6.2.
Klávesy
| klávesa | co udělá |
|---|---|
F3 | otevře soubor v hexu; známou binárku rovnou v Binary Labu |
⌘I | zobrazí hlavičku, sekce a overlay |
⌘0 / ⌘B | navigátor / inspektor |
F7 | hledání bajtů, například 7A 6C 62 1A; ↩ další, ⇧↩ předchozí |
⌘E | rozbalí datový proud pod kurzorem a pokračuje přes další vrstvy |
Enter na .tar / .tgz | otevře archiv jako složku |
Enter na .exe | otevře podporovaný Inno Setup instalátor jako složku |
⌥F9 | rozbalí archiv nebo instalátor do složky v druhém panelu |
Windows instalátor jsme právě rozebrali na Macu, aniž bychom ho jedinkrát spustili.