|
Micro
#08
05 сентября 1998 |
|
Адаптация программ к TR-DOS - Часть 3

╔════********************************════╗
╠═ АДАПТАЦИЯ ПРОГРАММ К СИСТЕМЕ TR-DOS. ═╣
╠═ ═ ЧАСТЬ 3. ═ ═╣
╚════********************************════╝
────────────────────────────────
ГЛАВА 1.
= КАК БОРОТЬСЯ С БЕЙСИКОМ. =
(Продолжение)
──────────────────────────
Не менее распространенным приемом защи-
ты бейсик-программ является добавление в
строки бейсик-программы различных управ-
ляющих кодов:INK, PAPER, AT, TAB и других.
Для примера поясню разницу между кон-
трольным кодом INK и оператором INK. Если
при выводе листинга программы бейсик-сис-
тема встречает оператор INK, она честно
представляет его на экране, не производя
никаких действий. Если же встречается кон-
трольный код INK, то следующий за ним байт
бейсик-система воспринимает как код цвета
тона и продолжает вывод листинга этим цве-
том. Все сказанное справедливо для PAPER,
FLASH, TAB и др. Необходимо учесть только,
что позиция вывода на экран задается двумя
байтами, следующими за контрольным кодом
AT и TAB, а не одним, как для других кон-
трольных кодов.
Большинство контрольных кодов можно
удалить клавишей Delete, вызвав бейсик-
строку на редактирование. Поочередно нажи-
майте клавиши <<курсор вправо>> и Delete,
и если авторы защиты использовали коррект-
ные значения контрольных кодов, то Вы без
осложнений рано или поздно получите на эк-
ране вполне осмысленную информацию. Но бы-
вает и так: когда, например, бейсик-интер-
претатор просят вывести листинг программы
121-м цветом в знакоместо с координатами
(240,86), тогда он просто-напросто прекра-
щает вывод листинга на экран, а при попыт-
ке редактирования строки начинает истошно
орать. В этом случае нужно сначала "зат-
кнуть ему рот" оператором POKE 23608,0 и
далее действовать по приведенной схеме.
──────────────────────
Еще одна крайне неприятная вещь,которая
может помешать справиться с программой при
адаптации ее на диск, ─ это нехватка памя-
ти. Она может возникнуть из-за того, что,
во-первых, TR-DOS резервирует 112 байт для
своих системных переменных; во-вторых,опе-
раторы загрузки с диска могут занимать в
памяти значительно больше места, чем ана-
логичные инструкции для ленты(если Вы при-
выкли исчислять память мегабайтами, слово
"значительно" беру назад); в-третьих, сис-
теме TR-DOS необходим буфер не менее 256
байт для записи/чтения файлов, вывода ка-
талога и т.п. и еще больше для распечатки
каталога дискеты командой LIST. Этого до-
полнительного расхода памяти бывает доста-
точно, чтобы компьютер выдал сообщение:
Out of memory, No room for line или еще
что-нибудь в этом роде.
Не печальтесь, в этом случае (как,впро-
чем, и во всех остальных) компьютер можно
обмануть.Наиболее простой и доступный спо-
соб ─ это разделение загрузчика на две или
более части.
Допустим, исходный ленточный загрузчик
выглядел так:
10 CLEAR 24250
20 LOAD ""SCREEN$
30 LOAD ""CODE
40 LOAD ""CODE 23296,256
50 RANDOMIZE USR 23296
60 LOAD ""CODE
70 RANDOMIZE USR 24576
Без толики сомнения Вы написали диско-
вый загрузчик для этой программы:
10 CLEAR 24250
20 RANDOMIZE USR 15619:
REM : LOAD "bomb sc"CODE 16384
30 RANDOMIZE USR 15619: REM : LOAD "bomb
mn"CODE
40 RANDOMIZE USR 15619:
REM : LOAD "bomb pb"CODE 23296
50 RANDOMIZE USR 23296
60 RANDOMIZE USR 15619: REM : LOAD "bomb
ls"CODE
70 RANDOMIZE USR 24576
и, запустив программу,вместо игры получили
сообщение 4 Out of memory, 20:1. Только не
вздумайте тянуться к @безьяне (так некото-
рые именуют кнопку Magic,поскольку в прос-
тонародье символ @, которым TR-DOS помеча-
ет названия файлов, "сброшенных" кнопкой
Magic, часто называют "обезьяной" или "со-
бакой". Однако, в целом звучит неплохо и
соответствует истинному положению вещей).
Попробуйте разбить загрузчик на две части.
Например, в нашем случае первая часть за-
грузчика (назовем этот файл "BOMB") будет
выглядеть так:
10 CLEAR 24250
20 RANDOMIZE USR 15619:
REM: LOAD "bomb sc"CODE 16384
30 RANDOMIZE USR 15619: REM: LOAD "bomb
mn"CODE
40 RANDOMIZE USR 15619: REM: LOAD "bomb
bs"
Вторую часть назовем "bomb bs":
10 RANDOMIZE USR 23296
20 RANDOMIZE USR 15619: REM: LOAD "bomb
ls"CODE
30 RANDOMIZE USR 24576
Компьютер загрузит сначала первый за-
грузчик "BOMB", которому места в памяти
вполне достаточно. Затем, после выполнения
заданных операций, первый загрузчик загру-
зит второй ("bomb bs"),ему,в свою очередь,
места тоже хватает. Второй загрузчик за-
кончит эпопею с загрузкой и запустит прог-
рамму.
Могут возникать ситуации, когда прихо-
дится "распиливать" загрузчик на три или
более части, однако это бывает крайне ред-
ко. Точнее, крайне редко такой прием помо-
гает.
__________________
-*- ГЛАВА 2. -*-
------------------------
КАК БОРОТЬСЯ С BREAK'ом.
В предыдущей главе было подробно описа-
но, как обращаться с загрузчиком на Бейси-
ке уже после того, как был получен его
листинг. Даже в том случае, когда получен-
ное "нечто" слабо напоминает листинг.Впол-
не законно у Вас мог возникнуть вопрос,как
получить это "нечто" (листинг); ведь дале-
ко не всегда,нажав клавишу Break после за-
грузки первого файла, Вы получите то, что
хотели.Результаты вмешательства в нормаль-
ный ход загрузки могут быть совершенно не-
предсказуемыми, начиная с того, что про-
грамма сбросится,и кончая тем, что она по-
виснет или обзовет Вас неприличным словом.
Подробнее опишу эффекты, возможные при
останове программы клавишей Break, а также
способы, которыми эти эффекты достигаются.
Эта информация может быть полезна скорее
не для вскрытия чужих программ, а для за-
щиты своих (не забывайте, однако, что вос-
пользовавшись данными ниже указаниями, Вы
защитите программу только от того, кто не
читал этот текст).
1. После нажатия на клавишу Break за-
грузчик продолжает исправно работать.
Перекреститесь и откажитесь от мысли
вскрыть эту программу ─ к этому Вы еще не
готовы, так как гарантированно можно за-
явить, что загрузчик написан в машинных
кодах (это не имеет отношения к профессио-
налам, которые читают это произведение
только для того, чтобы посмеяться над ав-
тором).
2. После нажатия Break компьютер обну-
ляется.
Если загрузчик написан на Бейсике, то
наиболее вероятно, что в нем использована
следующая инструкция:
POKE (PEEK 23613+256*PEEK 23614),0:
POKE (PEEK 23613+256*PEEK 23614)+1,0
или аналогичная.
Выполнение подобной операции изменяет
адрес "возврата по ошибке" на нулевой (си-
стемная переменная ERR_SP). Таким образом,
вместо того, чтобы перейти на подпрограмму
ПЗУ, которая выводит сообщение об ошибке,
программа переходит на нулевой адрес: ма-
шина обнуляется (те, кто ни разу не видел,
как машина обнуляется, могут попробовать
ввести RANDOMIZE USR 0 или нажать кнопку
сброса).
3. После нажатия Break экран становится
черным и машина ни на что не реагирует
(кроме кнопки сброса, надо полагать). Ско-
рее всего использован оператор POKE 23659,
0, устанавливающий количество строк в слу-
жебном экране равным нулю.К описанному эф-
фекту приводит попытка бейсик-интерпрета-
тора уложить свое сообщение в ноль строк.
4. После нажатия Break цвет экрана не
меняется, нижние две строки экрана имеют
цвет бордюра.Цвет экрана также может иметь
цвет бордюра(в том числе и черный ─ не пу-
тайте с предыдущим случаем).При нажатии на
клавиши слышится нежное пощелкивание,но на
экране ничего не изменяется.
Если Вы еще не успели пощелкать клави-
шами, наберите BORDER 7 (или любое другое
значение) и, невзирая на то, что на экране
ничего не появляется, нажмите Enter. После
этого Вы скорее всего увидите надпись
0 ОК, 0:1. Теперь можно работать как обы-
чно. (Если Вы уже успели пощелкать,то пре-
дварительно пощелкайте клавишей Delete).
В этом случае использовался оператор
POKE 23624,n, где n ─ число, задающее ат-
рибуты служебного экрана, а 23624 ─ адрес
системной переменной BORDER.
Нажатие клавиши Break ─ довольно не-
вкусный способ раскрутки программ. Значи-
тельно приятней лишить загрузчик автостар-
та: тогда Вы получаете полную свободу дей-
ствий.
Самое простое, что можно сделать ─ это
загрузить копировщик COPY86/M или Out Copy
(что, в общем-то, одно и то же) и скопиро-
вать загрузчик, не забыв перед записью на-
жать клавишу R. Таким образом, Вы получите
программу без автостарта.
Подобные вещи позволяют проделывать и
другие копировщики, например, написанные
Tadeusz'em Wilczek'om (COPY NEW,NEW FORMAT
COPY, COPY COPY и т.п.).
Но допустим,у Вас не нашлось копировщи-
ка, позволяющего лишать программы авто-
старта. Попробую помочь. Наберите следую-
щую программу:
10 FOR A=23296 TO 23334
20 READ S: POKE A,S
30 NEXT A
40 RANDOMIZE USR 23296
50 STOP
60 DATA 221,33,0,128,17,17,0,62,0,55,
205,86,5,33,0,200,34,11,128,62,127,
219,254,203,71,32,-8,221,33,0,128,17,
17,0,62,0,195,194,4
Когда Вы ее запустите, машина войдет в
режим загрузки, но загрузит только заголо-
вок. Затем, при нажатии на клавишу Space,
программа запишет на ленту новый заголо-
вок ─ без автостарта.
Для тех, кто слышал слово "ассемблер" и
на вопрос: "Который час?" вместо "Восемь
тридцать" отвечает: "Два эф девятого",при-
вожу исходный текст с комментариями:
ORG 23296 ; 5B00h
LD IX,32768 ; 8000h адрес заг-
; рузки заголовка
LD DE,17 ; 11h длина заго-
; ловка
LD A,0 ; флажок "заголо-
; вок"
SCF ; флажок"загрузка"
CALL 1366 ; 0556h загрузка
; файла
LD HL,33024 ; 8100h задание
; строки автостарта
LD (32779),HL
WAIT LD A,127 ; 7Fh ожидание на-
; жатия Space
IN A,(254)
RRA
JR C,WAIT
LD IX,32768 ; см. выше
LD DE,17
LD A,0
CALL 1218 ; 04C2h запись на
; ленту
RET
Получив живой загрузчик,попытайтесь его
идентифицировать в рамках того, что Вам
уже известно.
Как говорилось в начале первой главы,
загрузчики бывают на Бейсике, в машинных
кодах и смешанные. Предварительную иденти-
фикацию загрузчика можно произвести,изучив
файлы программы.Бейсик позволяет загружать
только файлы с заголовком. Загрузчик в ма-
шинных кодах может загружать что угодно и
как угодно, но, как правило,загружает фай-
лы без заголовков (в оригинальных версиях
игровых программ загружается такое, перед
чем пасует любой нормальный копировщик:
файлы этих программ не копируются). Таким
образом, если загружаются файлы без заго-
ловка, то определенно можно сказать, что
загрузчик, с которым Вы имеете дело, напи-
сан в машинных кодах. Если все файлы имеют
заголовок, то можно предпологать, что заг-
рузчик написан на Бейсике, но определенно
сказать этого пока нельзя. Если файлы по-
падаются как с заголовком, так и без него,
то можно предполагать что угодно,кроме то-
го, что загрузчик на Бейсике.
Нередки случаи, когда загрузчик, напи-
санный на Бейсике, загружает и запускает
загрузчик в кодах.
Для окончательной идентификации необхо-
димо изучить содержимое загрузчика. Если
все файлы программы имеют заголовок, и ко-
личество операторов LOAD совпадает с коли-
чеством файлов, то можете быть спокойны,
загрузчик почти наверняка на Бейсике.
Продолжение следует...
──────────────────────────
В следующем номере "Micro" ждите главу 3
"ЕЩЕ О БЕЙСИКЕ".
------------------------------
03.09.98
Gloom Demons Inc. & Computer Eye.
Special for "Micro 8".
Другие статьи номера:
Похожие статьи:
В этот день... 18 ноября