ZX Power #02
24 мая 1997

Ликбез - Восстановление программ (О причинах восстановления, характе- ристика мультифейсного взлома, типы мультифейсных взломов, восстановление методом поиска старого загрузчика).

<b>Ликбез</b> - Восстановление программ (О причинах восстановления, характе-
 ристика мультифейсного взлома, типы мультифейсных взломов,
 восстановление методом поиска старого загрузчика).

     ВОССТАНОВЛЕНИЕ ПРОГРАММ.

 Александр Десятниченко,  г.Сумы

   Первая  публикация  -  журнал
"ZX РЕВЮ Украина", ноябрь 1995г.
Исправленная  и  значительно до-
полненная  версия  -  специально
для     электронного     журнала
"ZX POWER", ноябрь 1996г.
________________________________

    1.Причины необходимости
    восстановления программ.

   Безусловно, подавляющее боль-
шинство высококачественных прог-
рамм   для   ZX SPECTRUM  -  это
игровые программы, написанные  в
Англии, Италии, Испании  и  дру-
гих странах.  Приятно  во  время
загрузки такой  игрушки  полюбо-
ваться  красивой  картинкой,   а
после  ее  окончания  под  звуки
льющейся  задорной  мелодии выб-
рать управление и с головой оку-
нуться в этот  прекрасный  мирок
компьютерных приключений.
   Но бывают  и  другие  случаи,
когда приходиться подолгу лицез-
реть во время  загрузки  на кос-
мически  черный,  без  заставки,
экран, в  который перед запуском
программы  грузиться    какая-то
дрянь  в виде  полосочек и точе-
чек, иногда занимая  этим полэк-
рана,  а  затем  поверх   такого
изображения  появляется  игровое
меню,  сразу же забивающееся та-
ким  же мусором, после чего заг-
рузка заканчивается  и вам пред-
лагается из  этой  свалки разоб-
раться  с  управлением.  Хорошо,
если  вам удастся угадать клави-
шу, экран очиститься и  начнется
игра, а  если  клавиатура  отка-
жеться реагировать  на ваши уси-
лия, если  игровые события будут
разворачиваться   поверх   всего
этого, ранее  загруженного, как,
например, это происходит в прог-
раммах  TITANIC, SATAN  и  CURRO
JIMENEZ, если  из  динамика ваши
уши будет  наслаждать только ти-
шина  или более  того, так долго
загружаемая игра попросту завис-
нет или сброситься?  Причем,  по
моей статистике, таких программ,
- около половины от  всех  разо-
шедшихся по нашей стране!
   Естественно, сразу  же возни-
кает вопрос, -  неужели  это так
и  было  задумано авторами прог-
раммы,  неужели   игра   никогда
не имела ни заставки, ни музыки,
ни  удобного  управления? Трудно
поверить, но первоначально и эти
уродливые создания были красиво,
нестандартно загружаемыми, с яр-
кими картинками и доставляли не-
мало  приятных  часов  любителям
компьютерных игр.
   Почему  же они  стали такими?
Ответ прост, -  они  были некор-
ректно  взломаны.  Поэтому  мной
и было принято  решение попробо-
вать написать статью  на никогда
ранее не освещаемую тему восста-
новления  (по-английски - RESTO-
RE) таких программ к их надлежа-
щему виду.

     2.Фирменные программы.

   Перед  тем, как заняться вос-
становлением   неработающих  или
испорченных  программ,   неплохо
познакомиться с  системой выпус-
ка на рынок готовых  программных
продуктов, их  структурой и уяс-
нить  для себя, для  чего же ко-
му-то понадобилось эти  програм-
мы взламывать.
   Итак,  фирменные   программы.
Каждый пользователь ZX SPECTRUM,
например,  в  Анлии,  для  того,
чтобы поиграться  в новую игруш-
ку, должен был сначала сходить в
магазин и приобрести себе кассе-
ту с ней. Это были кассеты, пол-
ностью похожие на обычные аудио-
кассеты  с  музыкой, за исключе-
нием того, что на них  были дру-
гие наклейки и значительно мень-
ше ленты - ровно столько, сколь-
ко надо на  одну игру. Если  это
была  подгружаемая  игра, то  на
стороне "А" кассеты были записа-
ны основные блоки программы,а на
стороне "В" - игровые подгрузки.
Вы  уже и сами заметили  это  по
сообщениям типа  "REWIND TAPE ON
SIDE TWO"   или   "START TAPE ON
SIDE B - SEARCHING FOR LEVEL 1",
которые появляются на экране пе-
ред загрузкой уровней. Представ-
ляете,  как  это  было  удобно -
после того, как  ваш герой поги-
бает, перематываете ленту внача-
ло и грузите  снова первый  уро-
вень. Отпадает всякая  необходи-
мость отмечать показания счетчи-
ка или искать начало  блока  "на
слух".  Каждая кассета укомплек-
товывалась описанием  игры и об-
лачалась  в  яркую   упаковку  с
изображением  персонажей   игры,
соответствующе  выглядели и дис-
ковые версии.
   Разумеется,   такая   кассета
стояла, по нашим  меркам,  нема-
ло. И  это понятно, ведь  фирма,
выпустившая игру, должна за свой
труд получать  прибыль от прода-
жи своей  продукции.  Чтобы зат-
руднить нелегальное распостране-
ние  своих программ, фирмы  были
вынуждены   принимать  различные
меры. Главной проблемой было за-
щитить  программу  от  перезапи-
си (копирования)  с  последующей
продажей пиратских копий.  Неко-
торые фирмы  даже объявляли воз-
награждение  каждому,  кто сооб-
щит  информацию,  которая  может
оказаться  полезной  при  поиске
каналов     несанкционированного
распостранения  программ.  Такое
сообщение вы  сможете  прочитать
после загрузки игр SIGMA SEVEN и
SABOTEUR 2 фирмы DARELL.
   А теперь  о  структуре  самой
фирменной программы. Любая прог-
рамма, как  вам  известно, начи-
нается  с  загрузчика,  написан-
ного  на BASIC. Загрузчики самых
первых игр, выпущенных в  1982-м
году, не защищались совсем.  Они
просто  загружали  что-то   типа
картинки  (графических  редакто-
ров тогда еще не было!) прямо  в
экран,  затем загружали открытый
блок кодов и запускали  програм-
му с необходимого адреса. В пос-
ледующие  два  года  уже  начали
приниматься  попытки    защитить
программу  от копирования  через
моментально  появившиеся  пират-
ские программы-копировщики мето-
дами избыточной  длины файла (на
ленту  специальной    процедурой
выгружалась вся память от  16384
до 65535) и методами внедрения в
имена файлов непечатаемых симво-
лов. Вам  также приходилось  та-
кое видеть,  когда  имя  первого
файла  после сообщения  Program:
печатается другим  цветом или же
печатается в  другом месте экра-
на.  В 1984-м году  начали также
применяться первые методы  защи-
тить  программы  на  бейсике  от
просмотра, а кодовые блоки нача-
ли  кодироваться,  чтобы  другие
программисты  не могли  подсмот-
реть, как  авторы программы реа-
лизовали тот или другой интерес-
ный  алгоритм. После появления в
1986-м  компрессирующих копиров-
щиков, которые сжимали  програм-
му при ее  загрузке и распаковы-
вали  при выгрузке прямо на ходу
и  таким образом позволяли копи-
ровать  длинные  файлы,   начали
применятся  методы защиты от ко-
пирования путем  изминения  вре-
менных  констант  и  приминением
нестандартных процедур загрузки.
Одновременно  с  этим  появились
знаменитые  многоступенчатые за-
щиты типа SPEEDLOCK PROTECTION и
ALCATRAZ LOADER.  Были  также  и
попытки   защитить  программы от
копирования  с  магнитофона   на
магнитофон без копировщика мето-
дом  замера шума  чистой ленты в
паузах между блоками.  В  после-
дующие годы  защита  осуществля-
лась совершенствованием всех вы-
шеперечисленных методов. Причем,
с изобретением новых методов за-
щиты придумывались  и новые спо-
собы  визуального  представления
загрузки программы. Сначала  это
были изменения  в цвете и ширине
полос на  бордере,  затем  в  их
полном  исчезновении и индикации
загрузки с помощью  счетчиков  и
мигающих  квадратиков, а затем и
в загрузке  картинок  и  кодовых
файлов фрагментами  в любое мес-
то памяти или музыкальным сопро-
вождением во время загрузки. Это
в  какой-то   мере    развлекало
пользователя в  процессе  ожида-
ния и  создавало  дополнительные
эффекты мерам защиты,  придавало
солидности им и самой игре.
   Наглядным    примером   того,
как выглядела фирменная програм-
ма, может служить игра  DEVIANTS
(кассетная версия, конечно). Эта
программа    как-то   умудрилась
пройти к нам в том виде, в кото-
ром ее  выпустила  фирма  PLAYER
PREMIER. Во-первых, первый  файл
после  загрузчика явлется однов-
ременно заставкой, которая выво-
диться на  экран не  сразу цели-
ком в виде графики, а формирует-
ся подпрограммами в машинных ко-
дах,  во-вторых, в этом же файле
находится   загрузчик   для  ос-
тальных   двух     блоков     и,
в-третьих, этот  файл имеет нес-
тандартный  заголовок, создающий
впечатления, что файл без загла-
вия загружается  бейсиком.  Сле-
дующий файл загружается  нестан-
дартной  процедурой  загрузки  с
измененным цветом полос на  бор-
дере, постоянным  скроллингом  в
центре экрана и, что самое  ори-
гинальное, уже во  время загруз-
ки вы начинаете играть, -  прог-
рамма проверяет вашу  реакцию  и
корректирует под это саму  игру:
на экране появляются цифры от  1
до 4, а вам нужно  успевать  на-
жать такие   же  клавиши.  После
этого загружается последний файл
игры, причем загружается   в эк-
ран, но это совершенно  незамет-
но, к тому же  на  экране  появ-
ляется  мигающее сообщение. Но и
это еще не все. Программа прове-
ряет обьем памяти компьютера,  и
если  окажется,  что  у  вас  ее
128К, то дополнительно  еще дог-
ружается блок  музыкального соп-
ровождения  для  муз. процессора
AY8910.
   Вот  так примерно и выглядели
настоящие игры. Так почему же мы
всего этого не наблюдаем, откуда
же  взялись эти уродливые версии
программ,которыми нам приходить-
ся  пользоваться?  Ответ  прост.
Фирменные  версии игр покупались
в специализированных отделах ма-
газинов и затем  перевозились за
границу, в страны,где такая про-
дажа не производилась, например,
в  Польшу.  Местные   "умельцы",
стремясь  заработать на распост-
ранении игр и не имеющие ни воз-
можности их копировать (ведь иг-
ры  очень хорошо  защищались  от
копирования!),  ни   достаточных
навыков в программировании,чтобы
эту  защиту  корректно    снять,
просто прибегали к мультифейсно-
му  (то есть  системному,  а  не
программному) взлому  этих прог-
рамм. Затем мутным ручейком  эти
"шедевры" хакерской  деятельнос-
ти  тысячами   метров  магнитной
ленты расползлись  по всему  так
сказать "нецивилизированому" ми-
ру, в том числе попали и к нам.

       3. Характеристика
     мультифейсного взлома.

   Для того,чтобы снова с некор-
ректно  взломанной программы или
просто  обрывков  файлов   снова
восстановить  нечто, максимально
приближенное к фирменной,красиво
и без сбоев работающей игре,сна-
чала  необходимо  разобраться  с
тем, как же  программа взламыва-
лась  с помощью  мультифейсов  и
как она после   такого    взлома
выглядит на ленте или диске.
   Итак, что  такое  мультифейс.
Это  специальное  дополнительное
устройство  в виде катриджа, ко-
торое подключаеться к системному
разъему  компьютера. Такие  уст-
ройства выпускались и  использо-
вались программистами в основном
для наладки и отслеживания рабо-
ты   собственноручно   написаных
программ, являясь,таким образом,
незаменимым   инструментом   при
создании  игр. Они позволяли на-
жатием  на кнопку в любой момент
останавливать  выполнение  любой
программы, находящейся  в памяти
компьютера, внесения в нее изме-
нений, а, при  необходимости,  и
выгрузке всей оперативной памяти
на   магнитный  носитель.  Затем
можно было снова запустить прог-
рамму  на выполнение с того мес-
та, в котором она была прервана.
Работа такой системы хорошо зна-
кома сейчас всем, у кого  к ком-
пьютеру   подключен   контроллер
дисковода,  имеющий  специальную
кнопку  MAGIC для выгрузки  всей
оперативной памяти  компьютера с
адреса  16384 по  65535 на диск.
Затем этот файл можно  снова за-
пустить командой  GO TO и он за-
грузится в память на то же самое
место, где  он находился  до вы-
грузки, после  чего  в  регистры
процессора занесуться данные,на-
ходившиеся в них до выгрузки, и,
таким образом, программа  запус-
титься  с  того места, в котором
она была остановлена нажатием на
кнопку MAGIC.Как вы в таких слу-
чаях видели, экранная область на
время загрузки этого файла  выг-
лядит очень странно  и  подозри-
тельно, - на ней появляются, ис-
чезают и  передвигаются  разного
рода линии и  точечки.  Конечно,
ведь  для  загрузки  MAGIC-файла
требуется место   в  оперативной
памяти  компьютера под  машинный
стек и под значения,которые поз-
же будут восстанавливаться в ре-
гистрах процессора.Поскольку вся
полезная память в  это время за-
нята загружаемым файлом, эта ра-
бота  происходит в  экранной об-
ласти.
   Примерно  так  же выглядит  и
работа мультифейсов, за исключе-
нием того, что выгрузка произво-
диться в  "нарезанном" виде,  то
есть  не  одним  файлом   длиной
49152 байта,а несколькими. Обыч-
но выгружался один длинный файл,
хранящий в себе информацию,нахо-
дившуюся выше адреса, указанного
в операторе CLEAR и один-два ко-
ротких файла с экранной областью
и с  информащией, находящейся  в
области буфера принтера, систем-
ных переменных и бейсик-програм-
мы. В  файл с экранной  областью
заносились также  машинный  стек
и,часто, значения всех регистров
вместе с подпрограммой их извле-
чения оттуда перед запуском. При
загрузке этой  программы сначала
в  память программой  на бейсике
загружается  самый длинный блок,
затем  в экранную  область - то,
что было в ней перед нажатием на
кнопку мультифейса,  затем,  по-
верх этого,  -  последний  коро-
тенький  блок, который  впослед-
ствии  программой в машинных ко-
дах переносится  на свое  место,
поскольку из  бейсика  загрузить
его  сразу туда  невозможно. Те-
перь вам, конечно же, стало  по-
нятно, почему  некорректно взло-
манные программы так  некрасиво,
с использованием экранной облас-
ти, загружаются и не всегда пол-
ноценно работают. Мне  же  оста-
лось  обзорно  познакомить вас с
типами встречающихся  мультифей-
сных взломов и  их структурой, а
затем  приступим непосредственно
к их восстановлению.

 4. Типы мультифейсных взломов.

   Самые первые программы, взло-
манные  с помощью  мультифейса и
дошедшие   до  нас, это   FLYING
SHARK, HEARTLAND,  AVENGER,  DAN
DARE, AIRWOLF 2, CHAIN REACTION,
NETHER EARTH и многие  другие, а
также  кассетная   версия    THE
ARTIST 2. Давайте  посмотрим  на
них поближе.  Сначала загружает-
ся   бейсик-загрузчик, в котором
скрыта машиннокодовая процедура,
грузящая без заглавия еще 5 фай-
лов, а  именно:  заставку длиной
6912 байт (прямо в экран), затем
два блока 20000 и 20536 байт под
адреса с 25000 и выше  до  конца
памяти, затем экран очищается  и
в него грузиться игровое меню  в
виде картинки длиной 6916  байт,
в которой кроме этого  находятся
машинный стек и значения  регис-
тров процессора, после чего  под
адрес 23296 загружается  послед-
ний  кусок  длиной  1705   байт,
программа восстанавливает значе-
ния регистров, игра запускается.
Как правило, после  восстановле-
ния такой  программы она на лен-
те или   диске  занимает   вдвое
меньше  места,  поскольку   этот
мультифейсный    взлом    имеет,
во-первых,   некомпрессированные
файлы, и, во-вторых, игровое ме-
ню  храниться  дважды, - в  виде
картинки длиной 6916  байт  и  в
виде  программы,  находящейся  в
длинных  блоках. Кроме того, что
это самый старый способ  взлома,
он  еще  и  самый  качественный,
сбоев в работе пока еще  замече-
но не было, заставка  к игре аб-
солютно  не   портиться,    хотя
встречаются и программы, в кото-
рых файл  с  ней  отсутствует  -
вместо него грузится сразу игро-
вое  меню  (игры  AIRWOLF  2   и
NETHER EARTH).
   В  1986 году  появился  самый
известный    вам   мультифейсный
взлом, после того,  как  загруз-
чик запустится, на экране  появ-
ляется надпись "M1 LOADING",поз-
же  появилась и его  модификация
"М128", ей взламывались 48К-игры
на 128К-машине. Вот некоторые из
самых распостраненных  программ,
прошедшие через этот взлом:
   GREEN BERET (версия ROBY'86),
ALIEN-HIGHWAY, FASTER THAN LIGHT
(LIGHTFORCE),  THANATOS,  TURBO-
BOAT, HOLLYWOOD POKER, PACMANIA,
TITANIC 1 & 2, ELITE.
   Программы,  взломанные  этими
методами, имеют следующую струк-
туру. Сначала  бейсик-загрузчик,
который грузит длинный откопрес-
сированый  файл под адрес  24792
(M1 LOADING)  или  25048 (М128).
Затем в экранную область под ад-
рес 16384 загружается откомпрес-
сированое игровое  меню. Из бей-
сика подается команда  RANDOMIZE
USR 24830 (M1 LOADING) или 25086
(М128),запускается декомпрессор,
в памяти "разворачивается" длин-
ный блок, а на экране появляется
игровое меню. Затем поверх этого
меню  (какой  ужас!) загружается
последний  отрезок  длиной  1968
байт, дальнейшие  действия - пе-
реброс этих байт в 23296  и  не-
корректный запуск.  Главный  не-
достаток этого взлома -  грязный
экран, иногда даже во время  иг-
ры  (вспомните TITANIC),  встре-
чаются  и сбои в работе, полнос-
тью отсутствуют заставки.
   Некоторые  программы  1989-го
года выпуска, а именно A.M.C. 2,
CORSARIOS 1 & 2, COMMANDO 4,MAM-
BO,  FREDDY HARDEST 3,  ULISES и
другие имеют характерные загруз-
чики типа CARGADOR (по-испански-
"загрузчик"). Это типичные пред-
ставители испанского мультифейс-
ного взлома, в память последова-
тельно  грузятся:  экранная  об-
ласть с  системными  переменными
(9216 байт под  16384),  длинный
блок (38388 байт  под  25600)  и
коротенький  блок   (1536    под
64000). Этим взломом  объясняют-
ся сбои  в графике и кодах в иг-
рах CORSARIOS 2 и MAMBO.
   Было  несколько  разработок и
по адаптации  под ленту обычного
дискового MAGIC-файла. Так, наи-
большего   распостранения  нашли
ELVEN WARRIOR  и  PRINCE CLUMSY,
загружающиеся двумя  блоками  по
24576 под адреса  16384 и 40960,
а также  компрессированые MAGIC-
файлы, порезанные на куски (игры
SATAN 1  и  CURRO JIMENEZ).  Это
наиболее паскудные взломы,работа
практически непредсказуемая,мно-
го сбоев в графике,"мусор" в эк-
ранной  области, процесс восста-
новления таких программ наиболее
трудоемок.  Несколько  системных
программ,адаптирующих MAGIC-фай-
лы к загрузке с кассет были раз-
работаны и в России в 1990-92 гг
(MAGIC FILE COMPRESSOR  и  MAGIC
COPY).
   Большое  распостранение в на-
шей стране получили также  прог-
раммы, чаще всего помеченные как
IMPORTED BY RAJSOFT, имеющие та-
кие  стандартные данные:  отком-
прессированая  под 50000 картин-
ка, длинный блок, откомпрессиро-
ваный  под 24700, при  запуске в
верхнюю часть  экрана перебрасы-
вается из  конца памяти блок ко-
дов, который  после декомпрессии
длинного  блока  устанавливается
на свое место (под адрес 23296),
затем происходит  обычный некор-
ректный  запуск. Встречаются как
программы,  загружающиеся  одним
кодовым блоком,например,SIRWOOD,
KENDO WARRIOR, так и игры,загру-
жающиеся  кусками  (сериал  МОТ,
например), причем нередко  перед
запуском игры путем декомпрессии
одного из таких кусков на  экран
выводится то, что  было  на  нем
при нажатии на кнопку мультифей-
са, иногда вместе с  размещенной
в верхней части  экрана подпрог-
раммой некорректного  запуска  и
блоком  кодов, который будет пе-
реброшен в область буфера  прин-
тера, системных переменных и об-
ласти бейсика.
   Реже встречаются и другие ти-
пы взломов, например, игры  VEN-
TURAMA, CAESEFIRE и LIVINGSTONE2
(все 1991 г. выпуска)  дошли  до
нас в виде бейсик-загрузчика,за-
ставки (6912 байт), длинного от-
компрессированного блока,который
загружается под адрес 24500, ко-
ротенького блока  с машиннокодо-
выми процедурами, которые перех-
ватывают управление,и блока дли-
ной 1204 байта, который, как  вы
уже смогли  понять,  загружается
под  адрес  23296.  Можно  также
вспомнить и  характерные  взломы
игр GUN  SMOKE,  MONSTER  MUNCH,
REBEL STAR 2.
   Стоит немножко  разобраться и
с самим  некорректным  запуском.
Вот  примерно такую процедуру вы
обязательно  найдете   в  каждой
программе, взломаной ранее муль-
тифейсом, - именно она  и запус-
кает взломанную игру точно с то-
го  момента, когда  была  нажата
кнопка:
         DI
         LD   SP,(16384)
         POP  HL
         LD   (16384),HL
         POP  AF
         POP  DE
         POP  BC
         EXX
         POP  IY
         POP  IX
         POP  HL
         POP  DE
         POP  BC
         POP  AF
         PUSH AF
         CP   63
         JR   Z,L1
         IM   2
L1       POP  AF
         LD   I,A
         JP   PE,L2
         POP  AF
         RET
L2       POP  AF
         EI
         RET

   Как видите,  сначала  опреде-
ляется, где находится стек. Чаще
всего  мультифейс   заносит  его
значение в первые ячейки  экран-
ной области памяти,визуально это
наблюдается как парочка  точечек
или маленьких линий в левом углу
экрана на картинках.После этого,
из стека начинают последователь-
но черпаться данные для всех ре-
гистров процессора,затем опреде-
ляется по значению вектора  пре-
рываний  (для IM 1 он обычно ра-
вен 63) режим  прерываний  и,  в
последнюю очередь, были  ли  они
разрешены. Ну и по  команде  RET
подпрограмма     вываливается  в
стек, а  поскольку процессор за-
бит уже всеми необходимыми  дан-
ными, то  программа,  взломанная
несколько  лет назад, продолжает
свою работу с  того  места,  где
она  была остановлена нажимающим
на кнопку хакером. Вот  и  пред-
ставьте себе, а что будет,  если
под стек самой игрой  выделялось
байт эдак с десять, а ниже нахо-
дились  полезные  данные или ма-
шинный код? Вот вам  и  сбои  на
экране во  время  игры  в  играх
ACTION FIGHTER или G.I.HERO!
   Теперь, я надеюсь, вы поняли,
как   бегло  отличить  корректно
взломанную  или  восстановленную
программу от  некорректно  взло-
манной,- если программа запуска-
ется  непосредственно  с  адреса
запуска, не  использует  при за-
грузке  и  запуске  экранную об-
ласть  и  нормально  работает, -
значит, такой программе  никаких
вмешательств не  требуется, если
же  игра  запускается вышеприве-
денным образом,то такой програм-
ме для  ее  полноценной работы и
из эстетических  целей явно  по-
требуется программное вмешатель-
ство  с целью  придания ей вида,
максимально приближенного к фир-
менному оригиналу, чем мы с вами
и займемся.

    5.Восстановление программ
         методом поиска
       старого загрузчика.

   Это самый простой, надежный и
эффективный метод восстановления
программ.  Принцип   его   очень
прост. Ведь любая игра,  прежде,
чем запуститься, должна быть за-
груженой в память компьютера.Ес-
ли учесть тот факт,что все муль-
тифейсы  выгружают  на магнитный
носитель всю оперативную  память
компьютера, включая экранную об-
ласть, и, что  самое  важное для
нас, область бейсик-программы,то
можно  предположить, что  старый
загрузчик, которым эта игра ког-
да-то (перед нажатием на  кнопку
мультифейсного  устройства)  за-
гружалась, могла  там, на  своем
месте, и остаться  в этом файле.
Отыскать  это  самое место очень
просто. Нам хорошо известно, что
обычно начало   бейсик-программы
находиться  по адресу  23755 при
работе с лентой и 23867  при ра-
боте с диском. Значит,теперь это
находиться   в  том  коротеньком
блоке,  который  загружается по-
следним  либо  сразу  под  адрес
23296,либо же сначала загружает-
ся  в экранную область, а  затем
перебрасывается  на  свое родное
место. А теперь наглядные приме-
ры.
   Поройтесь в своей  игротеке и
отыщите    в    ней    программу
HOLLYWOOD POKER,она взламывалась
мультифейсом типа  "M1 LOADING".
Для удобства  (если вы работаете
на 48К-машине)  загрузим послед-
ний  блок  длиной  1968 байт под
адрес 33296  (на 10 Кб выше, чем
23296)  и  просмотрим его  любым
дизассемблером   или  монитором,
начиная  с  адреса  (теперь уже)
33755. Точно! В этом месте нахо-
диться простейший бейсик-загруз-
чик:
      10 CLEAR 24999
      20 LOAD "" CODE
      30 LOAD "" CODE
      40 RANDOMIZE USR 28070

  Как  видете,  ранее  программа
состояла  с  двух  блоков кодов,
последовательно   загружаемых  в
память и  запускалась  с  адреса
28070.  Правда, такие загрузчики
на    чистом   бейсике находятся
очень  редко,  чаще  встречаются
загрузчики на бейсике со встрое-
ной процедурой  в машинных кодах
или  бейсик-программы, формирую-
щие  машиннокодовые   загрузчики
где-нибудь в конце  памяти.  На-
верное,  я не ошибусь, если ска-
жу, что у каждого из вас  в кол-
лекции есть игра TITANIC 1 и вы,
конечно же, видели, сколько дря-
ни на экране оказывается во вре-
мя загрузки, и, что  самое вред-
ное для глаз, этот мусор  портит
красивую  рамочку  по  периметру
экрана на  протяжении всей игры!
Ничего  страшного,  сейчас    мы
вместе с  вами  восстановим  эту
программу и вернем  ей  надлежа-
щий вид.
   Как вы уже заметили, програм-
ма  была взломана  мультифейсным
способом  типа  "М128"  и  имеет
следующие файлы: длинный (адрес:
25048, длина: 31721), откомпрес-
сированное игровое меню  (адрес:
16384, длина: 4035), и  короткий
блок (адрес:16470, длина: 2352).
Загружаем  короткий блок под ад-
рес  33296, затем  понравившейся
вам    дизассемблер,   например,
MONS 3 в любое свободное место и
запускаем его.  Исследуем адреса
от 33755 и выше.Так и есть,здесь
расположен  старый бейсикзагруз-
чик, формирующий  с помощью опе-
раторов DATA и READ машиннокодо-
вый загрузчик в адресах с  65000
по 65015. Посмотрим,что находит-
ся там. Для этого  нам нужно де-
компрессировать длинный  кодовый
блок.    Сбрасываем    компьютер
(имеется ввиду  -  нажимаем   на
кнопку RESET) и пишем  небольшую
программку на бейсике (для прос-
тоты  везде привожу примеры заг-
рузки-выгрузки при работе с лен-
той):
      10 CLEAR 25047
      20 LOAD "" CODE
      30 LOAD "" CODE 16384
      40 RANDOMIZE USR 25086
      50 SAVE "titanic1"
         CODE 25648,39887

   Что  сделает  эта  программа?
Она  загрузит  первых два  блока
некорректно взломанной  програм-
мы, декомпрессирует их (при этом
на экране  появится  игровое ме-
ню), после чего  нажатием на лю-
бую клавишу  вы выгрузите деком-
прессированый блок. Теперь,пред-
видя  ваши вопросы, разберемся с
цифрами. Ну, по поводу адресов в
операторах CLEAR,LOAD и RANDOMI-
ZE USR понятно, их  мы узнали из
самого загрузчика "М128", а  вот
откуда я взял такие точные цифры
в SAVE? Это тоже не трудно.Смот-
рите:  последний  короткий  блок
длиной  2352 должен разместиться
в   конечном  итоге  по   адресу
23296. 23296+2355=25648. Это ад-
рес  начала  нового длинного де-
компрессированого   блока,   по-
сколько в обрезанных нами байтах
с  адреса  25048 по  25647 нахо-
диться  теперь уже не нужная нам
процедура декомпрессии и восста-
новления  регистров. Как  вычис-
лить  длину  выгружаемого  блока
теперь      тоже        понятно:
65535-25648=39887. А  теперь вы-
грузим этот блок на ленту и про-
смотрим, что же находиться в нем
по адресу 65000 (ведь мы узнали,
что именно здесь расположен ста-
рый  загрузчик  игры). Переходим
на этот адрес, видим:

         LD   IX,25500
         LD   DE,38982
         LD   A,255
         SCF
         CALL 1366
         JP   52546

   Теперь все ясно. Игра TITANIC
до взлома являла собой  один ко-
довый файл длиной 38982, который
загружался под адрес 25500 и за-
пускался  с адреса 52546. Попро-
буем ее восстановить. Часть это-
го файла от  адреса 25648 и выше
у нас  уже есть сохраненным, не-
обходимо  только вырезать из по-
следнего короткого  блока  недо-
стающих 148   байт (те,  которые
должны   находиться   с  адресов
25500  по 25647), объединить их,
загрузив в память на свое место,
и    сохранить  на  диск готовый
файл, точно  такой же, каким  он
когда-то  был  до взлома. Теперь
наступает  самый  волнующий  мо-
мент,- проверка работоспособнос-
ти. Даем RANDOMIZE USR 52546. На
экране появляется чистая, не ис-
порченная, как  раньше, рамочка,
игровое  меню  и звучит мелодия.
Выбираем  управление  и  пробуем
поиграть.Отлично! Никаких сбоев,
прекрасная работа, загрузка все-
го одним файлом (а не тремя, как
раньше), а если еще его и отком-
прессировать, то  игра будет за-
нимать на одну треть меньше мес-
та на магнитном носителе.Ну что,
понравилось? Не правда ли, такое
чувство,как будто бы вы отремон-
тировали  безнадежно  испорченый
телевизор, который теперь отлич-
но заработал.
   Естественно, сразу  же возни-
кает желание проделать ту же са-
мую работу  с второй частью игры
(TITANIC 2). Да,  все  полностью
совпадает, ее восстановление ни-
чем не отличается от первой час-
ти. Попробуем   запустить...  Ну
что, не ждали? Еще бы, программа
запрашивает код! Конечно,ведь вы
ее полностью восстановили! А,как
известно,  обычно  вторые  части
программ  (PHANTIS 2,  HYPSYS 2,
NAVY MOVES 2 и т.п.) всегда  за-
прашивают перед началом код, ко-
торый  можно  узнать,  пройдя до
конца первую часть. Ничего, при-
выкайте,вы еще и не такое увиде-
те. После восстановления некото-
рые программы  выдадут вам  даже
несколько картинок или скроллин-
гов, которых  вы раньше не виде-
ли. Объясняется это  очень прос-
то. Ведь некорректно  взломанная
программа снова запускается точ-
но с того же  места, на  котором
хаккер-"специалист"   нажал   на
кнопку мильтифейса. Естественно,
перед этим он мог и код набрать,
и пару картинок просмотреть или,
может быть, даже пол игры  прой-
ти (например,так называемая "иг-
ра"  MIVISIS, представляющая со-
бой второй уровень от DOMINATOR,
отдельные уровни LAST NINJA 2),а
после этого только сбросить игру
на ленту и приподнести  вам этот
подарочек в виде  мультифейсного
взлома.
   Еще один пример. На  днях мне
попался мультифейсный взлом игры
REBEL STAR 2.   После   загрузки
программа зависала, не выдав ни-
каких сообщений,и только когда я
пробежался рукой по всей клавиа-
туре, нажатие на какую-то клави-
шу заставило ее заработать. Ког-
да, спустя  полчаса, я  запустил
эту игру в восстановленном виде,
то она,после очистки экрана, вы-
вела на экран надпись:  "Введите
уровень сложности 1...9". Други-
ми словами, хакер,взломавший иг-
ру, нажал  на кнопку мультифейса
тогда, когда эта  надпись появи-
лась на экране. Поэтому  при за-
пуске  этот  взлом начинал рабо-
тать уже с места  ожидания ввода
уровня   сложности  (нажатия  на
клавиши от 1 до 9).
   Теперь  вы  можете   заняться
восстановлением   и   остальных,
имеющихся   в  вашей  коллекции,
взломов  методом  поиска старого
загрузчика. В игре TURBO-BOAT вы
из такого загрузчика узнаете,что
она  грузилась одним файлом дли-
ной 29440 под адрес 31488, и за-
пускалась  с  адреса 32768.  Для
восстановления  этой  игры  даже
никакой склейки по частям не по-
надобиться,  -  просто загрузить
два первых блока, декомпрессиро-
вать  и  выгрузить  уже  готовую
программу. В игре GILBERT ESCAPE
FROM DRILL, имеющей    загрузчик
типа  CARGADOR, старый загрузчик
в  кодах  находиться  по  адресу
26000.  Во  взломанном виде  эта
программа после запуска начинает
проигрывать мелодию где-то с се-
редины, а вот в  восстановленом,
конечно же, с начала.
   Вначале  статьи  я говорил  о
том,  что  фирменные   программы
имели  очень сильную защиту. Где
же  она? Ведь  приведенные  выше
примеры  свидетельствуют  о том,
что   эти программы  загружались
простейшими   загрузчиками.  Да,
простейшими, но для кого? Не на-
до   забывать  о том, что  любую
программу  можно  перевзламывать
несколько раз  и следы таких пе-
ревзломов  неоднократно приходи-
лось видеть. Например, игра была
выпущена в Англии, затем  в Гол-
ландии с нее корректно сняли за-
щиту и написали  простой загруз-
чик в кодах. В Польше, в отличии
от других стран,использующих для
работы с дисководом операционную
систему +D  или же TR-DOS, нашла
распостранение  ихняя   дисковая
система OPUS.  Поэтому пользова-
тель,не знающий ассемблера, осо-
бенно себя не утруждая, загрузил
игру с ленты  и "адаптировал" ее
на диск  кнопкой мультифейса. Не
правда  ли,  знакомая  ситуация?
Ведь в нашей стране в 1989-91 гг
по рукам ходили  целые дискеты с
такого рода  "адаптированными" с
помощью  кнопки  MAGIC    играми
XECUTOR, CHRONOS, ZYNAPS и  мно-
гими другими, имеющими  не такие
уж  сильные  защиты.  Стоит   ли
удивлятся, если такие, с  позво-
ления сказать, "дисковые версии"
кому-то  снова  захочется  сбро-
сить  на кассету... Так  и полу-
чается, что   игра,  с  первона-
чально простым загрузчиком, при-
ходит к нам абсолютно изкалечен-
ной.
   Кстати, на месте, где  должен
располагаться  во  взломе старый
бейсик-загрузчик, иногда   можно
обнаружить  программу на бейсике
или в кодах,которой программист,
подготавливающий  ее  к выпуску,
выгрузил кодовые блоки программы
на  ленту  (чаще - на  ленточный
микродрайв). Такие  находки, бе-
зусловно, также  способствуют ее
восстановлению.

     Продолжение следует...
________________________________




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

Железо - Микропроцессоры Zilog: Z80, 80,Z8000,Z80000.

Железо - Модем: мифы и реальность.

Железо - Об AY-mouse (вопросы и ответы).

Железо - Последовательный порт -VCOM- для Спектрума.

Железо - Расширенный экран.

Игромания - Описание игры Ghost Busters 2.

Игромания - Описание игры Satan 2.

Игромания - Описание игры Zombi.

Интервью - VIC (X-Project) - как я начинал?

Интервью - Интервью с Joker'ом (Mafia).

К нашим читателям - "Время перемен"

Ликбез - Борьба контроллеров или о том, как я ломал 800К дискеты.

Ликбез - Восстановление программ (О причинах восстановления, характе- ристика мультифейсного взлома, типы мультифейсных взломов, восстановление методом поиска старого загрузчика).

Ликбез - Структура MS-DOS диска.

Обозрение - Gateway выпускает остатки Amiga.

Обозрение - O компьютере "Silicon Graphics" (продолжение).

От авторов - описание оболочки, приветствия и благодарности, адреса и контакты.

Отдохнем - 60 американских анекдотов.

Отдохнем - Бессознанка в армии.

Отдохнем - Кремлевский трабл.

Отдохнем - Протокол заседания по выборам главврача в психбольнице N15.

Первый блин - Описание программы RAM-TEST v1.0.

Первый блин - Путь к известности...

Перспектива - Анонс STS v6.0.

Перспектива - Новелла к игре WORDS.

Перспектива - О игре 3D Killer (демо версия - Doommania).

Перспектива - Предисловие к игре СТАЛКЕР.

Рабочий стол - Как работать с программами: Cache File Manager 512k.

Рабочий стол - Как работать с программами: Corrector v2.0.

Рабочий стол - Как работать с программами: Melon Terminal.

Рабочий стол - Как работать с программами: Symed v1.1

Рабочий стол - Как работать с программами: ZX-Turbo Disassembler.

Разное - Занимательная Вирусология.

Разное - Новости от Progress, Dream Team, Rush, Phantasy, Copper Feet и т.д.

Разное - О ZX сетях и не только...

Разное - Письмоносец - обзор писем читателей.

Реклама - Реклама и объявления.

Фантастика - Винни Пух - 10 лет спустя.

Фантастика - Г.Гарисон (продолжение, часть 4-6).

Фантастика - Рассказ Е.Нестеренко "Корона и кольцо" (часть 1)

Фантастика - Фантастический рассказ Театр.


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

Похожие статьи:
P.S. - послесловие.
Введение - 13 номера не существует в природе... С наступающим Новым годом!
Введение - Информация об Enlight'97. Готова игра Уголки!
Demo-строение - Фильтpация pастpовых изобpажений. Алгоpитм постpоения бугpывистых повеpхностей. Эффект пламени. размывание при быстром движении. Увеличение резкости
Система - Обзор системных программ: Sample Compiler v 0.3

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