← hurtz.lab
┌──────────────────────────────────────────┐ │ C:\SIERRA>DEBUG SIERRA.COM │ │ -S 100 FFFF 74 12 │ │ 0A3B:02E7 │ │ -E 02E7 90 90 │ │ -W │ │ Writing 4A2F bytes │ │ -Q │ │ C:\SIERRA>SIERRA │ │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ │ ░░ WELCOME TO KING'S QUEST ░░░░░░░░░░░ │ │ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ └──────────────────────────────────────────┘

Type 9090 and Press Enter

How kids with DEBUG.EXE killed Sierra's copy protection with two bytes. The NOP sled that launched a thousand pirated King's Quests.

The Setup

It's 1988. You're twelve years old. Your friend has a copy of King's Quest IV on three 5.25" floppies, hand-labeled in ballpoint. You copy them with DISKCOPY. You boot disk one. And then:

"On page 47 of your manual, what is the third word of the second paragraph?" Sierra On-Line copy protection prompt, circa 1988

You don't have the manual. You never had the manual. The disks came from a kid in math class who got them from his cousin in Michigan. The game is right there, loaded, waiting. And it won't let you past the first screen.

This was Sierra's bet: that the physical manual was harder to copy than the floppy disk. They were right, mostly. Photocopiers existed, but a thirteen-year-old didn't have casual access to one. And some of Sierra's manuals were printed with black text on dark red paper, or with answers hidden behind transparent red overlays — specifically designed to defeat photocopying.

But Sierra didn't account for DEBUG.EXE.

Two Eras of Protection

Sierra used two fundamentally different copy protection schemes, corresponding to their two game engines.

Era 1: Disk-Based (AGI Engine, 1984–1988)
The early AGI (Adventure Game Interpreter) games — King's Quest I-III, Space Quest I-II, Leisure Suit Larry 1, The Black Cauldron — used Softguard's Superlok disk protection. The game loader SIERRA.COM would call a hidden program called CPC.COM that checked for a specially formatted track on the floppy. Track 6, side 0 had a single sector marked as 8192 bytes but containing only 512 — a deliberate mislabeling that exploited quirks in the NEC 765 floppy controller. Standard copy utilities couldn't reproduce it. If the check passed, CPC.COM returned a 128-byte encryption key used to decrypt the game executable via a rotating XOR scheme.
Era 2: Manual-Based (SCI Engine, 1988–1993)
Sierra eventually concluded that disk-based protection was "more trouble than it was worth" and switched to manual lookups embedded in the SCI (Sierra Creative Interpreter) engine. King's Quest IV asked questions from the manual with 79 possible challenges. King's Quest V used four symbols from a specific page, printed under a red overlay. Police Quest required following exact procedures from the manual. Leisure Suit Larry 5 used airline timetable codes printed in black ink on red paper. The protection was no longer in the loader — it was woven into the game scripts themselves.

The Weapon: DEBUG.EXE

Here's the beautiful irony: the tool that cracked Sierra's protection shipped with every copy of DOS. Microsoft included DEBUG.EXE as a system utility — a bare-metal hex editor, disassembler, and debugger rolled into one. It was meant for programmers. It became the skeleton key of a generation.

DEBUG loaded any file into memory at address CS:0100 and let you poke around. You could dump hex, disassemble machine code into assembly mnemonics, search for byte patterns, edit individual bytes, and write the modified file back to disk. It was terse, unforgiving, and incredibly powerful.

DEBUG.EXE Command Reference
N filename — name a file for loading/writing
L — load file into memory at CS:0100
D address — dump hex + ASCII
U address — unassemble (disassemble to mnemonics)
S range bytes — search for byte sequence
E address bytes — enter/edit bytes at address
T — trace (single-step one instruction)
G — go (execute until breakpoint)
W — write modified file back to disk
Q — quit

The Crack

The instructions circulated on BBSes as plain text files — usually a few lines, typed out by someone who'd figured it out and wanted the world to know. For the AGI-era games, the crack targeted SIERRA.COM directly:

DOS Prompt
C:\SIERRA>REN SIERRA.COM SIERRA.XXX
C:\SIERRA>DEBUG SIERRA.XXX
-S 100 FFFF 74 12              ; search for JZ +12h
xxxx:02E7                       ; DEBUG reports the address
-E 02E7 90 90                  ; replace with NOP NOP
-S 100 FFFF 75 0A              ; search for JNZ +0Ah
xxxx:0431                       ; second location
-E 0431 90 90                  ; NOP NOP again
-W                              ; write it back
Writing 4A2F bytes
-Q
C:\SIERRA>REN SIERRA.XXX SIERRA.COM
C:\SIERRA>SIERRA                 ; game loads. no questions asked.

That was it. Two edits. Four bytes changed. Copy protection dead.

The REN to .XXX was a necessary trick — DEBUG treated .COM and .EXE files specially during loading. Renaming to a neutral extension ensured it was loaded as raw bytes at CS:0100 with no interpretation.

Why 0x90 Is the Magic Number

The byte 0x90 is the x86 opcode for NOP — "No Operation." The CPU reads it, does absolutely nothing, and advances to the next instruction. It's the machine code equivalent of a blank line. And it's the single most important byte in the history of software cracking.

Here's what the protection logic looked like in assembly, before and after the patch:

Before: Protected
; The game calls the copy protection routine
CALL 1A00          ; call protection check subroutine
CMP  AL, 00        ; did it return 0? (0 = failed)
JZ   error_msg     ; if zero (failed), jump to "Please insert original disk"
; ...normal game startup continues here...
After: Cracked
; The game calls the copy protection routine
CALL 1A00          ; call protection check subroutine (still runs, who cares)
CMP  AL, 00        ; did it return 0? (still checks, doesn't matter)
NOP                ; 90 — do nothing
NOP                ; 90 — do nothing
; ...normal game startup continues here, ALWAYS

The JZ (Jump if Zero) instruction is two bytes: the opcode (74) and a relative offset. Replace both bytes with 90 90 and the conditional branch becomes two NOPs. Execution falls through to the normal game startup regardless of whether the protection check passed or failed.

This is why the BBS instructions always said "type 9090" — you needed two NOPs to cover the two-byte jump instruction. One wouldn't do it; you'd leave a stray offset byte that the CPU would try to execute as an opcode, crashing the game.

Opcode Instruction What It Does
74 xxJZ / JEJump if zero / equal
75 xxJNZ / JNEJump if not zero / not equal
72 xxJBJump if below (unsigned)
73 xxJNBJump if not below
76 xxJBEJump if below or equal
7C xxJLJump if less (signed)
90NOPNo operation. The cracker's best friend.
EB xxJMPUnconditional jump (the other common patch)
"This is the single-byte NOP opcode. If you want to patch out code and don't want to think about it, just whack some 90's over it." Raymond Chen, Microsoft — The Old New Thing

How Hackers Found the Bytes

The BBS text file told you where to type 9090. But how did the person who wrote that file figure it out in the first place? There were four main techniques, ranging from brute force to elegant.

Method 1: Disassembly
Load the executable with DEBUG's U command and read the assembly output. Look for the telltale pattern: a CALL instruction followed by a CMP and a conditional jump. That's the "if protection fails, jump to error" skeleton. The CALL goes to the protection routine. The CMP checks its return value. The conditional jump is what you NOP. In a small .COM file, you could find this pattern by eye in under an hour.
Method 2: Tracing
Single-step through the program from the start using DEBUG's T command. Watch the registers. When the copy protection prompt appeared on screen, you knew you were in the right neighborhood. The most recent conditional jump before the prompt — that was your target. Tedious, but for a .COM file under 20K, manageable in an afternoon.
Method 3: Differential Execution
The clever approach: run the program twice. Once with the original disk in the drive (protection passes), once without (protection fails). Step through both runs in parallel. The exact instruction where execution diverges is your conditional jump. This was the gold standard — it didn't require understanding the protection scheme at all, just patience and two side-by-side DEBUG sessions.
Method 4: String Hunting
The laziest and often fastest approach: use DEBUG's S command to search for the error message text — "Please insert original disk" or "Refer to your manual." Find where that string lives in memory. Then work backward through the code to find what conditional jump leads there. The string is the destination; the jump is the trigger. NOP the trigger.

How It Spread

Once someone cracked a game, the knowledge propagated through layers. The cracker wrote a text file — usually ten lines of DEBUG commands with maybe a one-line note: "works on KQ4 v1.0, SQ3" — and uploaded it to their local BBS. From there, sysops traded it to other boards. Within weeks, every warez BBS in North America had it.

The major crack groups of the PC era ran this pipeline at industrial scale:

1985
Razor 1911 founded in Norway. Originally a Commodore 64 group, they'd become one of the longest-running PC crack groups in history.
1987
Fairlight (FLT) born on the C64 in Sweden. Later expanded to PC and became legendary for speed and quality of cracks.
1989
The Humble Guys (THG) founded by Candyman and Fabulous Furlough. They redefined the PC scene by obtaining games days before retail release through wholesale distributor contacts. Created the first NFO file (with their crack of Bubble Bobble).
1993
CrackAid v3.39 released by Rawhide (THG). 323 games in a single menu-driven tool. The end-user didn't need to touch DEBUG anymore — just pick your game from a list.
1995–96
Mega-tools proliferate: The Patcher (171 games), Crock (624), Locksmith (792), NeverLock (554). The hand-typed DEBUG crack becomes a point-and-click operation.

Each release came with an NFO file — elaborate ASCII art with the group's logo, the game title, cracking credits, and a list of BBS numbers. Some groups attached cracktros: animated intro screens with scrolling text and chiptune music that played before the game launched. The cracktro was the signature, the calling card, the proof of craft. They were showing off.

When 9090 Stopped Working

The NOP trick was devastating against the AGI games because their protection was architecturally clean. One loader file. One CALL to the protection routine. One conditional jump. NOP the jump, game runs.

The SCI engine games were a different animal. Sierra learned. The copy protection was no longer a single gate in the loader — it was woven into the game scripts themselves. King's Quest IV had 79 possible challenge questions. The verification used a character-sum hash: convert to uppercase, sum the ASCII values. The hash was collision-prone (both "voice" and "licks" hash to 374), but the protection wasn't in one patchable location. It was scattered across script resources.

For SCI games, the scene adapted. Instead of binary patches, they distributed softdocs — plain text files containing every answer from the manual, every code wheel combination, every symbol chart. The copy protection still ran, but now you had the answers.

Some elegant workarounds emerged: swapping script.700 for script.701 to skip the protection dialog entirely. King's Quest IV v1.0 even had a backdoor — typing "bobalu" bypassed the check completely. Sierra quietly removed it in later versions.

What It Really Was

Here's what never makes it into the histories: for a lot of us, cracking the game was the game.

You didn't crack Sierra games because you were a criminal. You cracked them because you were thirteen, you had a 286, and someone told you there was a way. The BBS text file was a treasure map. DEBUG.EXE was a portal into the machine beneath the machine. You were looking at raw hex — the actual bytes the CPU would execute — and you could change them.

Most of us who typed 9090 into DEBUG didn't fully understand what we were doing. We followed the instructions. But some of us got curious. We started reading the hex dumps. We learned what JZ and JNZ meant. We figured out what a conditional branch was before we knew the term. We were learning assembly language, reverse engineering, and computer architecture — and we thought we were just pirating King's Quest.

The copy protection existed to stop us. Instead, it taught us how computers actually worked.

The game cost $49.95. The education was free.

The Hit List

Sierra games that fell to the DEBUG crack, and their protection schemes:

AGI Era — Disk Protection (NOP the loader)
King's Quest I (1984) — Superlok disk check
King's Quest II (1985) — Superlok disk check
King's Quest III (1986) — Superlok + spell-copying from manual
Space Quest I (1986) — Superlok disk check
Space Quest II (1987) — Superlok disk check
Leisure Suit Larry 1 (1987) — Superlok + age quiz (Alt-X bypass)
The Black Cauldron (1986) — Superlok disk check
Manhunter: New York (1988) — Superlok disk check
Gold Rush (1988) — Superlok disk check
SCI Era — Manual Protection (softdocs / script swaps)
King's Quest IV (1988) — Manual word lookup, 79 questions
King's Quest V (1990) — Symbol matching, red overlay
King's Quest VI (1992) — Alphabet code wheel
Police Quest 1 VGA (1992) — Procedure manual
Police Quest 2 (1988) — Mug shot identification
Police Quest 3 (1991) — Map lookups
Leisure Suit Larry 2 (1988) — Phone numbers from manual
Leisure Suit Larry 5 (1991) — Aerodork timetable, red paper
Space Quest 4 (1991) — Matrix code wheel
Colonel's Bequest (1989) — Fingerprint matching
EcoQuest (1991) — Combination lock from manual
Laura Bow 2 (1992) — Museum guide lookups

Legacy

The 0x90 NOP patch didn't die with Sierra. The same technique — find the conditional jump, replace it with NOPs — was used to crack every generation of PC software for the next two decades. Windows shareware. CD-ROM checks. Serial number validation. Online activation. The tools got fancier (SoftICE replaced DEBUG, IDA Pro replaced hand disassembly, OllyDbg gave you a GUI), but the core insight never changed: somewhere in the binary, there's a conditional branch that decides whether you're allowed to run the software. Find it. Kill it. 90 90.

The crack groups that started on Sierra games — Razor 1911, Fairlight, The Humble Guys — went on to crack Doom, Quake, Half-Life, and everything that followed. The BBS network evolved into the internet. The NFO files became websites. The cracktros became the demoscene. But the technique? The technique was eternal.

Two bytes. That's all it ever took.