SecuROM
From Wikipedia, the free encyclopedia
SecuROM is a CD/DVD copy protection solution, most often used for Computer games, by Sony DADC. SecuROM aims to resist home media duplication devices, professional duplicators, and reverse engineering attempts. The newest versions (v4 and up) prevent 1:1 CD-R copies from being made. Certain programs can circumvent its protection, but can't duplicate it. While the use of SecuROM is not regarded as controversial as some other copy protection schemes, it has been known to cause problems. It installs a shell extension that, for example, prevents Windows Explorer from deleting 16-bit executables. [1]
Contents |
[edit] Versions, detection and technology of SecuROM
[edit] SecuROM v1.x - v3.x
One of the following files should exist in the installed directory (Depending on the operating system) or in the root of the original CDs:
- CMS16.DLL
- CMS_95.DLL
- CMS_NT.DLL.
The protection can also be recognized by DADC on the inside ring of the CD. DADC is a CD manufacturing plant, the more recent SecuROM protected games are also pressed in other plants. Open the main executable, using a HexEditor and search for the following ASCII text (it should appear twice): CMS
[edit] SecuROM v4.6
SecuROM v4.6 has had been the underdog of commercial copy protection. The protection modifies a CD-ROM's q-channel in order to make a protected original distinguishable from a copy.
A set of nine locations where the Q-Channel is purposely destroyed is computed by the following function (demonstrated as python-code), using a vendor specific key.
BadSQ = 0x0 VendorKey = [0,0,0,0,0,0,0,0,0] Seed = [0,0,0,0,0,0,0,0,0] BadSQTable = [0,0,0,0,0,0,0,0,0] round = 0 for a in range (0,256): BadSQ = BadSQ + (VendorKey[a % 9] & 0x1F) + 0x20 for b in range (0,9): if (Seed[b] == a): BadSQTable[round] = BadSQ round += 1 VendorKey[], Seed[] and BadSQ are initialized to secret values. Possible optimisations were omitted to reflect the original implementation.
The function calculates nine sector numbers; if the correspondig Q-channel is not readable at these locations, the CD is considered being original. Note that the key is always the same for all titles issued by a specific vendor, resulting in identical Q-channel patterns. Also note that every key has 134.217.727 "twinks" that will produce an identical BadSQTable.
[edit] SecuROM v4.7 and above
After development on SecuROM had apparently been stopped, SecuROM v4.7 had been the first updated version for months, obviously being a "public" beta. The new SecuROM brought several major changes about how the protection works and how it is integrated into the target program.
Unlike SecuROM v4.6, which relied on illegal SubQ-Information, the new scheme utilises "data density measurement" (not to be confused with "data position measurement" as being used by other protections). While the data density on normal CD/DVD-ROMs constantly degrades from the most inner to the most outer sector, data density on SecuROM v4.7 protected CD/DVD-ROMs is diversified by a certain, vendor specific pattern. This pattern can be reconstructed by high-precision time measurement during software<->CD/DVD-drive interaction and reflects the vendor-key as mentioned above.
SecuROM v4.84 and beyond includes "Trigger Functions" which allow the developer to program multiple and fully customizable authentication checks throughout the entire application. As the protection places itself between the application's code and the OS, it can alter the behaviour of selected system functions.
Consider the following example (pseudo-code)
if (GetCurrentDate() == '13-32-2999') then WorkCorrectly() else ScrewItUpSomehow() end if
Obviously, a "normal" GetCurrentDate() function will never return '13-32-2999'. However, as SecuROM can modify the function's result, the application can check for the protection's presence during runtime; if the protection has been removed, the function will return with some other valid value, giving the application the opportunity to display an error message, silently quit or modify the application's behaviour (e.g. making enemies invincible).
There are many different ways how "triggers" can be integrated into a program, making it much more complicated to universally circumvent the protection.
[edit] SecuROM v 7.x
Latest SecuROM Versions are all 7.x versions which are released and updated continuously. SecuROM 7.x installs its own service to user's computer UAService7.exe — (ring 3), which works in ring 3 of the computer's operating system.