Обсуждались разные защиты при загрузке с магнитофона, но не нашел темы про защиту программ на дискетах.
Уже не помню, что это была за программа, но с её помощью я узнал, что мой (венгерский) дисковод собран "криво".
После запуска программы, головки дисковода "бежали" за пределы 80-ой дорожки, после чего, программа запускалась.
Это явно намекало, что за пределами рабочих дорожек записано нечто, сообщающее программе о её легальности на данной дискете.
На моём дисководе (как выяснилось позднее), головки добегали до 81-ой дорожки, ударялись о выпирающую шайбу крепления чего-то там, и отскакивали на предыдущую дорожку. В результате эта защищённая программа просто зависала, через некоторое время дисковод (вроде бы) останавливался, и на этом "кино заканчивалось".
Я конечно в своём дисководе, подпилил эту шайбу, и головки перестали от неё отскакивать, программа стала запускаться.
Кто помнит, что за программы защищались от копирования записью защиты на дорожках после 80-ой ?
И кто помнит, какие ещё были защиты на дискетах, а может и сам какие-то защиты делал для дисковых программ ?
Improver
29.05.2020, 09:26
Я слышал про этот метод защиты, т.н. запись в "инженерные цилиндры" дискеты, но только на ПК. Скорее всего на Векторе повторили идею.
Расскажу, про защиту от копирования, которую я делал для своей программы в начале 90-ых.
Поскольку это была защита на дискету, да ещё и для Вектора, практического интереса она конечно уже не представляет.
Да и защитами программ, за прошедшие с тех пор почти 30 лет, я больше не занимался и не интересовался.
В идее написать защиту сплелись интерес изучить запись/чтение дискет и некоторая обида, на то что я ещё не дописал программу, а её бета-версия уже появилась в прайсе какого-то "центра", в городе, который я даже на карте не сразу найду.
Доверия к бета-тестерам в тот момент стало значительно меньше.
Итак.
Что я знал приступая к разработке защиты, это то, что уже есть программы копировщики дискет, которые используя команды "Чтение дорожки" и "Запись дорожки" спокойно клонируют дискеты, и с этим что-то нужно было делать.
Уже столкнувшись с защитой программы, которая гоняла головки на дорожки дискеты за 80-ую, я прикинул, что это слишком очевидное проявление. Значит защита должна проверяться не заметно. Самое простое, записать метку на 8-ю дорожку, туда где хранится директорий дискеты, и проверять метку именно при чтении каталога дискеты.
Соответственно, проверка защиты не должна находиться в начале программы (где её легко найти), и срабатывать защита должна не сразу после проверки, а эффект должен быть "отложенным".
Изучая чтение с дискеты, обратил внимание, что сектор на дискете 1КБ, и он читается за один раз в буфер ДОСа, а потом выдаётся блоками по 128 Байт. А так-же обратил внимание, что при копировании файла штатными средствами, копируется в новый файл столько блоков (по 128Байт), сколько их указано в записи директория дискеты.
Вывод напрашивался сам, поместил подпрограмму проверки и обслуживающие её алгоритмы в конец файла, а после записи программы на "защищенную" дискету, уменьшал количество блоков программы. Это делала специальная утилита, которая ставила метку на дискету и записывала саму программу на дискету.
В результате, если просто штатными средствами скопировать программу на КвазиДиск или другую дискету, то программа копируется не полностью, и её запуск в таком виде приводил к сбою ДОС.
Если же программа запускалась с родной дискеты, то в памяти Вектора был тот не достающий кусок, где он был и как я его подтягивал, я уже не помню.
Это был первый уровень защиты, как я извращался, что-бы спрятать обращение к подпрограмме проверки метки и кодировал саму подпрограмму, подробностей уже не помню. Помню, что обращение прятал глубоко в стек, и в явном виде адрес начала подпрограммы в ассемблерном тексте не был виден. И первоначально как-то модифицированный код, просто так не дизассемблировался.
Всё это извращение было направлено только на то, чтобы спрятать чтение дискеты и анализ наличия метки. Т.к. было ясно, что какая бы ни была метка, если станет понятно, в чём защита, повторить её на любой другой дискете не составит особого труда.
Я уже писал, что защита срабатывала отложенно. Если метка не была обнаружена, в основной код программы вносилось изменение, которое через некоторое время приводило к заполнению памяти "мусором" с помощью стека, т.е. сбоил ДОС (если я правильно помню). Ни каких сообщений, что копия программы не официальная.
Собственно о метке на дискете.
Проведя эксперименты с записью и чтением дорожки на дискете, я заметил, что даже на одной дискете, на одном дисководе запись дорожки всегда происходила "со смещением".
Изучив формат дорожки, обнаружил большую область синхробайт в начале дискеты.
Оказалось, что если начать запись дорожки (уже рабочей дискеты с файлами в каталоге), и прервать запись на этой первой области синхробайт, то читаемость дискеты не пострадает. Дискета штатными средствами отлично читалась, писалась, в общем работала как обычно.
Но если попытаться прочитать дискету командой "Чтение дорожки", то после того байта на котором была прервана запись, читался сплошной "мусор". Из-за сдвига фазы (как я подозреваю) у прерванной записи и родного форматирования дискеты, синхронизация не восстанавливалась и информация всей дорожки терялась. Соответственно, не возможно было скопировать дискету штатными копировщиками.
Сама "метка" конечно примитивна, читалось определённое кол-во байт командой "Чтение дорожки", и проверялось наличие не правильных синхробайт, появлявшихся после байта на котором прекращалась запись дорожки при её маркировке.
сектор на дискете 2КБ
Насколько помню стандартный для вектора (и не только для вектора) вариант - сектора по 1 Кб.
Насколько помню стандартный для вектора (и не только для вектора) вариант - сектора по 1 Кб.
Да, конечно сектор 1КБ. И по 5 секторов на каждой стороне дорожки.
2КБ это уже из другой оперы.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot