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.

Binary Lab v NorthPane otevřený nad GOG instalátorem: vlevo navigátor se sekcemi PE, uprostřed hex dump, vpravo inspektor hodnot
F3 na instalátoru. NorthPane přečetl PE strukturu a zobrazil pás entropie vedle hex dumpu.

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.

Okno hlavičky (⌘I): COFF a optional hlavička PE a tabulka sekcí, jejíž poslední dva řádky jsou overlay a certificate
⌘I. Devět PE sekcí a pod nimi overlay začínající na 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í.

Hex dump s kurzorem na bajtech 7A 6C 62 1A na offsetu 0x2F000 a vedle něj inspektor s hodnotou Inno Setup zlb
Kurzor na začátku prvního bloku. Inspektor poznal Inno Setup ještě před jeho rozbalením.

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.

Finder → 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:

  1. přečte PE overlay,
  2. rozpozná Inno Setup,
  3. načte jeho metadata,
  4. projde tabulku souborů,
  5. 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ávesaco udělá
F3otevře soubor v hexu; známou binárku rovnou v Binary Labu
⌘Izobrazí hlavičku, sekce a overlay
⌘0 / ⌘Bnavigátor / inspektor
F7hledání bajtů, například 7A 6C 62 1A; ↩ další, ⇧↩ předchozí
⌘Erozbalí datový proud pod kurzorem a pokračuje přes další vrstvy
Enter na .tar / .tgzotevře archiv jako složku
Enter na .exeotevře podporovaný Inno Setup instalátor jako složku
⌥F9rozbalí 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.