logo search
ZX-Review-1992-01-12

1.2 Смещение системной переменной PROG.

Многие из Вас, вероятно, не раз убеждались в справедливости принципа, "чем прощетем надежнее". Этот принцип был известен издавна и не раз подтверждал себя на практике. Актуальным он является и для нас, потому что темой нашего разговора будет метод, основанный на смещении системной переменной PROG. Метод, на первый взгляд достаточно простой, но, тем не менее, достаточно эффективный. Рассмотрим более подробно принцип его применения для защиты компьютерных программ.

Как Вам уже, вероятно, известно, Бейсик, в стандартном "Спектруме (без подключенной периферии) начинается с адреса 23755. Об этой свидетельствует содержимое системной переменной PROG (23635). Таким образом, практически всегда Бейсик в компьютере начинается с одного и того же адреса памяти. Однако, такое положение вещей достаточно легко изменить, если осуществить изменение системной переменной PROG. Рассмотрим, что это нам дает.

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

Для начала вы создаете специальную программу в машинных кодах, которая осуществляет изменение системной переменной PROG. После этого Вам понадобится совместить ее с программой на Бейсике (о том, как это сделать, было подробно написано в т.1 гл.1). Конечно, можно достаточно просто изменить содержимое PROG и из Бейсика путем применения POKE, однако предпочтительней закамуфлировать выполненные операции, а еще лучше замаскировать адрес старта программы в кодах одним из методов, предложенных в т.1 гл. 4 (Напомню что основное предпочтение отдавалось там изменению содержимого числового значения, расположенного после управляющего кода 14). Заканчивает данную программу на Бейсике команда LOAD"".

Как Вы уже, вероятно, догадались, данная Бейсик программа служит исключительно для подготовки к загрузке Вашей специальной программы загрузчика. Причем Ваш загрузчик в машинных кодах ассемблирован таким образом, чтобы работать только в новой области (после изменения системной переменной PROG). Адрес старта загрузчика, вполне естественно, тоже будет замаскирован и будет указывать на точку расположения вашей исходной процедуры после изменения системной переменной. Теперь Вам осталось только совместить исходную программу в машинных кодах с новой Бейсик программой и после выяснения адреса реального старта осуществить необходимые изменения чисел после функции RANDOMIZE USR.

Давайте теперь рассмотрим, как работает данная защита. После проведения вышеописанных работ мы имеем две Бейсик программы, в каждую из которых встроен блок машинных кодов. Причем процедура в кодах, встроенная в первую Бейсик программу, осуществляет изменение системной переменной PROG, в то время как вторая процедура в кодах, встроенная во вторую Бейсик программу, является ничем иным, как исходной программой загрузчиком, которую Вы и собираетесь защитить от несанкционированного