Введение

Rob Northen Copylock (также известный просто как Copylock) — это система защиты от копирования, разработанная для предотвращения несанкционированного копирования дисков с использованием стандартных дисководов на Amiga, Atari ST и IBM PC-совместимых компьютерах. Она была создана британским программистом Робом Нортеном после основания им собственной компании Copylock Software. В основном использовалась для защиты игр от копирования обычными пользователями.

История

В 1984 году Роб Нортен был нанят компанией Acornsoft для разработки процедур защиты от копирования для их программного обеспечения, такого как оригинальная Elite для BBC Micro. Нортен покинул компанию через шесть месяцев и основал собственную компанию Copylock Software, продолжая при этом работать неполный рабочий день в Acornsoft над созданием процедур защиты от копирования, файловых систем и дисковых утилит. Первое программное обеспечение, защищенное Copylock, появилось в 1987 году на Atari ST. Первая версия Copylock использовалась для защиты ранних игр для Amiga и Atari ST, не поддерживающих многозагрузку и распространявшихся на одной дискете. Изначально издатели отправляли Нортену незащищенный мастер-диск, который он заменял своим зашифрованным загрузчиком, а затем отправлял защищенный мастер-диск для тиражирования. По просьбам разработчиков игр, таких как The Bitmap Brothers, стремившихся внедрить более сложные проверки защиты, Нортен разработал подпрограммы, которые разработчики могли использовать по своему усмотрению. В 1990 году он приобрел дупликатор дисков и использовал его для создания дискет с внедренными серийными номерами Copylock, которые он отправлял разработчикам вместо защищенных мастер-дисков, вместе с процедурами Copylock для включения в их игры. Эта серия Copylock поддерживала более новые игры с многозагрузкой или распространявшиеся на нескольких дискетах. Она также позволяла включать проверки защиты в произвольных точках игрового кода: одним из примеров является компьютерная игра Hook от Ocean Software, в которой при неудачной проверке защиты из игры исчезал ключевой предмет – кружка. В 1990 году Copylock также был портирован на системы на базе MS DOS. К моменту прекращения использования в 1996 году, по сообщениям, около 500 коммерческих игр для Amiga были защищены с помощью Copylock.

Технические детали

Флоппи-диск, защищенный Copylock, содержит один длинный трек, известный как Copylock Serial Track, который можно прочитать на стандартном дисководе, но записать на него без специализированного оборудования для копирования дисков невозможно. Диск содержит специальный загрузчик, сильно зашифрованный, который способен читать и декодировать Copylock Serial Track. Зашифрованный код проверяет наличие на диске корректного серийного ключа Copylock, уникально генерируемого для каждой игры. На уровне машинного кода Copylock работает, используя режим трассировки Motorola 68000, который заставляет процессор выполнять определенный вектор трассировки перед каждой инструкцией основной программы. Этот вектор трассировки декодирует машинный код непосредственно перед его выполнением и повторно шифрует его после выполнения, так что в физической памяти одновременно находится не более одной или двух не зашифрованных инструкций. Это устройство называется векторным декодером трассировки и впервые было реализовано на платформе Atari ST, а затем перенесено на ранние модели Amiga, обе основанные на архитектуре 68000.

Первая серия

Было два типа процедур Copylock из предыдущей серии. В первом, внутреннем типе, серийный ключ Copylock для данной программы передавался в аппаратный регистр D0 и сохранялся по адресу памяти $24. Изобретательные программисты могли использовать этот серийный ключ в определенных целях, чтобы вынудить потенциального взломщика удалить дополнительные проверки в игре. Однако во многих ранних играх программисты обычно просто выполняли проверку серийного ключа, который было легко найти в программе и, следовательно, отключить. Во втором, оберточном типе, код запуска игры, или загрузочная процедура, шифровался и затем включался в код Copylock. Все проверки целостности диска выполнялись кодом Copylock: в случае успеха, декодирование вектора прерываний переходило к зашифрованной загрузочной процедуре или файлу; данные затем перемещались в область памяти, ожидаемую кодом игры, и процедура выполнялась. Этот тип Copylock первого поколения часто использовался для игр, которые загружались целиком и больше не требовали доступа к дисководу. Однако это означало, что защита от копирования становилась бесполезной после расшифровки игры, поскольку тогда игру можно было "сохранить в один файл", то есть полностью скопировать из памяти, сохранить на диск и запустить независимо от процедур Copylock.

Вторая серия

Серия 2 стала развитием внутренних подпрограмм серии 1, что снова делало ранние версии легко обходимыми, поскольку многие программисты реализовывали лишь простую проверку защиты, которая считывала серийный ключ из Serial Track Copylock и проверяла его корректность. Взломщики часто даже не нуждались в изучении закодированных подпрограмм Copylock, так как проверка подлинности диска была реализована таким образом, что они могли легко увидеть серийный ключ в коде, выполняющем эту проверку. Поэтому, хотя многие понимали принцип работы Copylock, лишь немногие уделили время тому, чтобы разобраться, как его действительно декодировать. Однако к этому моменту Copylock эволюционировал и позволял передавать параметры перед выполнением, что означало, что Copylock теперь мог записывать не только серийный ключ, но и специфичные для игры значения в содержимое регистров, передаваемых Copylock, или просто записывать значения в список предопределенных адресов, обеспечивая тем самым корректную работу игры. Типичный, и как правило ошибочный, способ взлома игры, защищенной Copylock, заключался в получении серийного ключа, изменении заголовка Copylock для размещения правильного серийного ключа в регистр D0, и последующем обходе всего процесса чтения и декодирования. Это приводило к тому, что код "особого случая" в Copylock никогда не выполнялся, и игра не запускалась, используя только серийный ключ.

Версия IBM PC совместимая

Можно было портировать Copylock на IBM PC-совместимые компьютеры, поскольку микропроцессор x86 поддерживал вектор трассировки так же, как и процессор 68000, через одношаговое прерывание или INT 1. Это проявлялось немного иначе: исполняемый код игры был зашифрован и "упакован" загрузчиком Copylock. Во время работы этот загрузчик считывал 4 сектора с дискеты и генерировал контрольные суммы на их основе. Эти суммы, в свою очередь, использовались в качестве ключей для расшифровки кода игры. После расшифровки загрузчик передавал управление игровой программе. Обойти защиту было легко, поскольку исходный исполняемый код игры просто хранился внутри загрузчика. После прохождения проверок диска и расшифровки, получение нешифрованного исполняемого файла сводилось к двум операциям записи на диск. Первая записывала неизменный заголовок "MZ", а вторая завершала процесс, сохраняя фактический код игры. Fabulous Furlough из группы The Humble Guys разработал инструмент, который делал именно это и мог "взломать" игру менее чем за минуту.