Как работать с защищёнными программами (тайники спектрума) 1990 г.

Глава 6. - символы смены атрибутов.


6. СИМВОЛЫ СМЕНЫ АТРИБУТОВ

Эту групгу управляющих символов составляют символы,
меняющие атрибуты:

После каждого из этих символов обязателен один байт,
уточняющий, о каком атрибуте идет речь, после символов INK
и PAPER это могут быть числа 0...9, после FLASH и BRIGHT-
0,1,8. после INVERSE и OVER - 0 и 1. Задание других значе-
ний вызывает сообщение "INVALID COLOR" и, естественно, пре-
рывание просмотра программы.

Высвечивая программу, защищенную управляющими символами
цветов, принимаем для себя следующую последовательность
действий. Например, если просматривая текст программы мы
встречаем код знака PAPER CTRL, то заносим в его второй
байт значение 0. если INK CTRL - значение 7, в остальные
управляющие цветами символы - значение в. Кроме того, уда-
ляем все мешающие знаки BACK SPACE (CHR$ 8 ) путем их заме-
ны пробелами (CHR$ 32). Так же ликвидируем знаки AT CTRL -
заменяем с помошью РОКЕ три байта символов на пробелы.
После такой корректуры программу можно уже листать без
всяких сложностей.

Если нужно прочитать программу загрузчика, то его не
обязательно очищать - важно узнать, что эта программа дела-
ет, каким образом загружается в память и запускает следую-
щие блоки, а не стараться, чтобы она работала "ровно" и
была написана "логично". Это тем более важно, что пока не
узнаешь точно программу, лучше не делать в ней никаких
изменении - одна ловушка может проверяться другой, поэтому
наилучший способ изучения программы -это анализ ее работы
шаг за шагом, считывая последовательные байты памяти:

0 BORDER 0: PAPER 0: INK 0: CLS 0: PRINT #0,"LOADING";:

FOR N=0 TO 2 0 STEP 4: BEEP 2,N: NEXT N: LOAD "" CODE:
PRINT AT 19,0 ;: LOAD "" CODE: PRINT AT 19,0;:
LOAD "" CODE : PRINT AT 19,0;: LOAD "" CODE: PRINT AT 19,0;:
RANDOMIZE USR 24064

Необходимо помнить о правильной интерпретации очередных
байтов:

сначала два байта номера строки:

затем два байта длины программы,которая, кстати, может быть
фальшивой;

затем текст: инструкция бейсика, потом ее параметры. за
каждым числом записываются CHR$ 14 и пять байтов, содержа-
щих значение этого числа;

за параметрами - двоеточие и следующая инструкция или ENTER
и новая строка программы.

Это было бы все, если бы речь шла об управляющих сим-
волах. Но есть еще одна вещь, которую требуется знать,чтобы
не иметь неприятностей с чтением бейсика. Речь идет об
инструкции DEF FN. Введем и внимательно рассмотрим строку:

10 DEF FN A(A,B$, С) =А + С
На первый взгляд она должна занять в памяти 19 байтов
(номер строки, ее длина, ENTER,а также 14 введенных симво-
лов) , но это не так. Интерпретатор после каждого параметра
функции поместил знак CHR$ 14 и дорезервировал зачем-то
следом еще пять байтов. Введем:

PRINT FN A (1 , "125" , 2)
и снова просмотрим содержимое памяти с адреса 23755. После
первого параметра в определении функции Haxoдятся
CHR$ 14, но после него последовательно расположились:
0,0,1,0,0, - что в памяти байтовой записи обозначает 1.
Также после третьего параметра функции находится CHR$ 14
и байты, содержащие число 2. После параметра В$ также
находится значение использованного параметра: CHRQ 14 и
пять байтов, которые последовательно содержат: первый -
для нас не имеет значения, второй и третий - содержат
адрес, по которому находится цепочка символов "12 5" (вызов
Функции был осуществлен в директивном режиме, следователь-
но этот адрес относится к области редактирования строки
бейсика) , а байты 4 и 5 - это длина цепочки- в нашем случае
она составляет три знака.

Необходимо помнить об этом, читая бейсик с помощью
РЕЕК, а не LIST. Иногда случается, что именно в этих бай-
тах, зарезервированных для действительных аргументов функции,
скрыты проверки, определяющие работоспособность программы,
или даже машинная программа, загружающая последующие блоки
( пример - BETA BASIC 1.0.).

завершение раздела немного о программах-загрузчиках.
Их задачей является считывание и запись всех блоков, сос-
тавлявших программу. Обычно они это делают способом.

максимально затрудняющим понимание их работы - так, чтобы
запуск программы другим способом, а не через загрузчик
(или вмешательство а программу) был невозможен. Посмотрим
на загрузчики, применяемые в большинстве программ фирмы
ULTINAME ( например ATK АТАС, KUINGHTLORE, PENTAGRAM,
NIGHT SHADE и т.д.). Выглядят они примерно так:
FOR N=23755 ТО РЕЕК 23627+256*РЕЕК 23628
PRINT N; " "; PEEK N; CHR$ РЕЕК N AND PEEK N>31
NEXT N

После такого загрузчика на ленте находятся пять следующих
блоков: экран, закодированный блок программы, а за ним
три коротеньких блока, защищающих программу: однобайтовый
(код инструкции JP(HL) ) , из нескольких байтов ( это проце-
дура, которая декодирует всю программу) , и последний двух-
байтовый, загружаемый по адресу 23627, или в переменную
FRAMES. Значение этой переменной увеличивается на 1 через
каждые 1/50 секунды. В машинной программе, запущенной с
помощью RANDOMIZE USR 24064. ее значение проверяется, и
если отличается от того, каким должно быть ( что означает,
что где-то после загрузки программа была остановлена на
какое-то время), наступает обнуление памяти компьютера.
Вмешательство в программу такого типа весьма просто.
Достаточно загрузить все блоки за исключением последнего,
а после просмотра программы или проведения в ней опреде-
ленных изменений (например,вписания РОКЕ) достаточно лишь
ввести:

LOAD "" CODE: RANDOMIZE USR 2 4 064
(но обязательно в одной строке, разделяя инструкции двое-
точием) , чтобы запустить программу.

Отдельной работой является декодирование программы,
или запуск процедур, декодирующих так, чтобы она вернулась
в бейсик. У читателя, знающего ассемблер, это не должно
вызвать затруднений. Однако к вопросу распространенности
этого типа защиты, особенно в пользовательских программах
(например ART STUDIO или THE LAST WORD) . мы еще вернемся.




  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Авторы - авторы и их адреса.
Лодырь - коды бессмертия к играм:CYBERNOID 1&2,NEBULUS,YETI, ZYNAPS, MIKIE, TRUENO-2, NEW DIZZY, HOLLYWOOD POKER.
Письмо - lzb^j77: "йоу, гайз! %)"
Credits - авторы газеты.
STORY - Научно-фантастическая дилогия "Червь". Книга первая: Князь тьмы (глава 1-3).

В этот день...   26 апреля