Micro #08
05 сентября 1998
  TR-DOS  

Адаптация программ к TR-DOS - Часть 3

<b>Адаптация программ к TR-DOS</b> - Часть 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".




Другие статьи номера:

Fido - ZX Spectrum и FidoNet в Запорожье

Poke's

Адаптация программ к TR-DOS - Часть 3

Железо - Турбирование 1818ВГ93

О разном - Слух о Mortal Kombat 1024kb. Состязание по Virus II. О вскрытии Зеркала.

От редакции - О будущем газеты

Юмор


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

Похожие статьи:
Предисловие - Глючный номер.
Солдатские хохмы - армейские маразмы.
Презентация - Авторские программы: Кубик Рубика (DEMO)
Презентация - HELP Z_80: Руководство пользователя.
Oпять прoмaзaл - пocвящaетcя вcем, ктo хoчет знaть o cтрoительcтве чyть-чyть бoльше...

В этот день...   21 ноября