При подготовке новой дискеты к работе она форматируется, т. е. определяется количество дорожек, длина сектора, количество секторов на дорожке, нумерация секторов (то есть формируется ID маркер) и производятся другие операции. Если эти действия осуществляются с установкой параметров (длины сектора, нумерации секторов, величины межсекторного промежутка и др.), отличных от принятых по умолчанию для системы MS DOS, то такой процесс будем называть нестандартным форматированием дискеты.
Один из методов зашиты от копирования основывается на перестановке номеров секторов на дорожке, то есть вместо обычной последовательности 1,2,3,4,5,6,7,8,9 вводится, например, 1,5,3,7,9,8,6,2,4.
При выполнении программы на скопированной дискете ее контролирующая часть определяет порядок следования секторов на заданной дорожке. Так как дискета, на которую осуществлено копирование, была отформатирована обычными средствами, то нумерация секторов установлена последовательная.
В дальнейшем контролирующая часть программы осуществляет сравнение вычисленного порядка следования секторов с установленным на дистрибутивной дискете. И так как порядок номеров не совпадает, то выполнение программы прекращается.
Введение одинаковых номеров секторов на дорожке
Другой схемой защиты, основанной на идее нестандартного форматирования, является способ, при котором часть секторов на определенной дорожке нумеруется одинаково. Например, 1,2,3,3,3,6,7,8,9. В эти сектора записываются некоторые различные данные.
Контролирующая часть защищаемой программы должна определить, имеется ли на дискете несколько секторов с одинаковым номером. Для этого она посылает запрос чтения данных из сектора, номер которого повторяется (в нашем примере из сектора 3). В этом случае контроллер НГМД при выводе головки чтения/записи на сектор 3 может считать любой сектор с данным номером. Этот процесс повторяется заданное количество раз подряд, и очередные считанные данные сравниваются с полученными ранее. В случае их различия делается вывод о наличии на дискете секторов с одинаковым номером. Если же за заданное количество повторений цикла N различия в данных не найдено, то делается вывод о единственности сектора с номером 3.
Так как дискета, на которую осуществлено копирование, была отформатирована обычными средствами, то нумерация секторов на всех дорожках устанавливается последовательной. Контролирующая часть защищаемой программы организует проверку на наличие нескольких секторов с одинаковыми номером. И так как каждый номер сектора на заданной дорожке присутствует только один раз, то выполнение программы прекращается.
Введение межсекторных связей
В одном из методов защиты от копирования используется модификация изложенного выше способа, применяющего организацию нескольких секторов с одинаковым номером на заданной дорожке.
Суть метода в следующем. На выделенной дорожке дистрибутивной дискеты путем применения специальной программы организуется несколько секторов с одинаковым номером и в них записываются некоторые различные данные. Пусть, например, номера на 79 дорожке заданы как 2,2,1,4,5,6,7,8,9 и в первом секторе с номером 2 записано "C", а во втором секторе 2 - "B". Берется еще одна дорожка, например, 78, и сектор на ней, например, 1-ый, и в него записывается некоторая информация, пусть "А". В контролирующей части защищаемой программы организуется чтение сектора 1 на 78 дорожке и сразу же запрос чтения сектора 2 на 79 дорожке. Тем самым всегда обеспечивается переход к чтению информации из второго сектора с номером 2 на дорожке 79, то есть мы прочитаем биграмму "AB" с дистрибутивной дискеты.
Пусть было произведено "пиратское" копирование дискеты с защищаемой программой на обычно отформатированную дискету. Контролирующая часть программы считывает 1-ый сектор с 78 дорожки. Далее идет запрос чтения сектора 2 на 79 дорожке. Так как сектора на "пиратской" дискете пронумерованы стандартно, то есть 1,2,3,4,5,6,7,8,9, то после запроса сектора 2 будет получено значение "C". Следовательно, будет прочитана биграмма "AC".
Таким образом, контролирующая часть защищаемой программы устанавливает, что если дискета не дистрибутивная, то прочитывается биграмма "AC", означающая, что считан сектор 2 с 79 дорожки, который находится на ином физическом расстоянии от начала дорожки по сравнению с расстоянием для сектора 2 на дистрибутивной дискете, когда считывается биграмма "AB". Программа прерывается.
Изменение длины секторов
Еще одна схема защиты, основанная на методе нестандартного форматирования, использует изменение длины сектора. Напомним, что стандартная длина сектора, с которой работает MS DOS по умолчанию, - 512 байт, при этом на дорожке размещается 9 секторов. В процессе специального форматирования дискеты на заданной дорожке длина секторов устанавливается либо 128, либо 256 байт.
Введенное изменение длины секторов на заданной дорожке определяется контролирующей частью защищаемой программы. Это осуществляется, например, путем обращения к сектору с максимальным номером, либо проверкой того, что длина секторов на указанной дорожке 128 (или 256) байт.
Стандартно отформатированная дискета, на которую проведено "пиратское" копирование защищаемой программы, имеет длину секторов на всех дорожках 512 байт (по 9 секторов на дорожке). В ходе выполнения защищаемой программы ее контролирующая часть осуществляет проверку длины секторов на заданной дорожке. Если контролирующая часть использует способ обращения к сектору с максимальным номером (большим 9), то такой сектор найден не будет (так как их только 9) и выполнение программы прекращается.
Аналогично работает контролирующая часть и в способе, в котором осуществляется проверка, что длина секторов 128 (или 256) байт.