Quake Shareware: een CD-ROM die net iets te vol was

In het midden van de jaren 90 was het coolste dat je voor een pc kon kopen, naast de ongelooflijk dure Intel Pentium, een CD-ROM-station. Met een capaciteit van 640 MiB (drie keer de opslagcapaciteit van de toenmalige pc-hardeschijven) stelden cd's liefhebbers in staat om een wereld van multimedia te betreden. Deze bestond uit foto's met een hoge resolutie van 640x480 met een 256-kleurenpalet[1], VOC-soundtracks en Video For Windows-video's van 240x179 met een vloeiende 12 fps[2][3] die enkele seconden duurden.

Voor game-ontwikkelaars was de CD-ROM een vreemd beest. De capaciteit overtrof de hoeveelheid assets die ze konden produceren ruimschoots. Een paar titels, zoals 7th Guest (1993) of Phantasmagoria (1995), introduceerden Full Motion Video (in een wereld waarin slechts een deel van het scherm kon worden geanimeerd). Sommigen voegden muziek van hoge kwaliteit toe. De meest memorabele visie op deze kwestie kwam van de lead developer van id Software, John Carmack:

"Mensen verwachten dat CD-games tonnen aan gedigitaliseerde spraak en video bevatten [...] De grap is dat als we ooit een CD-versie van DOOM maken, je het spel krijgt en 'The Making of DOOM', een documentaire van een uur."
— John Carmack (januari '94) voor “ATARI EXPLORER ONLINE”

Een goed idee op papier, maar slecht op CD

Tegen juni 1996 had id Software na drie jaar hard werken hun volgende titel voltooid: Quake. Net als bij hun vorige titel wilden ze zowel een shareware-versie als een volledige versie van hun spel uitbrengen. Omdat het spel slechts 22 MiB aan opslag in beslag nam, kregen de mensen bij id Software het idee om de resterende capaciteit van een CD-ROM te benutten. Waarom niet versleutelde versies van de volledige id-catalogus aan games toevoegen? Dit zou niet alleen de tussenpersonen uitschakelen, maar gamers ook direct toegang geven via een simpel telefoontje en een creditcard.

Het concept werd geïmplementeerd. De cd werd aangekondigd[4] op 3 juli 1996 en uitgebracht op 30 augustus[5]. De hackergroep GNOMON bracht slechts 39 dagen later Quakecrk.zip uit[6]. Het archief bevatte QCRACK.EXE, een tool waarmee elk spel op de CD-ROM kon worden ontsleuteld.

Het retail-experiment met de Quake shareware bleek rampzalig:

"In theorie wilde id de retailers uitschakelen door gamers de shareware te laten kopen, waarna ze een 800-nummer konden bellen om een bestelling te plaatsen en een wachtwoord te ontvangen waarmee de rest van het spel werd ontgrendeld. Maar gamers verloren geen tijd om de shareware te hacken om de volledige versie van het spel gratis te ontgrendelen. Erger nog, alle alledaagse aspecten van distributie en orderverwerking liepen volledig uit de hand. In een wanhopige poging probeerde id de retail shareware te stoppen, maar het was te laat. Ze zaten opgescheept met bijna 150.000 cd's in een magazijn."
— David Kushner (Masters of Doom)

De Quake retail shareware CD verkrijgen

Dankzij usenet-archieven van rec.games.computer.quake.misc hebben we gedetailleerde discussies[7] over hoe het werkte. Een gamer kon naar een van de honderden CompUSA/Computer City-winkels gaan en de cd kopen voor $9,95.

De verpakking was eigenlijk van behoorlijke kwaliteit voor een shareware-product. Op mijn exemplaar verduidelijkt een sticker op de voorkant dat dit de "Shareware version" is, met instructies om naar 1-800-669-9342 (of 1-800-ID-GAMES) te bellen om het volledige spel te ontgrendelen.

Het telefoonnummer is vandaag de dag nog steeds actief. Je bereikt echter niet het ontgrendelingscentrum, aangezien CompUSA failliet is gegaan; de superstore-keten sloot tussen 2007 en 2008. In plaats van een operator krijgen we een automatisch bericht om ons producten voor ouderen te verkopen.

Bij contact met de operator moesten gebruikers ook een "SOURCE CODE" doorgeven. Dit speelde geen rol bij het genereren van de ontgrendelcode. Het was waarschijnlijk een manier voor distributeurs om een transactievergoeding te claimen. Op eBay vond ik er veel met namen die duiden op voormalige of huidige retailers:

  • 12-BSTBY: BestBuy
  • 24-CCITY: Computer City
  • 22-CUSA: CompUSA
  • 88
  • 11-1111
  • 38-EB: Electronic Boutique
  • 44-FTRSP: Fry's Electronics
  • 34-EGGH: Egghead Software
  • 56-MCTR: Media Play/Musicland

Hoe het bedoeld was om te werken

Het eerste contact was strak en de GUI was goed uitgevoerd. Gebruikers konden direct Quake Shareware starten, maar ze konden ook klikken op QUAKE UNLOCK.

De CD-ROM bevat ook een sectie "ID STUFF", waarmee men door de catalogus van id-games kon bladeren en elke willekeurige game kon ontgrendelen. Er zijn verschillende versies van DOOM aanwezig, samen met HEXEN en HERETIC.

Zodra het ontgrendelingsproces werd gestart, genereerde de GUI een CODE NUMBER (wat ik de CHALLENGE noem) die aan een serviceagent via de telefoon moest worden doorgegeven. Na betaling van de kosten ontving men een UNLOCK CODE NUMBER (wat ik de SERIAL noem). Checksums op beide nummers verminderden problemen die inherent waren aan deze primitieve communicatie via vaste lijnen.

Om replay attacks te voorkomen, verandert de CHALLENGE elke keer dat het programma wordt uitgevoerd en roteert deze elke 5 minuten terwijl de GUI actief is.

Het scherm had zelfs de kenmerkende provocerende toon van de vroege dagen van id Software ("voor hen die te gierig zijn"). Er stond ook een waarschuwing dat gebruikers een back-up van het spel moesten maken zodra het was ontgrendeld. Omdat de CHALLENGE een element van willekeur bevatte, was er geen manier om een SERIAL te hergebruiken.

Op het eerste gezicht leek het proces solide. Gebruikers moesten een ontgrendelingsservice bellen om een wachtwoord te verkrijgen, en alleen met dat wachtwoord kon de uiteindelijke ontgrendeling worden voltooid. Dus wat ging er mis?

TestDrive: onder de motorkap

De tool die het slot/ontgrendelen aanstuurde, werd geleverd door TestDrive Corp (gearchiveerd via www.testdrive.com). Het idee was om spelers een manier te geven om een programma "eerst te proberen voordat je het koopt" en hen in staat te stellen onmiddellijk de volledige versie van een programma aan te schaffen.

Hun encryptor was in staat om een .EXE-uitvoerbaar bestand te "denatureren". Het verving de eerste 32 KiB door een aangepaste header (het proberen uit te voeren van een gedenatureerd uitvoerbaar bestand toonde de melding "This application has been disabled"), hernoemde het bestand naar .MJ3, versleutelde de oorspronkelijke header als een .ST3 en gaf een seed uit.

De structuur was als volgt:

  • Normale EXE → Gedenatureerde MJ3 → Chunk ST3 → Secret seed

Als we in de Quake shareware CD kijken met een door mij gegenereerde filemap, zien we in de boomstructuur één MJ3-bestand voor elk beschikbaar spel. We zien ook alle ST3-bestanden in het PAGEMKR-archief. Alles is aanwezig om een MJ3 weer om te zetten naar een EXE-game-installer, behalve de geheime seed, die ongetwijfeld is afgeleid van de SERIAL.

Zo beschreven is er geen fout in dit proces. De geheime seed komt van de ontgrendelingsserver en is gekoppeld aan een CHALLENGE/SERIAL die niet hergebruikt kon worden. Maar het hackerteam GNOMON vond een manier.

Hoe QCRACK.EXE werkt

QCRACK.EXE, uitgebracht op 8 oktober 1996 (gnomon.nfo), slechts 39 dagen nadat de Quake retail shareware CD in de winkels lag, was een tool die automatisch een SERIAL kon genereren op basis van de CHALLENGE.

Wat de leden van de GNOMON-groep ontdekten, was dat de SERIAL die via de telefoon werd ontvangen, helemaal geen geheim bevatte. Het was slechts een bewijs van betaling.

Het Quake-ontgrendelingsprogramma FLOW.EXE dat op de cd staat, is in staat om de SERIAL uit de CHALLENGE zelf te genereren. Het enige wat het doet, is controleren of zijn eigen lokaal gegenereerde SERIAL overeenkomt met de SERIAL die door de gebruiker is ingevoerd. Het gehele beschermingsmechanisme rustte op security by obscurity.

De pijplijn van CHALLENGE naar SERIAL is ingewikkeld, maar werd in 2016 door rmolina[8] gereverseerd:

  1. De 11-cijferige CHALLENGE wordt gesplitst in een 4-cijferig GAME-ID en een 7-cijferig nummer dat resulteert in een OFFSET en een DEPTH.
  2. De GAME-ID indexeert een versleutelde database SKU.17, die een codenaam geeft (bijv.: doom2).
  3. De CODENAME maakt het mogelijk om een 512-byte DOC-bestand (bijv.: DOOM2.DOC) in het FLOWLIB.LIB-archief op te halen.
  4. In combinatie met de CODENAME en de string "Testdrive Corp.", transformeert de DOC een hard-coded tabel van 508 bytes in een tabel van 254 16-bit waarden die uniek zijn voor de titel.
  5. DEPTH en OFFSET lopen deze tabel achteruit af en XOR-en DEPTH om een enkele 16-bit waarde MEM te genereren.
  6. De SERIAL is vervolgens:

unlock = ((reverse7(GAME_ID) + MEM + 0x18) & 0x7F) + 0x83 * ((MEM ^ 0x1EA3) + 0x1700A1) Dit wordt geprint met een voorvoegsel 'B'.

De vele andere gebreken

Hoe meer ik dit onderwerp onderzocht, hoe meer het leek alsof degene die verantwoordelijk was, geen tijd had om het resultaat te perfectioneren.

"Schrijf niets toe aan kwaadaardigheid wat je kunt toeschrijven aan domheid. En schrijf niets toe aan domheid wat je kunt toeschrijven aan tijdsdruk."
— Fab's Razor

Het induiken in de Quake shareware CD onthult nog veel meer problemen.

Sommige delen van het ontgrendelingssysteem lijken nooit getest te zijn. Final DOOM kan niet worden ontgrendeld via het ontgrendelingscentrum vanwege een bug. De GAME-ID voor "Final Doom" is 12. Er staat een typfout in SKU.17 waardoor GAME-ID 12 correspondeert met de CODENAME "Final" (met een hoofdletter F). Dit zorgt ervoor dat de SERIAL-generatie het verkeerde DOC ophaalt. De correcte waarde had "final" moeten zijn. Dit creëerde de al te bekende situatie waarin illegale gebruikers een betere ervaring hadden dan betalende klanten.

De stapsgewijze samenvatting vermeldt een versleuteld SKU.17-bestand. Er is echter een versie in platte tekst, volledig onversleuteld, van exact hetzelfde bestand genaamd SKU.TXT in het FLOWDIR-archief. Er zijn veel meer .TXT-bestanden die overeenkomen met hun .17-versleutelde versies (PRODUCT.TXT, EXE.TXT).

Verschillende bestanden zijn tijdelijke bestanden (DM.TMP), artefacten van een editor (FLOWWORK.BAK), of worden helemaal niet gebruikt (ENCRYPT.EXE).

Het bibliotheekformaat is niet versleuteld of gehusseld. Het uitzoeken van het .DIR-formaat bood weinig weerstand en gaf gemakkelijke toegang tot alle DOC-bestanden die nodig zijn om SERIALs te genereren.

***

Referenties

[1] MediaPack 10-CD Roms [2] MediaPack Tropical Rainforest [3] MediaPack Wild Places [4] 'Quake' Is Here [5] When will it be available in stores (rec.games.computer.quake.misc) [6] gnomon.nfo [7] Question about Quake Shareware CD (rec.games.computer.quake.misc) [8] Quake, TestDrive y Qcrack