Quake 共享版,一张稍微塞得太满的 CD-ROM
Quake Shareware, a CD-ROM just a little too full

原始链接: https://fabiensanglard.net/quake_shareware_cd/index.html

1996年,id Software进行了一项雄心勃勃的零售实验:以9.95美元的价格发售一张“雷神之锤共享版”(Quake Shareware)光盘。该光盘不仅包含《雷神之锤》,还收录了其过往所有游戏的加密版本。公司希望绕过传统的零售分销渠道,让客户通过拨打800免费电话购买“解锁码”来获取完整游戏。 这项计划惨遭失败。仅仅39天后,黑客组织GNOMON发布了一款名为“QCRACK”的工具,无需拨打客服电话即可生成有效的解锁码。该保护系统的核心存在缺陷,它依赖的是“隐蔽式安全性”而非真正的加密技术。解锁软件本质上具备自我生成密钥的能力,且开发人员无意中包含了未加密的文件,从而简化了逆向工程的过程。 更糟糕的是,软件中的漏洞——例如一个导致《终极毁灭战士》(Final Doom)无法正常解锁的拼写错误——使得付费用户的体验往往比使用破解版的用户还要差。这场灾难过后,id Software的仓库里剩下了15万张滞销光盘,为他们重塑软件分销模式的尝试画上了一个臭名昭著的句号。

Hacker News新帖 | 过往 | 评论 | 提问 | 展示 | 招聘 | 提交登录Quake共享软件,一张稍微有点装满的CD-ROM (fabiensanglard.net)28点 由 shdon 54分钟前 | 隐藏 | 过往 | 收藏 | 3条评论 帮助 jonhohle 4分钟前 | 下一条 [–] 为了NIN的原声带,Quake共享软件光盘还是很值得入手的。几年前黑胶唱片发行后,官方曲目名称现已公布。这是该原声带唯一的CD版本。别忘了跳过第1轨。回复ranger_danger 11分钟前 | 上一条 [–] 把这些算法称为“隐蔽式安全”(security through obscurity)真的公平吗?按照这种逻辑,真正的对称加密难道不也应该被视为同类吗?毕竟它也只是基于“隐蔽”的密码或密钥,通过数学方式将数据与其他字节进行交换。回复_def 2分钟前 | 父评论 [–] 所谓的“隐蔽”是指假装解锁程序需要外部信息。回复 准则 | 常见问题 | 列表 | API | 安全 | 法律 | 申请YC | 联系 搜索:
相关文章

原文
Quake Shareware, a CD-ROM just a little too full

Aug 17, 2026

Quake Shareware, a CD-ROM just a little too full

In the mid-90s the coolest thing to buy for a PC, besides the incredibly expensive Intel Pentium, was a CD-ROM drive. With their capacity of 640 MiB (three times the storage of PC HDD at the time), CDs allowed enthusiasts to step into a world of multimedia, made of high-resolution 640x480 256 colors palette-indexed photos[1], VOC soundtracks, and play with Video For Windows butter-smooth 12 fps 240x179 videos[2][3] lasting up to several seconds.

For video game developers, the CD-ROM was an odd beast. The capacity far exceeded the quantity of assets they were able to produce. A few titles, like 7th Guest (1993) or Phantasmagoria (1995) introduced Full Motion Video (in a world where only part of the screen could be animated). Some added high quality music. My most memorable take on the matter was from id Software's lead developer, John Carmack.

People expect CD games to have tons of digitized speech and video [...] The joke here is that if we ever do a CD version of DOOM, you are going to get the game and “The Making of DOOM” a one hour feature film. John Carmack (Jan '94) for “ATARI EXPLORER ONLINE”
A good idea on paper but bad on CD

By June 1996, after three years of hard work, id Software had completed their next title, Quake. As for their previous title, they were going to release both a shareware version and a full version of their game. Since it used a mere 22 MiB of storage, people at id Software had the idea of leveraging the remaining capacity of a CD-ROM. Why not include encrypted versions of the full id catalogue of games? Not only this would cut out the middlemen, it would give instant access to gamers with a simple phone call and a credit card.

The concept was implemented. The CD was announced[4] on July 3, 1996 and released on August 30th[5]. The hacker group GNOMON released Quakecrk.zip only 39 days later[6]. The archive contained QCRACK.EXE, a tool allowing to decrypt every single game on the CD-ROM.

Quake’s shareware retail experiment had proved disastrous. In theory id was going to cut out retailers by allowing gamers to buy the shareware and then call an 800 number to place an order and receive a password that would unlock the rest of the game.

But gamers wasted no time hacking the shareware to unlock the full version of the game for free. Worse, all the mundane aspects of distribution and order fulfillment were spinning out of control. In a desperate measure, id tried to put the brakes on the retail shareware, but it was too late. They were stuck with almost 150,000 CDs sitting in a warehouse. David Kushner (Masters of Doom)

So what happened? Let's dive in!

Getting Quake retail shareware CD

Thanks to usenet archives of rec.games.computer.quake.misc, we have detailed discussions[7] of how it worked. A gamer could go to any of the hundreds of CompUSA/Computer City stores and buy the CD for $9.95.

Inside a CompUSA store (1996)

The packaging was actually pretty high quality for a shareware product. On my copy, a sticker on the front clarifies this is the "Shareware version" with instructions to call 1-800-669-9342 (or 1-800-ID-GAMES) to unlock the full game.

The phone number is still active today. However you don't reach the unlock center since CompUSA went out of business. The Superstore chain closed between 2007 and 2008. Instead of an unlock operator we get an automated message to sell us elderly stuff.

Upon contacting the operator, users were to also communicate a "SOURCE CODE". It played no part in generating the Unlock code. It may have been a way for the distributors to claim a transaction fee. Browsing eBay, I found many with names indicative of past/present 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, and 56-MCTR Media Play/ Musicland.

How it was intended to work

The first contact was sleek. The GUI was well done. Users could jump directly into Quake Shareware but they could also click on QUAKE UNLOCK.

The CD-ROM also features an ID STUFF section, allowing to browse the catalogue of id games and unlock any of them. Several versions of DOOM are there, along with HEXEN, and HERETIC.

Once the unlock process was started, the GUI generated a CODE NUMBER (which I call CHALLENGE) that was to be communicated to a Service Agent over the phone. Upon paying the fees, an UNLOCK CODE NUMBER (which I call SERIAL) would be received. Checksums on both numbers mitigated issues related to this primitive landline mode of communication.

To avoid replay attacks, the CHALLENGE changes every time the program is run and rotates every 5 min while the GUI is active.

The screen even had the signature provocative tone of the early days of id Software ("those who are too cheap"). Note that there was also a warning that users should back up the game once unlocked. Since the CHALLENGE included some randomness, there was no way to reuse a SERIAL.

At first sight, the process looked solid. Users had to call an unlock service to obtain a password. And only with that password could the final unlock be completed. So what went wrong?

TestDrive, under the hood

The tool powering the lock/unlock was provided by TestDrive Corp's (archived www.testdrive.com). The idea was to give players a way to "try-before-you-buy" and allow them to immediately purchase the full version of a program.

Their encrypter was capable of "denaturing" an .EXE executable. It replaced the first 32 KiB with a custom header (attempting to run a denatured executable displayed "This application has been disabled"), renamed the file to .MJ3, encrypted the original header as a .ST3, and issued a seed.

Let's peek inside the Quake shareware CD with a filemap I generated (Split View recommended). In that tree, we can see one MJ3 file for each game available. We can also see all the ST3 files inside the PAGEMKR archive. Everything is there to "renature" an MJ3 back into an EXE game installer, except for the secret "seed" that is assurely derived from the SERIAL.

Described as is, there is no flaw in this process. The secret seed comes from the unlock server, tied to a CHALLENGE/SERIAL that could not be reused. But the hacker team GNOMON found a way.

How QCRACK.EXE works

Released on 10/08/96 (gnomon.nfo), only 39 days after Quake retail shareware CD hit the stores, QCRACK.EXE was a tool able to generate a SERIAL automatically given the CHALLENGE.

What members of GNOMON group figured out was that the SERIAL received over the phone contained no secret at all. It was just a proof of payment.

The QUAKE unlock program FLOW.EXE that ships on the CD is capable of generating the SERIAL from the CHALLENGE on its own. All it does is check that its own locally-generated SERIAL and the SERIAL entered by the user match! The entire protection mechanism relies on security by obscurity.

The pipeline from CHALLENGE to SERIAL is convoluted but was reversed in 2016 by rmolina[8].

  1. The 11-digit CHALLENGE is split into a 4-digit GAME-ID, and a 7-digit number resulting in an OFFSET, and a DEPTH.
  2. The GAME-ID indexes an encrypted database SKU.17, which gives a codename (e.g.: doom2).
  3. The CODENAME allows to retrieve a 512-byte DOC file (e.g.: DOOM2.DOC) inside the FLOWLIB.LIB archive.
  4. Mixed with the CODENAME and the string "Testdrive Corp.", the DOC transforms a 508-byte hard-coded table into a table of 254 16-bit values unique to the title.
  5. DEPTH and OFFSET walk that table backwards, XOR-ing DEPTH to generate a single 16-bit value MEM.
  6. The SERIAL is then unlock = ((reverse7(GAME_ID) + MEM + 0x18) & 0x7F) + 0x83 * ((MEM ^ 0x1EA3) + 0x1700A1) printed with a leading B.
The many more flaws

The more I researched the matter, the more it looked like whoever was in charge had no time to polish the result.

Never attribute to malice what you can attribute to stupidity. And never attribute to stupidity what you can attribute to time pressure. Fab's Razor

Digging inside Quake shareware CD reveals many more issues.

  • Some parts of the unlock system look like they were never tested. Final DOOM cannot be unlocked by calling the unlock center because of a bug. The GAME-ID for "Final Doom" is 12. There is a typo in SKU.17 which makes GAME-ID 12 correspond to CODENAME "Final" (with a capital F). This makes the SERIAL generation retrieve the wrong DOC. The correct value was "final". This created an only-too-familiar situation where illegitimate users enjoyed a better experience than paying customers.
  • The step-by-step summary mentions an encrypted SKU.17 file. There is a plain-text version, completely unencrypted, of the very same file named SKU.TXT inside the FLOWDIR archive. There are many more TXT files matching their .17 encrypted versions (PRODUCT.TXT, EXE.TXT).
  • Several files are temporaries (DM.TMP), editor artifacts (FLOWWORK.BAK), or not used at all (ENCRYPT.EXE).
  • The library format is not encrypted or scrambled. Figuring out the .DIR format offered low resistance and easy access to all DOC files necessary to generate SERIALs.

References



*
联系我们 contact @ memedata.com