PDA

Просмотр полной версии : Вектор-06Ц, защита от копирования на дискетах.



KTSerg
29.05.2020, 08:07
Обсуждались разные защиты при загрузке с магнитофона, но не нашел темы про защиту программ на дискетах.

Уже не помню, что это была за программа, но с её помощью я узнал, что мой (венгерский) дисковод собран "криво".
После запуска программы, головки дисковода "бежали" за пределы 80-ой дорожки, после чего, программа запускалась.
Это явно намекало, что за пределами рабочих дорожек записано нечто, сообщающее программе о её легальности на данной дискете.

На моём дисководе (как выяснилось позднее), головки добегали до 81-ой дорожки, ударялись о выпирающую шайбу крепления чего-то там, и отскакивали на предыдущую дорожку. В результате эта защищённая программа просто зависала, через некоторое время дисковод (вроде бы) останавливался, и на этом "кино заканчивалось".

Я конечно в своём дисководе, подпилил эту шайбу, и головки перестали от неё отскакивать, программа стала запускаться.

Кто помнит, что за программы защищались от копирования записью защиты на дорожках после 80-ой ?
И кто помнит, какие ещё были защиты на дискетах, а может и сам какие-то защиты делал для дисковых программ ?

Improver
29.05.2020, 09:26
Я слышал про этот метод защиты, т.н. запись в "инженерные цилиндры" дискеты, но только на ПК. Скорее всего на Векторе повторили идею.

KTSerg
30.05.2020, 07:09
Расскажу, про защиту от копирования, которую я делал для своей программы в начале 90-ых.
Поскольку это была защита на дискету, да ещё и для Вектора, практического интереса она конечно уже не представляет.
Да и защитами программ, за прошедшие с тех пор почти 30 лет, я больше не занимался и не интересовался.

В идее написать защиту сплелись интерес изучить запись/чтение дискет и некоторая обида, на то что я ещё не дописал программу, а её бета-версия уже появилась в прайсе какого-то "центра", в городе, который я даже на карте не сразу найду.
Доверия к бета-тестерам в тот момент стало значительно меньше.

Итак.


Что я знал приступая к разработке защиты, это то, что уже есть программы копировщики дискет, которые используя команды "Чтение дорожки" и "Запись дорожки" спокойно клонируют дискеты, и с этим что-то нужно было делать.
Уже столкнувшись с защитой программы, которая гоняла головки на дорожки дискеты за 80-ую, я прикинул, что это слишком очевидное проявление. Значит защита должна проверяться не заметно. Самое простое, записать метку на 8-ю дорожку, туда где хранится директорий дискеты, и проверять метку именно при чтении каталога дискеты.
Соответственно, проверка защиты не должна находиться в начале программы (где её легко найти), и срабатывать защита должна не сразу после проверки, а эффект должен быть "отложенным".
Изучая чтение с дискеты, обратил внимание, что сектор на дискете 1КБ, и он читается за один раз в буфер ДОСа, а потом выдаётся блоками по 128 Байт. А так-же обратил внимание, что при копировании файла штатными средствами, копируется в новый файл столько блоков (по 128Байт), сколько их указано в записи директория дискеты.
Вывод напрашивался сам, поместил подпрограмму проверки и обслуживающие её алгоритмы в конец файла, а после записи программы на "защищенную" дискету, уменьшал количество блоков программы. Это делала специальная утилита, которая ставила метку на дискету и записывала саму программу на дискету.
В результате, если просто штатными средствами скопировать программу на КвазиДиск или другую дискету, то программа копируется не полностью, и её запуск в таком виде приводил к сбою ДОС.
Если же программа запускалась с родной дискеты, то в памяти Вектора был тот не достающий кусок, где он был и как я его подтягивал, я уже не помню.
Это был первый уровень защиты, как я извращался, что-бы спрятать обращение к подпрограмме проверки метки и кодировал саму подпрограмму, подробностей уже не помню. Помню, что обращение прятал глубоко в стек, и в явном виде адрес начала подпрограммы в ассемблерном тексте не был виден. И первоначально как-то модифицированный код, просто так не дизассемблировался.
Всё это извращение было направлено только на то, чтобы спрятать чтение дискеты и анализ наличия метки. Т.к. было ясно, что какая бы ни была метка, если станет понятно, в чём защита, повторить её на любой другой дискете не составит особого труда.
Я уже писал, что защита срабатывала отложенно. Если метка не была обнаружена, в основной код программы вносилось изменение, которое через некоторое время приводило к заполнению памяти "мусором" с помощью стека, т.е. сбоил ДОС (если я правильно помню). Ни каких сообщений, что копия программы не официальная.

Собственно о метке на дискете.
Проведя эксперименты с записью и чтением дорожки на дискете, я заметил, что даже на одной дискете, на одном дисководе запись дорожки всегда происходила "со смещением".
Изучив формат дорожки, обнаружил большую область синхробайт в начале дискеты.
Оказалось, что если начать запись дорожки (уже рабочей дискеты с файлами в каталоге), и прервать запись на этой первой области синхробайт, то читаемость дискеты не пострадает. Дискета штатными средствами отлично читалась, писалась, в общем работала как обычно.
Но если попытаться прочитать дискету командой "Чтение дорожки", то после того байта на котором была прервана запись, читался сплошной "мусор". Из-за сдвига фазы (как я подозреваю) у прерванной записи и родного форматирования дискеты, синхронизация не восстанавливалась и информация всей дорожки терялась. Соответственно, не возможно было скопировать дискету штатными копировщиками.
Сама "метка" конечно примитивна, читалось определённое кол-во байт командой "Чтение дорожки", и проверялось наличие не правильных синхробайт, появлявшихся после байта на котором прекращалась запись дорожки при её маркировке.

ivagor
30.05.2020, 08:29
сектор на дискете 2КБ
Насколько помню стандартный для вектора (и не только для вектора) вариант - сектора по 1 Кб.

KTSerg
30.05.2020, 08:55
Насколько помню стандартный для вектора (и не только для вектора) вариант - сектора по 1 Кб.
Да, конечно сектор 1КБ. И по 5 секторов на каждой стороне дорожки.
2КБ это уже из другой оперы.