Техника - молодёжи 1991-11, страница 52

Техника - молодёжи 1991-11, страница 52

Вячеслав АЛЕКСЕЕВ,

инженер - программист

Назовите свой адрес и номер...

(Окончание. Начало см. в «ТМ» № 10)

ВКЛЮЧЕНИЕ В БЕИСИК-ПРО-ГРАММУ ПОДПРОГРАММЫ В КОДАХ читатели сочли самым легким заданием, ведь у всех вариантов интерпретатора бейсика есть соответствующий оператор передачи управления на подпрограмму в кодах, например, USR adr, CALL adr (или CALL USR(adr,n), где n —число, заносимое в регистр HL. — Ред.), но хитрость вопроса заключалась не в способе запуска подпрограмм и не в способе перезаписи кодов из блока DATA оператором РОКЕ в соответствующие ячейки ОЗУ, а в том — куда эти коды записывать, чтобы не стереть что-нибудь нужное. И только Владимир Смолий из Москвы («Микроша», ZX Spectrum) обратил на это внимание. Он предложил записывать коды в область, свободную от бейсик-системы, для чего необходимо изменить адрес доступного бейсику пространства. Хорошо В.Смолию, он знает адрес ячейки, где хранится максимально допустимый адрес ОЗУ, которым может распоряжаться бейсик-система его ПЭВМ. А если у вас неизвестный ПК? Так куда заносить машинные коды? От читателей мы не получили ответа. И потому предлагаем «свой» алгоритм, хорошо знакомый профессиональным, программистам: необходимо оператором DIM зарезервировать целочисленный или символьный массив с нужным количеством байт, определить его местоположение в памяти и по найденным адресам заносить коды подпрограмм. Данный алгоритм имеет много преимуществ по сравнению с другими. Каких? Попробуйте разобраться самостоятельно. (В ПК Enterprise эта задача решается максимально просто: область памяти для размещения подпрограмм в кодах резервируется оператором ALLOCATE п, где п — длина подпрограммы в байтах. — Ред.)

ЗАЩИТА ПРОГРАММ оказалась крепким орешком. И немудрено. Если для профессиональных ПК разработа

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

Для начала приведем некоторые известные профессиональные способы защиты, чтобы читатель смог самостоятельно определить, что годится для бытовых ПК, а что слишком сложно для них. Заодно выясним, когда защита необходима и в каких случаях «овчинка выделки не стоит».

Прежде всего уясним следующее. Проблема защиты программных продуктов от несанкционированного копирования актуальна во всем мире. У нас —в особенности, поскольку труд программиста в СССР законодательно никак не защищен. Представим ситуацию. Некий коллектив программистов разработал пакет прикладных программ для решения производственных задач. Группа на это затратила, скажем, год, вносила арендную и амортизационную плату за машинное время, привлекала (естественно, за вознаграждение) консультантов. И вот пакет программ готов. Пусть его создание обошлось в 50 — 60 тыс. рублей. Разумеется, у коллектива авторов уже есть несколько заказчиков, для которых они, собственно, и разрабатывали данный пакет. Авторы подсчитали, что, продав десяти заказчикам пакеты программ по 8—10 тыс. рублей за копию, они оправдают вложенные средства. Но заказчики, в свою очередь, не спешат выполнять условия договора, более того, они сносятся д^уг с другом, в складчину покупают одну копию и тиражируют ее. Что прикажете делать коллективу программистов? Деньги-то на создание программы уже истрачены, дальнейших поступлений не предвидится. И в суд подавать бесполезно, программа не вещь, попробуй докажи, что ее украли. Другое дело, если она защищена. Стали заказчики ее размножать, а она «не размножается», а если и копируется, то в ходе

работы выдает неверные результаты, или хуже того — вирусы запускает, другие программы портит. После такого «дешевого» приобретения десять раз подумаешь, что дороже — честная покупка или «бесплатная копия»

Но программа программе рознь. На алгоритм распечатки таблицы умножения никто защиту ставить не станет. А для серьезных разработок существуют профессиональные приемы. Например, такие.

У многих ПЭВМ в ПЗУ зашиты тип, заводской номер, дата изготовления компьютера. Задача программиста — при передаче пакета программ определить эти атрибуты, вписать их в известное одному ему место программы и обеспечить при каждом запуске сравнение атрибутов ПЭВМ с теми, что вписаны в программу. На другом компьютере у данного пакета сработает защита (атрибуты не совпадут).

Поскольку результатом работы производственных программ является некий документ (отчет, смета, чертеж и т.д.), как правило, содержащий наименование организации-заказчика, чаще всего устраивают проверку на совпадение этого имени с аналогичным именем, хранящимся в «недрах» программы в зашифрованном виде. Их несоответствие — признак несанкционированной передачи программы другой организации.

Стандартный GW-BASIC на IBM-совместимых ПК уже содержит встроенный кодировщик бейсик-про-грамм. При передаче демонстрационных версий достаточно задать соответствующую опцию, и получатель не сможет просмотреть или распечатать текстовку, внести изменения в программу на бейсике, хотя сама программа будет работать как ни в чем не бывало (впрочем, на сегодня уже известны как минимум два способа расшифровки таких программ, хотя сам алгоритм кодировки достаточно сложен: перемешивание, замещение и перестановка байтов по трем ключам).

50