Введение
Битовый нибблер, или нибблер, — это компьютерная программа, предназначенная для копирования данных с дискеты по одному биту за раз. Она работает на очень низком уровне, напрямую взаимодействуя с аппаратным обеспечением дискового накопителя, чтобы обойти схему защиты от копирования, в которой могут быть сохранены данные на дискете. В большинстве случаев программное обеспечение нибблер всё ещё анализирует данные на уровне байтов, обращаясь к битовому уровню только при работе с метками синхронизации (синхронизациями), нулевыми интервалами и другими заголовками секторов и дорожек. По возможности, нибблеры работают с низкоуровневыми форматами кодирования данных, используемыми дисковой системой, такими как групповое кодирование (GCR – Apple, Commodore), частотная модуляция (FM – Atari) или модифицированная частотная модуляция (MFM – Amiga, Atari, IBM PC).
Обзор
Пиратство программного обеспечения стало вызывать опасения, когда дискеты стали распространенным носителем информации. Простота копирования зависела от системы; Джерри Пурнелл писал в BYTE в 1983 году, что "CP/M не предусматривает защиты от копирования", поэтому его пользователи "не особо беспокоились" об этом, в то время как "пользователи Apple всегда сталкивались с этой проблемой. То же самое касалось тех, кто использовал TRS DOS, и, насколько я понимаю, MS DOS имеет функции защиты от копирования". Схемы защиты от копирования Apple и Commodore 64 были чрезвычайно разнообразными и изобретательными, поскольку большая часть операций чтения и записи дискет контролировалась программным обеспечением (или прошивкой), а не аппаратным обеспечением. Пурнелл не любил защиту от копирования и, за исключением игр, отказывался рецензировать программное обеспечение, которое её использовало. Он не считал её полезной, написав: "На каждую схему защиты от копирования найдется хакер, готовый её обойти. Большинство из них используют так называемые 'ниббл'-копировальные устройства, которые пытаются проанализировать исходный диск и затем сделать копию". К 1980 году для Apple II был представлен первый 'ниббл'-копир Locksmith. Эти копировальные устройства воспроизводили дискеты, защищенные от копирования, целиком дорожками, игнорируя разметку секторов. Это было сложнее, чем кажется, по двум причинам: во-первых, диски Apple не использовали индексное отверстие для обозначения начала дорожки; их дисководы даже не могли его обнаруживать. Дорожки могли начинаться где угодно, но скопированная дорожка должна была иметь этот "сварной шов записи", который всегда приводил к потере или дублированию некоторых битов из-за колебаний скорости, примерно в том же месте (не используемом для полезной нагрузки данных), что и на оригинале, иначе она не работала бы. Во-вторых, Apple использовала специальные байты "самосинхронизации" для обеспечения согласованности между контроллером диска и компьютером относительно того, где заканчивается один байт и начинается следующий на диске. Эти байты записывались как обычные байты данных, за которыми следовала немного более длинная, чем обычно, пауза, которую было сложно надёжно обнаружить при чтении; тем не менее, байты самосинхронизации нужно было уловить примерно правильно, поскольку без их присутствия в нужных местах копия не работала бы, а при их избыточном присутствии дорожка не поместилась бы на целевой диск.
Яблоко II
Локсмит копировал диски Apple II, используя тот факт, что поля синхронизации между секторами почти всегда состояли из длинной строки байтов FF (шестнадцатеричные все биты '1'). Он находил самую длинную строку FF, которая обычно располагалась между последним и первым секторами на каждой дорожке, и начинал запись дорожки посередине этой строки; также он предполагал, что любая длинная строка байтов FF является синхропоследовательностью и вставлял необходимые короткие паузы после записи каждого такого блока в копию. Иронично, но Локсмит не мог скопировать сам себя. Первый Локсмит измерял расстояние между сектором 1 каждой дорожки. Инженеры по защите от копирования быстро разобрались в том, что делает Локсмит, и начали использовать ту же технику для противодействия ему. Локсмит ответил, добавив возможность воспроизводить выравнивание дорожек и предотвратил своё копирование, встроив специальную последовательность нибблов, обнаружение которой останавливало процесс копирования. Генри Робертс (CTO компании Nalpeiron), аспирант факультета компьютерных наук Университета Южной Каролины, провёл реверс-инжиниринг Локсмита, обнаружил эту последовательность и распространил информацию среди примерно 7-8 человек, занимавшихся разработкой защиты от копирования в то время. В течение некоторого времени Локсмит успешно обходил практически все существующие системы защиты от копирования. Следующим шагом стала диссертация Генри Робертса по защите программного обеспечения от копирования, в которой был предложен способ замены синхронизирующего поля Apple, состоящего из FF, на случайные последовательности байтов. Поскольку аспирант часто обсуждал вопросы защиты от копирования с инженером Apple, занимающимся этой проблемой, Apple разработала систему защиты от копирования, использующую эту технику. Генри Робертс затем написал программу, конкурирующую с Локсмитом, – Back It UP. Он разработал несколько способов обхода этой защиты, и в конечном итоге был найден метод прямого чтения самосинхронизирующихся полей, независимо от содержащихся в них нибблов. Эта борьба между инженерами по защите от копирования и теми, кто обходил защиту, продолжалась до тех пор, пока Apple II не устарела и не была заменена IBM PC и его клонами.
Комодор 64
Частью программного обеспечения для копирования дисков Fast Hack'em был нибблер, использовавшийся для создания копий коммерческого программного обеспечения Commodore 64, защищенного от копирования. При использовании нибблера копирование диска выполнялось на очень низком уровне, побитово, а не с помощью стандартных команд Commodore DOS. Это эффективно нейтрализовало преднамеренные ошибки диска, нестандартную структуру дорожек и другие способы защиты от копирования. Копирование защищенного диска занимало около 60 секунд при копировании непосредственно на другой дисковод или 3 минуты (плюс несколько замен дисков) при использовании одного дисковода. Super Kit/1541 продавала компания Prism Software примерно в 1986 году, он был написан Джо Питером, который также разработал Wrap Speed и некоторые средства защиты VMax. В комплект входили различные копировщики, такие как Normal Copier, Nibbler, File Copier, Super Nibbler, Disk Surgeon и редакторы дисков (Disk Editors). Параметры также были доступны на стороне B (см. список ниже). Два дисковода можно было соединить последовательно, и после программирования компьютер можно было отключить, позволив дисководам выполнять копирование, проверяя наличие диска примерно через 20 секунд. Интересно, что программа могла скопировать саму себя, но не могла скопировать копию, поскольку длина синхронизации оригинала была меньше, чем у копии, и загрузчик проверял эту длину, в результате чего копия имела значительно более длинную синхронизацию. Версия V3 была позже выпущена автором в общественное достояние (PD). NIBtools – это современное (около 2006 года) программное обеспечение с открытым исходным кодом, выполняющее ту же функцию и предназначенное в основном для архивирования данных со старых дискет, которые могут быть защищены авторским правом или повреждены. Вместо чтения побитово можно также считывать множество блоков по 1,25 КБ, а затем собирать их вместе способом, аналогичным секвенированию дробовиком, что необходимо для использования медленных соединений на Commodore 1541. Rapidlok – это схема защиты от копирования, широко используемая многими компаниями, и ни одна ее версия так и не была успешно скопирована. Они использовали значение $00 между секторами, из-за чего копировальные устройства работали нестабильно, поскольку это было недопустимым значением GCR.