Техника - молодёжи 1991-11, страница 53Организуют проверку и на взаимное расположение отдельных частей большого пакета на дискете: в программу вносятся номера дорожек и блоков, с которых должен начинаться каждый отдельный файл. Бывает, что автор вносит изменения и в организацию самой дискеты: меняет стандартные размеры блоков, метит отдельные блоки дискеты, занятые программой, как сбойные, а программа при запуске сначала восстанавливает структуру файлов, а по окончании работы опять переделывает в нечитаемый для операционной системы формат. Таковы некоторые варианты защиты на программном уровне. Существует защита и на физическом. Например, так называемый «плавающий бит». В определенном месте программы в нужном байте затирается один бит таким образом, чтобы он считывал ся неустойчиво: то как логический О, то как 1. При запуске программа десятикратно считывает этот бит. Если считывание происходит неустойчиво (например, три раза прочитан 0 и семь раз 1) — значит, все в порядке. Если же результат один и тот же (только 1 или только 0), значит, программу скопировали, поскольку только при перезаписи неустойчивое состояние этого бита будет восстановлено: прочтет его ПЭВМ как 1, ну и запишет 1, прочтет как 0 — и запишет 0. Определить наличие в программе «плавающего бита», а тем более найти его и скопировать — вещь почти невозможная (необходимо специальное оборудование). Другой способ. На дискете организуется файл данных со всей необходимой программе информацией. Где-нибудь в середине файла наносится механическое повреждение (например, дискета прокалывается иглой). Программа же использует только начальную и конечную части файла и потому к дефекту не обращается. При копировании операционная система дойдет до повреждения и далее копировать этот файл откажется, ведь она должна будет полностью переписать его, сохранив содержимое и размеры, в том числе и нечитаемую середину Так что данный пакет программ будет работать только с переданной автором дискеты. На бытовых компьютерах подобные приемы в большинстве своем не годятся, но если хорошенько поискать, то можно найти свои, совершенно уникальные, способы защиты от копирования. У многих бытовых ПК запуск про 4* грамм осуществляется вручную, после считывания с магнитной ленты. В промежуток между загрузкой и запуском пользователь может просмотреть листинг, переписать программу своему приятелю, изменить фамилию автора на свою, внести любые другие переделки. Хотя у некоторых ПЭВМ и существует автозапуск (ZX Spectrum, Atary и т.д.), пользователь может отключить этот режим. Поэтому защиту следует строить таким образом, чтобы загружаемый с ленты блок был трудночитаем, а после его запуска осуществлял бы все необходимые защитные действия. Этого можно достичь, если программу разделить на две части. Первая из них и является блоком защиты, под управлением которого счи-тывается и автоматически запускается вторая, основная часть программы. Блок защиты следует писать на языке ассемблер, чтобы усложнить разбор, да и многие защитные эффекты бейсику «не по зубам». А перезагрузить коды из блока DATA в ОЗУ и запустить подпрограмму можно и на бейсике. Какие функции должен выполнять блок защиты? Прежде всего блокировку команд LIST, SAVE, EDIP, BREAK. Если не получится, попытайтесь исправить вектора передачи управления в бейсик-системе с этих команд на команды NEW или DELETE. В некоторых случаях работу программы можно прервать комбинацией Ctrl+C в момент запроса INPUT или вводом некорректных данных, значит, и эти ситуации следует предусмотреть в блоке защиты. Пользователь может попытаться загрузить сразу вторую часть, без первой, защитной, поэтому необходима кодировка программы, декодирование которой тоже выполняет защитный блок. Вот некоторые приемы, найденные Владимиром Смолием для ПЭВМ ZX Spectrum: РОКЕ 23613,РЕЕК 23700-5 маскирует прерывание по BREAK; РОКЕ 23755,Х:РОКЕ 23756,N (где N -номер строки) — изменяет (путает) нумерацию строк на величину X, оставляя их на прежних местах. Код «8» («забой»), завершающий строки, не портит программу, но зато затирает символы, выводимые на экран по команде LIST. Можно искусственно увеличить параметр «длина строки» в бейсик-системе до 65 Кб, тогда под первую строку будет отведена вся память ПЭВМ, а на остальную часть программы просто не хватит места. Есть и другие возможности, и если вы хорошенько повозитесь со своим компьютером, то найдете много хитроумных приемов. Тем не менее Владимир утверждает, что любая защита бессильна перед копировщиком типа LERM-7, но это не так. Если уж мы создали специальную программу, блокирующую основные команды бейсик-системы, то что нам мешает поручить этому же блоку чтение защищаемой программы с магнитной ленты? Пусть, например, через каждые 256 или 512 байт он меняет скорость обмена. У большинства ПК такая возможность имеется: есть ячейка ОЗУ, содержимое которой устанавливает скорость приема информации. В крайнем случае можно составить свою загрузочную подпрограмму, использовав в качестве основы дизассемблирован-ную системную подпрограмму ввода/вывода. Одновременно с чтением блок защиты сможет декодировать зашифрованную программу, например, к четному байту добавлять единичку, а из нечетного — вычитать. Разумеется, для записи всего этого комплекса на ленту понадобится аналогичная записывающая программа, но именно этого мы и добиваемся — запись на пленку сможет осуществить только автор, но не пользователь. Разумеется, для грамотного составления такого блока необходимо полностью разобраться в собственном интерпретаторе бейсика, его модификациях, знать точки входа системных подпрограмм ввода/вывода (вот и пригодилось решение первого вопроса нашего задания), уметь составлять, загружать и запускать в бейсик-системе подпрограммы, написанные на ассемблере (а это был второй вопрос). Зато на один такой «замок» можно «запереть» любую разработанную вами программу. В заключение отметим, что полностью надежной защиты (кроме законодательной), конечно же, не существует, не случайно у нас сейчас буйно расплодились кооперативы, которые специализируются именно на снятии защиты с западных программных продуктов («взломе» программ), необходимых большинству пользователей, но слишком дорогих в розничной торговле. Поэтому при создании защитного блока следует исходить из простых условий: его стоимость не превысит цену защищаемой программы, а снятие защиты обойдется дороже честно приобретенной копии. 51 |