За несколько десятилетий ЭВМ эволюционировали от «100 квадратных метров площади, 25 человек обслуживающего персонала и 30 литров спирта ежемесячно» до вполне миниатюрных образцов: Commodore-64, Atari 800XL, Apple II, Электроника БК-0010… Проблема была в цене: все эти модели весьма били по карману рядовому обывателю (примерно как покупка автомобиля).
Всё изменил Клайв Синклер, выпустивший на рынок ZX Spectrum – первый дешёвый персональный компьютер. Спектрумы продавались ударными темпами: только в одной Англии за неделю приобретали порядка пятнадцати тысяч машин. Причём, помимо и так недорогой версии «в сборе», покупателям предлагался удешевлённый вариант в виде отдельных комплектующих – эдакий конструктор «Собери сам».
Схема была достаточно быстро скопирована и спектрум-подобные ПК начали производить по всему миру. Только на просторах СССР существовали десятки официальных клонов («Москва», «Ленинград», «Зеленоград», «Балтика», «Пентагон» и многие другие) и сотни неофициальных. Спаять такой девайс был в состоянии любой уважающий себя радиолюбитель (конечно, при наличии всех комплектующих, которые добывались на радио-рынках и через знакомых). К слову, импортным в таком компьютере мог быть только процессор: «мозгом» Спектрума был Z80, разработанный фирмой Zilog в 70-х годах и получивший широчайшее распространение по всему миру: от персональных компьютеров до противокорабельных ракет. А с 1991 года на просторах уже России был налажен выпуск отечественных «реплик» Z80 – первые экземпляры маркировались Т34ВМ1, последующие – КР1858ВМ1.
Но как использовать персональный компьютер в 80-е? На нём можно изучать принципы программирования, печатать тексты… и играть. Что и делало большинство владельцев Spectrum. Спрос родил предложение: на свет появилось множество фирм, занимающихся разработкой программного обеспечения и видеоигр. И все они хотели заработать, однако распространение программ через пиратские копии неприятно нарушало бизнес-планы. Разработчики пытались защитить свои продукты от копирования, пираты учились обходить защиту. Противостояние продолжается и по сей день: вернёмся в прошлое и посмотрим, с чего же всё начиналось.
❯ Защита игр, распространяемых на компакт-кассетах
Да-да, на маленьких кассетах с магнитной лентой. А запускались они с помощью подсоединённого к компьютеру аудиоустройства, которое считывало информацию с магнитной ленты и загружало её в оперативную память. На одну кассету умещалось около двух десятков игр, записанных через частотное кодирование: логическому нулю соответствовали четыре периода колебаний с одной частотой, а логической единице – восемь периодов колебаний на другой частоте. Фирменные кассеты как правило содержали меньшее количество плёнки и зачастую всего одну игру.
Количество игр и оформление явно говорит нам, что кассета пиратская
Скопировать игру с такого носителя было элементарно: достаточно было обладать двухдековым магнитофоном и чистой кассетой для записи. Впрочем, последнее не обязательно: кассеты можно было и перезаписывать, однако это негативно отражалось на качестве, поскольку бытовые магнитофоны не могли полностью размагнитить ленту, чтобы стереть с неё предыдущие данные. Условной защитой была защелка, выломав которую можно было запретить перезапись кассеты… но установка сложенной бумажки или картонки в нужное место легко решала эту проблему.
❯ Защита от копирования на кассетном уровне
Единственным работавшим «кассетным» способом защиты от прямого копирования было использование более высокочастотного кодирования, которое делало невозможным создание копии на непрофессиональном оборудовании в домашних условиях. Также можно встретить упоминания о способе проверки подлинности кассеты путём анализа уровня шума на «чистых» участках: при записи на промышленном оборудовании фирменных кассет пишущая головка в промежутках между файлами могла быть отключена, и лента оставалась первозданно чистой, тогда как при копировании в кустарных условиях работа стирающей головки неминуемо повышала уровень шума даже на «пустых» участках. Однако на практике такая защита встречалась крайне редко, тем более что даже навскидку этот способ выглядит достаточно проблемным из-за устаревания магнитной ленты и различной чувствительности считывающих устройств.
Некоторые производители пытались обмануть пользователей, размещая на кассетах предупреждающие надписи и, иногда, меняя внешний вид магнитной ленты (только визуально, чтобы отпугнуть пиратов).
Работало это примерно так
Описанные выше способы могли работать только для игр или программ: защитить от копирования кассеты с музыкой было невозможно (во всяком случае, не внося существенных изменений в конструкцию кассеты и магнитофона). Так что проблема незащищённости магнитной плёнки беспокоила не только разработчиков видеоигр и программного обеспечения, но и звукозаписывающие компании. В 1980-х годах в США и Европе была даже запущена антипиратская кампания «Домашняя запись убивает музыку», но попытки отпугнуть людей от копирования виниловых пластинок и аудиокассет не снискали особого успеха. Во многом спасал положение тот факт, что при копировании через двухдековый магнитофон (а уж тем более – при записи музыки с радиотрансляции) страдало качество, особенно, если копирование производилось не с оригинала. Поэтому активные движения по защите от аудиопиратства были начаты только с переходом на CD-диски, копии которых уже ничем не отличались от исходника.
Немного большего успеха добились производители видео-контента: для VHS-кассет фирмой Macrovision был разработан вполне действенный механизм защиты от пиратства. На каждую защищённую плёнку помимо основной информации записывались импульсы помех, которые пропускались видеомагнитофонами при воспроизведении, но вызывали ошибки при копировании и оцифровке.
Для игр, записанных на магнитную ленту, такой метод был бы неприемлем. Любые помехи приводили к ошибке «R Tape loading error», что было весьма прискорбно, если игра почти загрузилась. Но высокая чувствительность к помехам в некотором роде уже служила своеобразной защитой: потеря качества при перезаписи с плёнки на плёнку приводила к тому, что копии, особенно выполненные на низкокачественном оборудовании, не всегда читались. Гораздо более серьёзные последствия по сравнению с потерей качества при копировании аудиокассет: там хоть что-то было слышно…
Поэтому более грамотный (и долгий) способ заключался в копировании содержимого кассеты в память компьютера и последующую запись на чистую плёнку с первозданным качеством через дополнительное устройство – Datasette (хотя можно было воспользоваться и кассетным магнитофоном с линейным выходом). И от этого уже можно было попытаться защититься!
Тот самый Datasette
Защита кассет от копирования сторонними программами строилась на изменении стандарта записи: придумывался новый способ кодирования бита или байта, добавлялись лишние байты, использовалась плавающая частота сигнала или просто запись задом-наперёд: способов было придумано много. Поскольку копировщики использовали стандартные процедуры чтения и записи данных, любое новшество ставило их в тупик. А чтобы сам Спектрум понимал, как следует читать защищённую кассету, в запись на ленте встраивался загрузчик, обученный работе с нестандартной кодировкой. И, разумеется, он надёжно прятался и шифровался.
❯ Защита от копирования на программном уровне
Естественно, что сам исходный код тоже шифровался (причём в первую очередь): это было сделано как против пиратов, так и против не чистых на руку коллег, которые бы могли подсмотреть способ реализации той или иной функции. Код запутывали, внедряли в него «пустышки» и излишние переходы, находили и использовали не задокументированные команды, кодировали с использованием машинного кода. Наиболее часто используемой защитой была «ксорка» – логический оператор ассемблера XOR, выполнявший операцию исключающего ИЛИ между всеми битами двух операндов. Как это работало: предположим, у нас есть некая последовательность битов: 100110. Если взять в качестве “ключа” 011000, то, применяя операцию XOR, мы получим на выходе 111110 (0 и 1 вместе дают 1, 0 и 0 — 0, 1 и 1 — тоже 0). Зная ключ, мы легко восстановим из зашифрованной последовательности верную, а вот не зная… тоже восстановим, конечно, но не очень легко.
А если учесть тот факт, что в некоторых играх количество этих «ксорок» доходило до нескольких сотен, становится понятно, что восстановить верную последовательность было очень нелегко. Чаще всего кодирование производилось не вручную, а через специальные утилиты: например, Alcatraz protection.
От шифрования постепенно переходили к динамической защите: программы начали содержать самогенерирующиеся части (генерация происходила, к примеру, в результате каких-либо арифметических действий). Дошло до того, что программы генерировали исполняющий код, а затем сразу же затирали его.
Последнее работало против ещё одного распространённого способа «взлома» кода: через остановку исполняющего кода и просмотр содержимого, находящегося в текущий момент времени в памяти компьютера. Выполнялся такой взлом через дополнительное периферийное устройство в виде картриджа – мультифейс, подключаемый к системному разъему компьютера. Изначально такие картриджи использовались программистами для отладки их собственных творений, но очень быстро стали популярны в среде пиратов.
Мультифейс — маленькое устройство, но большой шаг для пиратства!
Для защиты от мультифейсного копирования создатели игр начали использовать постепенную загрузку уровней, что требовало уже многократного копирования памяти для получения полного образа игры. Наиболее же эффективным способом борьбы с таким «взломом» было исключение самой возможности остановки программы. Зачастую при попытке остановки защищённой игры на экран выводилось послание, стиль которого разнился от насмешки до угрозы… или просто подписи – например, CRACKED BY BILL GILBERT (псевдоним известного польского взломщика, оставившего свой след на большинстве игр, знакомых спектрум-геймерам на просторах СССР).
Да-да, пираты тоже защищали свои кассеты от дальнейшего тиражирования! Распространение нелицензионных копий тогда было не делом идеи, а вполне себе бизнесом: если пустая кассета стоила порядка двадцати рублей, то кассету с игрой можно было продать уже не меньше чем за сто.
Ещё один вариант «программной» защиты препятствовал не копированию, но запуску на «нелицензионных» компьютерах. Так, в Бресте был собран свой клон Спектрума – ПЭВМ «Байт», под который выпускались специальные кассеты с программами и играми. От запуска на любом спектрум-совместимом компьютере, кроме «Байта», их оборонял «Церикопик», проверяющий процедуру обработки немаскируемого прерывания, которая у «Байта» и оригинального Спектрума отличалась. Вторая версия «Церикопика» обращалась к определённому байту в ПЗУ, а самая продвинутая вычисляла быстродействие компьютера в нижней и верхней памяти, чтобы сравнить её с эталонной. Если проверка проваливалась, на экран выводилось сообщение «Покупайте компьютер Байт» и загрузка программы прекращалась.
Если проследить эволюцию первых программных методов защиты информации, видно, что противостояние пиратов и разработчиков привело к весьма любопытным техническим решениям. И хоть на первый взгляд они никак не затрагивали конечного пользователя и не влияли на производительность, был один нюанс: чем сложнее становилась защита, тем больше места она занимала на кассете в ущерб основному коду.
❯ Защита игр на дискетах
В 1985 году на рынок был выпущен Beta Disk Interface – контроллер, позволяющий подключить к Спектруму дисковод. Примечательной особенностью этого интерфейса была «волшебная кнопка» – Magic Key – нажатие на которую осуществляло запись всей памяти компьютера (все ОЗУ и содержимое регистров процессора) в отдельный файл на дискете. Теперь для прямого копирования игр не обязательно было обладать мультифейсом! Таким способом можно было делать копии даже защищённых игр, причем исходный носитель роли не играл: копировали как старые программы с компакт-кассет, так и новые, поставляемые уже на дискетах.
Beta Disk и та самая кнопка Magic
Однако, проанализировав работу «волшебной кнопки», можно было увидеть, что при копировании на дискету были пропущены несколько ячеек памяти – те самые, которые использовал сам интерфейс, не имевший собственной оперативной памяти. Производители игр начали вставлять в код проверку содержимого этих ячеек и использовать их для хранения наиболее важной информации.
Никуда не ушли и рассмотренные выше способы: шифрование исходного кода и нестандартная запись на магнитный носитель. Применительно только к дискетам практиковалась также запись информации на нестандартные участки, обычно используемые для служебных записей (структура дорожек, длина секторов и т.д.). Изменяли длину и количество секторов: например, вместо 16-ти секторов по 256 байтов, записывали 3 сектора по 1024 байта, 2 по 512 и один на 256 байта.
Ещё одним новшеством в кодировании дискет от копирования стала защита «плавающими битами», которая базировалась на возможности создания бита с промежуточным значением (не 0 и не 1). При чтении такой бит в части случаев считывался как 0, а в части – как 1. Проверялось наличие такого бита банальным многократным считыванием одного и того же участка дискеты.
❯ Способ Вячеслава Медноногова
Один из советско-российских разработчиков игр для спектрум-совместимых компьютеров, выпустивший на рынок «Дурака», «НЛО» и ряд других проектов, придумал свой оригинальный способ защиты. Заключался он в намеренном нанесении дефектов на лицензионные дискеты, полностью повторить которые на пиратских дискетах не представлялось возможным. Сам Вячеслав царапал лицензионные дискеты, некоторые его последователи довольствовались уколом иглы.
Справа видна карандашная отметка — таким образом отмечен предел, выше которого царапать было нельзя
Конечно, копировщики могли сымитировать повреждённый сектор при прямом копировании игры, однако основной хитростью была перезапись повреждённых секторов с последующим чтением данных. И тут-то разница между физически повреждённым сектором и скопированным повреждением легко определялась: на целой дискете запись проводилась на все сектора, даже если часть из них до перезаписи были с имитацией повреждений. А скопировать царапину или укол иглой с точностью до бита было невозможно физически.
❯ Защита без привязки к носителю
Но всё описанное выше было сокрыто от конечных пользователей. Далеко не все обращали внимание на царапинку рабочей дискеты или копались в исходном коде игры. Однако были и способы, требовавшие от игрока тем или иным способом подтверждать обладание лицензионной версией игры – им и посвящена заключительная глава нашего обзора.
Одним из наиболее известных способов был Lenslok. Заключался он в следующем: в определённый момент на экран выводились перепутанные линии, которые можно было расшифровать при помощь специальной призмы. А призма шла в комплекте с лицензионной кассетой – изготовить её подделку в кустарных условиях было задачей нетривиальной.
Способ был придуман и запатентован Джоном Фростом и больше всего запомнился благодаря использованию в старой игре Elite. Широкого распространения Lenslok не получил, в том числе из-за проблем с масштабируемостью: на очень больших телевизорах невозможно было расшифровать код с помощью маленькой призмы. К тому же, из-за ошибки поставщика, примерно 500 копий Elite в начале продаж были укомплектованы не той призмой.
А даже если и той, видно было… не очень
Другие способы получили большее распространение, хотя смысл у них был точно таким же, как и у Ленслока: для подтверждения обладания лицензионной копией геймерам необходимо было подтвердить обладание труднокопируемыми приложениями к кассетам или дискетам. Например, ввести код с определённой страницы мануала (правда, не все проекты указывали конкретную страницу – иногда ответ приходилось поискать). Да, сейчас защита через бумажное руководство кажется примитивной, однако в 80-90-е годы ХХ века скопировать дискету или кассету было, порой, проще, чем скопировать цветную книжку…
Больше всего запомнились, конечно, оригинальные попытки, предлагающие выйти за рамки «найди на пятой странице третье слово в пятом абзаце». Так, у Pool of Radiance в комплекте шёл бумажный круг, при помощи которого можно было перевести последовательность рун в буквы, которые и разблокировали дальнейшее прохождение уровня. А в Alone in the Dark 2 вместо кругов использовались цветные карты с прорезями, совмещая которые можно было получить требуемый код.
В Ultima издатели пошли дальше и снабдили каждую лицензионную копию высококачественной тканевой картой игрового мира, по которой можно было определять координаты городов (и вводить их в качестве ответа на каверзные вопросы по ходу сюжета).
Ещё целый пласт игр задавал геймерам самые разные вопросы, ответы на которые были в бумажном мануале: например, какому вымышленному государству принадлежит тот или иной герб, как это было в Populos – первом симуляторе бога от Питера Молиньё. Иногда вопросы касались реального мира: например, в There in the World is Carmen Diego? геймерам приходилось отвечать на каверзные вопросы по типу «Сколько людей проживает в Замбии?».
Конечно, в современных реалиях попытаться ответить можно и без печатного мануала, но в 90-е далеко не у всех были свежие энциклопедии с данными о населении Замбии в 1990-м году. Да и если число будет хотя бы на тысячу отличаться от заложенного в программе, игра просто закроется.
Впрочем, не всегда провал проверки приводил к вылету игры: иногда разработчики просто усложняли прохождение нелицензионной копии. Или пытались воззвать к совести пиратов. Судя по тому, что пиратство не заглохло, а лишь сильнее расцвело с появлением в нашей жизни новых технологий – безрезультатно.
Источники
ТЫК
- Zilog Z-80 — Бессмертный восьмидесятник;
- Как Philips изменили мир музыки. История аудиокассет;
- История в кадрах: от кассеты до Blu-ray — как менялся размер видеоигр;
- ZX-Ревю 1993 №1-2 — Защита программ — продолжаем публикацию материалов, посвященных защите программного обеспечения от просмотра и копирования. Непосредственная тема сегодняшней статьи связана с подробным разбором стандартных процедур ПЗУ, осуществляющих загрузку данных с магнитофона;
- В.Сироткин. Защита программ (взгляд на проблему);
- Newness — Описание программы Paracels Alkatraz Protection v2.0;
- Адаптация программ к системе TR-DOS. — Глава 7 — ксорка;
- Защита «Церикопик»
- ZX-Ревю 1992 №1-2 — Защита программ — исключение возможности остановки Basic программ;
- ZX-Ревю 1994 №2 — Возвращаясь к напечатанному — защита программ от несанкционированного копирования;
- TR-DOS для профессионалов и любителей — Файлы — запись при помощи «Magic Key». Особенности форматирования;
- Как защищают компьютерные игры от пиратов: с 80-х по настоящее время
- Раритетные схемы защиты от копирования игр и ПО — какими они были?
- Блог Вячеслава Медноногова.
Возможно, захочется почитать и это:
Разрабатывайте и развивайте свою игру (и не только) с помощью облачного хостинга для GameDev ↩