June 24th, 2025
2 reactions

Abusing copyright strings to trick software into thinking it’s running on your competitor’s PC

One very complicated part of bringing up Plug and Play was bootstrapping the entire process. After all, the number of computers that supported the Plug and Play specification started at zero, because the specification was still being written. A lot of clever tricks were used to retrofit Plug and Play onto legacy hardware.¹

The Windows 95 team worked to gather a very large range of PC brands and models, and as part of doing “Plug and Play for PCs that predate the Plug and Play specification”, the team gathered information from all of those PCs to look for clues on how they could be identified. This often included searching the BIOS for copyright strings and BIOS firmware dates.

One of the strings they found was “Not Copyright Fabrikam Computer.”

Why would a BIOS deny that it was copyrighted?

We weren’t sure, but we had a theory.

Back in the early 1990’s, it was not uncommon for PCs to come with preinstalled software that was locked to the manufacturer. If you bought (say) a Fabrikam PC, it would come with a copy of “LitWare Word Processor”. This version of LitWare Word Processor was just the trial edition, but the secret was that the trial edition checked if it was running on a PC manufactured by one of its licensees. If so, then it unlocked its features and became the full version.

LitWare detected whether it was running on a PC manufactured by one of its licensees by searching the BIOS for specific copyright strings. For example, since Fabrikam was a licensee, it searched the BIOS for the string Copyright Fabrikam Computer, and if if found it, it would unlock the features that were normally disabled in the trial edition.

The makers of Contoso PCs wanted to include the free LitWare Word Processor trial edition with their PC, but they also wanted to unlock the features of the full version despite not being a Fabrikam PC.

The solution: In addition to the normal Contoso copyright string, also put the string Not Copyright Fabrikam Computer in the BIOS!

¹ Some of those retrofitting techniques were really convoluted, because you needed a way to signal information without confusing existing hardware that didn’t understand that signal, and to allow multiple devices to coordinate responses to the same signal. For example, the serial port detection sequence involves writing specific values to the ADDRESS port to enter configuration mode, and then reading values from the READ_DATA port. If the index of the read matches a set bit in the device ID, then the device responds with a value; otherwise, it does an electrical engineering thing that allows the response to default to zero, while still monitoring the actual value read. The result of the read is nonzero if anybody actively responded, and it is zero if nobody responded. If a device wanted to respond zero, but it saw that the actual value was nonzero, then it means that another device with a higher ID number responded to the query, so it backs off for the remainder of the cycle. After the operating system gathers all the bits of the device ID for the highest-numbered ID, it restarts the process, and the device that won the “highest ID” voting backs off to allow the lower-numbered device IDs to respond. This cycle repeats until an ID of zero is read back (meaning that nobody responded to anything), indicating that all the devices have been identified.

Topics
History

Author

Raymond has been involved in the evolution of Windows for more than 30 years. In 2003, he began a Web site known as The Old New Thing which has grown in popularity far beyond his wildest imagination, a development which still gives him the heebie-jeebies. The Web site spawned a book, coincidentally also titled The Old New Thing (Addison Wesley 2007). He occasionally appears on the Windows Dev Docs Twitter account to tell stories which convey no useful information.

3 comments

  • Dan Findley (dantheother)

    Reminds me of the utter lunacy that is browser user agent strings.

    • Erik Fjeldstrom

      But aren’t you glad that your browser is compatible with Netscape, IE 5, and Gecko? I for one am sad that it isn’t compatible with Lynx or Mosaic.

      Having tried to do language auto-determination and browser sniffing in the early 2000s for the website of the organization I worked for then, at least the standards have mostly firmed up to the point where trying to accommodate all the quirks is a bit easier.

  • Ahmed Mohamed Abdel-Razek 11 hours ago

    Not Copyright Fabrikam Computer 💀💀