《Quake Shareware》,一张内容过于充实的CD-ROM
摘要
文章记述了id Software在1990年代尝试在Quake Shareware CD-ROM上销售加密游戏的实验,该实验很快被破解,导致了灾难性的零售失败。
<p><a href="https://lobste.rs/s/j5xjf2/quake_shareware_cd_rom_just_little_too">评论</a></p>
查看缓存全文
缓存时间: 2026/08/18 00:12
# 《雷神之锤》共享软件光盘——一张塞得太满的CD-ROM
来源:https://fabiensanglard.net/quake_shareware_cd/index.html
2026年8月17日
《雷神之锤》共享软件光盘——一张塞得太满的CD-ROM在90年代中期,除了极其昂贵的英特尔奔腾处理器(https://fabiensanglard.net/fastdoom/pentium_ad_pcmag_nov_1993.jpg)之外,最酷的PC配件莫过于CD-ROM光驱(https://fabiensanglard.net/quake_shareware_cd/Personal-Computer-World-1995-04-S-OCR.pdf)。其640 MiB的容量(相当于当时PC硬盘存储量的三倍),让爱好者得以踏入由高分辨率640x480调色板索引256色照片[\[1\]](https://fabiensanglard.net/quake_shareware_cd/index.html#footnote_1)、VOC音轨以及Video For Windows(https://fabiensanglard.net/quake_shareware_cd/Am_microsoft_media_player.webp)"丝滑"的12帧/秒240x179分辨率视频[\[2\]](https://fabiensanglard.net/quake_shareware_cd/index.html#footnote_2)[\[3\]](https://fabiensanglard.net/quake_shareware_cd/index.html#footnote_3)构成的多媒体世界。这些视频持续时间可达数秒。
对于电子游戏开发者而言,CD-ROM是个矛盾体。其容量远远超过了他们所能制作的资源量。少数作品如《鬼屋魔影》(1993)、《银河飞将III:心脏之虎》(1994)或《幻影凶间》(1995)引入了全动态视频(在当时只有屏幕部分区域能动的世界里)。有些则加入了高品质音乐。对此我印象最深的是id Software首席开发者约翰·卡马克的观点。
> 人们期待CD游戏包含大量数字化语音和视频……这里有个笑话:如果我们真的做DOOM的CD版,你会拿到游戏外加一部名为《DOOM制作秘辛》的小时长纪录片。约翰·卡马克(1994年1月)于"ATARI EXPLORER ONLINE" (https://www.atariarchives.org/cfn/09/03/08/0060.php)
纸上谈兵美好,光盘实战糟糕
1996年6月,经过三年的艰苦开发,id Software完成了他们的新作《雷神之锤》。如同前作,他们计划同时发布共享版和完整版。由于游戏仅占用22 MiB存储空间,id Software的成员想到可以利用CD-ROM剩余容量。为何不包含完整id游戏目录的加密版本呢?这不仅能省去中间商,还能让玩家仅凭一个电话和信用卡就立即获得游戏。
这一构想得以实现。该光盘于1996年7月3日发布[\[4\]](https://fabiensanglard.net/quake_shareware_cd/index.html#footnote_4),并于8月30日上市[\[5\]](https://fabiensanglard.net/quake_shareware_cd/index.html#footnote_5)。黑客组织GNOMON在仅仅39天后就发布了`Quakecrk.zip`[\[6\]](https://fabiensanglard.net/quake_shareware_cd/index.html#footnote_6)。该压缩包内含`QCRACK.EXE`,一个可以解密光盘上所有游戏的工具。
> 《雷神之锤》的共享软件零售实验被证明是灾难性的。理论上,id本想绕过零售商,允许玩家购买共享版后拨打800电话订购并获得解锁完整游戏的密码。但玩家毫不迟疑地破解了共享版,免费解锁了完整版。更糟的是,分销和订单履行的所有常规环节都开始失控。在情急之下,id试图叫停零售共享版,但为时已晚。他们手中积压了近15万张光盘。大卫·库什纳《毁灭大师》(https://en.wikipedia.org/wiki/Masters_of_Doom)
究竟发生了什么?让我们深入探究!
获取《雷神之锤》零售共享版光盘
得益于Usenet上*rec.games.computer.quake.misc*的存档,我们得以找到关于其工作原理的详细讨论[\[7\]](https://fabiensanglard.net/quake_shareware_cd/index.html#footnote_7)。玩家可以去数百家CompUSA/Computer City商店中的任何一家,花9.95美元购买这张光盘。
[](https://fabiensanglard.net/quake_shareware_cd/compusa.webp)CompUSA商店内景(1998年)(来源 (https://x.com/RerezTV/status/1463555899239378952))[](https://fabiensanglard.net/quake_shareware_cd/PXL_20260815_201523675.webp)对于共享软件产品而言,包装质量实际上相当高。在我的副本上,正面的贴纸明确标注这是"共享版",并附有致电1-800-669-9342(或1-800-ID-GAMES)解锁完整游戏的说明。
[](https://fabiensanglard.net/quake_shareware_cd/PXL_20260815_201536639.webp)这个电话号码至今仍在使用。但由于CompUSA已倒闭,你接通的并非解锁中心。这家连锁超市在2007至2008年间关闭。等待我们的不是解锁客服,而是一条推销老年产品的自动语音信息。
联系客服时,用户还需要提供一个"源代码"。该代码在生成解锁密码时并无实际作用。这可能是分销商索取交易费用的一种方式。浏览eBay时,我发现许多光盘上带有暗示过去/当前零售商的名称。例如`12-BSTBY`(百思买)、`24-CCITY`(Computer City)、`22-CUSA`(CompUSA)、88、11-1111、`38-EB`(Electronic Boutique)、`44-FTRSP`(Future Shop,加拿大)、`34-EGGH`(Egghead Software)和`56-MCTR`(Media Play/Musicland)。
预期工作流程
初次接触体验流畅。用户界面设计精良。玩家可以直接进入《雷神之锤》共享版,也可以点击"QUAKE UNLOCK"。
光盘还包含一个"ID STUFF"版块,允许浏览id游戏目录并解锁其中任意一款。其中包括多个版本的《DOOM》,以及《HEXEN》和《HERETIC》。
一旦启动解锁流程,用户界面会生成一个"代码编号"(我称之为挑战码),需要通过电话告知服务人员。支付费用后,会收到一个"解锁码编号"(我称之为序列码)。两个号码上的校验和减轻了这种原始电话通信模式可能带来的问题。
为避免重放攻击,每次程序运行时挑战码都会变化,并在界面激活期间每5分钟轮换一次。
屏幕甚至保留了id Software早期标志性的挑衅语气("那些太吝啬的人")。请注意,界面还警告用户应在解锁后备份游戏。由于挑战码包含随机性元素,序列码无法重复使用。
乍看之下,这个流程似乎很稳固。用户必须致电解锁服务获取密码。只有用那个密码才能完成最终解锁。那么问题出在哪里?
TestDrive,幕后功臣
驱动加锁/解锁机制的工具由TestDrive公司(存档www.testdrive.com (http://web.archive.org/web/19970116210154/http://www.testdrive.com/))提供。其理念是让玩家能够"先试后买",并允许他们即时购买程序完整版。
他们的加密器可以"变性"一个`.EXE`可执行文件。它将文件头部32 KiB替换为自定义头(尝试运行变性后的可执行文件会显示"此应用程序已禁用"),将文件重命名为`.MJ3`,将原始头部加密为`.ST3`文件,并生成一个种子。
正常EXE文件
变性后的MJ3
数据块ST3
秘密种子
让我们用我生成的文件映射图(https://fabiensanglard.net/quake_shareware_cd/cdrom.html)(推荐使用分屏视图)来窥探《雷神之锤》共享版光盘(https://archive.org/details/cdrom-quake-shareware)内部。在这个目录树中,我们可以看到每个可用游戏都对应一个`MJ3`文件。也能看到所有`ST3`文件位于`PAGEMKR`存档内。所有"复原"`MJ3`文件为完整`EXE`游戏安装程序所需的要素都已齐备,只差那个必然源自序列码的秘密"种子"。
如上所述,这个流程本身并无缺陷。秘密种子来自解锁服务器,与不可重用的挑战码/序列码绑定。但黑客组织GNOMON找到了破解之道。
QCRACK.EXE如何工作[](https://fabiensanglard.net/quake_shareware_cd/qcrack.webp)`QCRACK.EXE`于1996年8月10日发布(gnomon.nfo (https://fabiensanglard.net/quake_shareware_cd/gnomon.nfo)),距离《雷神之锤》零售共享版光盘上市仅39天。该工具能够根据挑战码自动生成序列码。
GNOMON组织成员发现的是:**电话接收的序列码中根本不包含任何秘密**。它仅仅是**付款凭证**。
光盘附带的"QUAKE解锁"程序`FLOW.EXE`本身就能从挑战码生成序列码。它所做的只是检查其本地生成的序列码与用户输入的序列码是否匹配!整个保护机制完全依赖于**模糊化安全**。
从挑战码到序列码的转换流程复杂,但已在2016年被rmolina[\[8\]](https://fabiensanglard.net/quake_shareware_cd/index.html#footnote_8)逆向工程。
1. 11位挑战码被拆分为4位游戏ID,以及一个7位数字产生的偏移量和深度值。
2. 游戏ID索引加密数据库`SKU.17`,获得一个代号(例如:doom2)。
3. 该代号允许检索`FLOWLIB.LIB`存档内的一个512字节DOC文件(例如:DOOM2.DOC)。
4. 将代号与字符串"Testdrive Corp."混合,DOC文件将一个508字节的硬编码表转换为254个16位值的唯一表。
5. 深度值和偏移量反向遍历该表,通过异或深度值生成一个16位值MEM。
6. 序列码则按公式`unlock = ((reverse7(GAME_ID) + MEM + 0x18) & 0x7F) + 0x83 * ((MEM ^ 0x1EA3) + 0x1700A1)`计算,并以前缀B打印。
更多漏洞
研究得越深,越觉得负责人根本没时间完善成品。
> 永远不要将可归因于愚蠢的事情归咎于恶意。更不要将可归因于时间压力的事情归咎于愚蠢。Fab's Razor
深入探索《雷神之锤》共享版光盘(https://fabiensanglard.net/quake_shareware_cd/cdrom.html)揭示了更多问题。
- 解锁系统的某些部分看起来从未经过测试。《最终毁灭战士》无法通过致电解锁中心解锁,因为存在一个漏洞。"Final Doom"的游戏ID是12。`SKU.17`中有一个拼写错误,导致游戏ID 12对应代号"Final"(首字母大写F)。这使得序列码生成检索到了错误的DOC文件。正确的值应为"final"(小写)。这造成了一种过于常见的情况:非法用户反而比付费客户体验更好。
- 步骤摘要提到了加密的`SKU.17`文件。但在`FLOWDIR`存档中,存在一个完全未加密的纯文本版本,名为`SKU.TXT`。还有更多TXT文件与其`.17`加密版本对应(PRODUCT.TXT, EXE.TXT)。
- 多个文件是临时文件(DM.TMP)、编辑器生成文件(FLOWWORK.BAK)或完全未使用(ENCRYPT.EXE)。
- 库格式未加密或混淆。弄清`.DIR`格式阻力很小,可以轻松访问生成序列码所需的所有DOC文件。
参考文献
---
^ (https://fabiensanglard.net/quake_shareware_cd/index.html#back_1)\[1\]MediaPack 10-CD Roms (https://archive.org/details/aris-entertainment-media-clips-10-cd-rom-set/)^ (https://fabiensanglard.net/quake_shareware_cd/index.html#back_2)\[2\]MediaPack Tropical Rainforest (https://archive.org/details/media-clips-tropical-rainforest)^ (https://fabiensanglard.net/quake_shareware_cd/index.html#back_3)\[3\]MediaPack Wild Places (https://archive.org/details/wild-places_202503)^ (https://fabiensanglard.net/quake_shareware_cd/index.html#back_4)\[4\]Quake' Is Here (https://www.sfgate.com/entertainment/article/COMPUTER-GAME-REVIEW-Quake-Is-Here-Big-3239903.php)^ (https://fabiensanglard.net/quake_shareware_cd/index.html#back_5)\[5\]When will it be available in stores (rec.games.computer.quake.misc) (https://groups.google.com/g/rec.games.computer.quake.misc/c/7EybGy6DgHs)^ (https://fabiensanglard.net/quake_shareware_cd/index.html#back_6)\[6\]gnomon.nfo (https://fabiensanglard.net/quake_shareware_cd/gnomon.nfo)^ (https://fabiensanglard.net/quake_shareware_cd/index.html#back_7)\[7\]Question about Quake Shareware CD (rec.games.computer.quake.misc) (https://groups.google.com/g/rec.games.computer.quake.misc/c/bKagYftTyug)^ (https://fabiensanglard.net/quake_shareware_cd/index.html#back_8)\[8\]Quake, TestDrive y Qcrack (https://rmolina-co.blogspot.com/2016/08/quake-testdrive-y-qcrack.html)
---
\*
相似文章
约翰·卡马克谈《雷神之锤》开发中的错误如何毁掉了 id Software
约翰·卡马克回顾了《雷神之锤》开发中的关键错误,这些错误导致了 id Software 的衰落,包括技术上的过度野心、员工过度劳累以及糟糕的公司结构。
13KB的Quake (2021)
探讨了游戏Quake如何被压缩到仅有13KB,展示了极致的优化技术。
打造一台1997年的Quake PC!
作者记录了打造一台1997-1998年古董PC的过程,用于运行所有版本的Quake,涵盖了硬件选择,如Pentium MMX、3dfx Voodoo2和Socket 7主板。
打造一台1997年的Quake PC:对GLquake进行基准测试
一位开发者讲述了他组装一台配备3dfx Voodoo显卡的复古PC,并对GLQuake进行基准测试的过程,同时讨论了硬件的小问题和性能印象。
WinQuake 存在的原因及其工作原理
深入探讨创建 WinQuake(Quake 的 Windows 原生版本)的历史原因,以及它如何在 Windows 95 和 NT 上实现接近 DOS 版本的性能。