ZX News #02
30 ноября 1996

Как взломать программу - Как взламывать программы и игры на SPECCY: Пояснительная записка от Richard P Swann.

<b>Как взломать программу</b> - Как взламывать программы и игры на SPECCY: Пояснительная записка от Richard P Swann.
(C) Richard P Swann.

(C) 1996 Перевод SOI.

Как взламывать программы на SPECCY ?

        Пояснительная записка.

Данное описание было написанно Richard P
Swann'ом.Оно представляло собой полное,
на мой взгляд,описание,по которому можно
научиться самостоятельно находить POKES.
Обьем составлял 80 листов по 58 строчек.
(приблизительно 120 Kb)Я, SOI, как автор
литературного перевода,прошу прощение за
возможные логические ошибки.

      В ЧЕМ ВЫ БУДЕТЕ НУЖДАТЬСЯ .

Если Вы хотите использовать эту книгу
успешно,Вы будете нуждаться в следующем:

*  ОСНОВНОЕ. Понимание SPECCY вообще .
Если Вы самый начинающий пользователь,
то Вы найдете эту книгу очень сложной.
Но,если Вам не чужды,такие понятия,как:
память,ячейка,команда,то все будет хо-
рошо.Если же Вы не понимаете 3 + ДОС
раздел фирменного руководства,то все в
порядке - я и сам не сильно понимаю,
о чем в этом разделе идет речь ...

*  Disassembler  или программа монитора.
Теоретически можно для взлома обойтись и
без этих программ, но начинающему хакеру
обойтись без них так-же сложно,как и бы-
валому и повидавшему программы хакеру.
Мой личный выбор Hi'soft DEVPAC но,если
Вы    имеете   программы   STK    и
007 Disassembler(которые были в приложе-
нии с "Вашему Синклеру"(Журнал)75 и 77),
то Вы многое потеряете,т.к. основной
упор я сделаю именно на DEVPAC.

* Некоторые игры для взлома. Многие игры
взламывать противозаконно,и я надеюсь ,
что Вы этим не будете заниматься ни при
каких обстоятельствах . Взламывать игры
типа ADVENTURE и STRATEGY довольно сло-
жно,тут одним POKE не отделаться ... Но,
мы остановимся на играх типа ARCADE и
ARCADE-ADVENTURE . ( А позже я покажу ,
как ломается ADVENTURE ) . Основное вни-
мание мы сосредоточим на увеличении ко-
личества жизней и энергии.

* Терпение и труд ... Ну, мысль поняли ?

* Multiface или Magic button. В принципе
эти устройства не являются обязательными
и важными , но они весьма  полезны , для
взлома . В  своей  книге я несколько раз
к ним обращусь.

     ЧАСТЬ ОДИН - Основная Идея.

Перед началом взлома,Вы должны овладеть
смыслом того,чем мы займемся.Многим это
покажется бессмыслицей,но не зная места
назначения куда же мы пойдем ?
 В основном,мы будем изменять в програм-
ме какие - то конструкции, изменение ко-
торых должно  облегчить  нам  игру.  Это
вечные жизни,вечная энергия,невидимость,
вечные пули и др.
 Что бы  быть  уверенным  в  успехе,  мы
должны знать,что происходит в игре.  Для
этого мы должны понимать язык, в котором
была написана  игра. Почти все игры  на-
писаны в ассемблере и нам прийдется  его
изучить.  На  самом  деле  это не  очень
сложно.
 Логично будет предположить,что где то в
программе хранится  число  жизней , как
константа.  (Обычно от 3 до 9,но есть  и
такие игры , где жизней намного больше).
И есть конструкция,которая уменьшает это
число (которое уже  не  константа,  т.к.
наверняка оно было скопированно  в  дру-
гое место  памяти и в этом  месте с  ним
ведут активные действия). Наша цель  эту
конструкцию убрать.
 Вы наверное подозреваете,как это должно
выглядеть.Если жизней 3,то :

100 LET LIVES=3

... И немного дальше по программе ...

500 LET LIVES=LIVES-1

 Как видим,для установления вечной жизни
достаточно удалить 500 строчку программы
и запустить ее.
 Подобная мысль и в  ассемблере , но тут
пути действия другие.
 В отличии от  бейсика , ассемблер может
быть расположен в любом место ОЗУ.
 В главе 24 (Память)  описано распреде-
ление памяти SPECCY.Наиболее удачно , на
мой взгляд , представлять  память в виде
65535 коробок,в каждой  из которых  хра-
ниться число от 0 до 255.
 Так,ассемблер берет какую-то бумажку,
пишет на ней количество жизней, а в нуж-
ный момент берет эту бумажку и уменьшает
число, написанное на ней.
 Вам надо знать,что и ассемблер и  число
жизней и ряд других чисел  написаны  на
бумажках . И  при  попытке  запустить не
ассемблер а именно другие данные Вы  по-
лучите зависание или  сброс . Определить
где что довольно трудно.Просто помните -
многие программы хранят ассемблер и свои
данные отдельно.
    Во что бы то ни стало, чтобы хранить
3 жизни  в  ассемблере , мы  эту  тройку
должны записать в какую-то ячейку памяти
(бумажку).
 Изменения , в  основном  , протекают  в
регистрах.Регистры очень похожи на пере-
менные в бейсике.
 Больше всего мы будем обращаться к
главному регистру (аккумулятору), он
однобайтовый.Но, зато имеет доступ к
активным изменениям всей памяти, может
прибавлять и вычитать и др.
 Для того,чтобы поместить 3 в память,нам
надо предварительно загрузить  3  в  ре-
гистр,а потом записать  этот  регистр  в
память.
 Вот пример этого рассуждения :

LD A,3:LD (#8000),A

 Фактически говоря,то что написано, это
ассемблер. А специальная программа пере-
водит подобные записи в байты.И мы полу-
чаем машинный код. Для простоты мы назы-
ваем машинный код - ассемблером.
 Данная программа  показывает  нам , как
можно одну команду применить по-разному.
 В начале LD указывает , что  необходимо
загрузить 3 в регистр A.(аккумулятор). А
потом,что мы должны записать  регистр  A
в ячейку памяти #8000.
 Общий эффект - мы поместили 3 в  ячейку
памяти #8000.
 Поздравляю ! Вы познали один из многих
путей облегчение играния. Найдя подобную
конструкцию LD A,3 заменить на нечто по-
добное: LD A,100 .  Далее  запускаем  и
играем с 100 жизнями.
 Прежде,чем мы двинемся  дальше  давайте
немного больше разберемся в системе  ко-
динга.
 Ассемблер и  код,  как  вы наверное уже
понимаете вещи совершенно разные. Напри-
мер LD A,3 в коде представляет  собой  :
#3Е,#03. #3E - это команда,а #03 это уже
то,что мы засылаем в  регистр . Человеку
более понятен ассемблер , а компьютеру -
код.
    Операнд   используется  всякий  раз,
когда имеется двусмысленность по чему -
нибудь.
 Если Вы смотрите в ПРИЛОЖЕНИЕ А  вашего
SPECCY,то Вы увидите  : 3E  ld a,n , где
n число из диапазона 0-#FF.
 Всякий раз, когда   в   текущем   месте
процессор встречает код #3E, он считает,
что число следующее за этим кодом должно
загружаться в регистр A.

    Во второй инструкции нашего примера,
код   -  32 ,  то  есть :  " LD (NN), ".
Двусмысленность  находится  в адресе,где
мы собираемся хранить значение регистра.
В       этом       случае,       операнд
акцептирует(принимает)     два    байта,
следовательно    "NN",   который   снова
прибывает   после   opcode.   Вы  должны
обращать  внимание  что  это  -  адрес в
памяти,   и    он   описан    как    два
байта.

    Короче  говоря, программа предыдущей
страницы написана как ...

$3E 03 32 00 80

...  который состоит из пяти байтов.

   Не все конструкции требуют операндов.
Например в конструкции DEC  ( уменьшение
на единицу ) операнд  не требуется . Для
уменьшения  аккумулятора следует  просто
написать: DEC A . Код - #3D.

 Право,время для Вашего первого,простого
hacking!   От   того  что  мы  обсуждали
у Вас должно сложиться впечатление ,что,
если в игре 3 жизни , то где-то  в  игре
имеется следующая конструкция:
...

$3E 03 32

...  к  сожалению, мы  не  знаем  где в
памяти записывается количество  жизней .
Теоретически,мы можем это узнать из двух
байт следующих за кодом #32 (ld (NN),a).

 Давайте попробуем применить наши знания
на практике . Возмем  игру "Мир  Свиво".
Она была выпущена 6 декабря 1990 года. Я
мог бы взять игру поновее , но они почти
все  защищены  и "Мир Свиво" прост для
взлома...
 Для остановки программы нажмите BREAK ,
когда загрузится загрузчик.После этого ,
требуется вставить STOP перед  последним
RANDOMIZE USR.И продолжаем загрузку , до
сообщения  о  том , что  ход  выполнения
программы прерван.

 Далее,когда игра уже в памяти мы должны
загрузить STK.Но,Вы должны быть особенно
осторожны,т.к. в процессе загрузки  STK
( примерно 6 Kb ) можно затереть  важные
места программы.Удобней всего разместить
STK в графике,музыке  и  др.  маловажных
местах.Т.к. нет быстрого способа опреде-
ления,где что расположено , то  давайте
немного понадеемся на удачу. Теперь вни-
мательно посмотрим на подгружаемые блоки
и определим,куда лучше загрузить STK.

Байты:  S  4000,1B00  Байты: M FB90,043D
Байты:  P  60E0,82B0

Первый блок это заставка . Второй музыка
( О,как Вы на это надеялись). Третий это
сама игра.Теперь мы видим , что мы можем
расположить STK выше(#60E0+#82B0)=#E390.
Для удобства расположим  STK  по  адресу
#ЕА60,который в десятичной системе явля-
ется 60000.

 Теперь наконец приступаем к  взлому , я
имею в виду,что  в  игре  Вам  отводятся
5 жизней. Нажмите Q чтобы искать  после-
довательность символов.На  запрос адреса
с которого начать поиск следует ответить
#60E0, потому что  это  начало  игры . И
следующее:

$3E 05 32

Что эти байты значат, Вы уже должны были
понять.

 Результат операции - два адреса: #905C,
#EEDC.

Адрес #EEDC нас не  устраивает , т.к. он
лежит за пределами игры - где то в  STK.
И нам подходит только адрес #905C.Нажми-
те E для редактирования и #905C.Вы буде-
те видеть следующие байты:

3E 05 32 1A 61

Эта запись служит для записи числа  5  в
ячейку памяти #611A. После #3E записыва-
ем произвольное количество жизней  .  Мы
можем максимально  записать #FF жизней .
далее выходим в бейсик и запускаем  игру
с адреса 24800. И  вперед - играть с 255
жизнями проще.
 Теперь можно вставить в  загрузчике пе-
ред RANDOMIZE USR , POKE 36957 , n , где
" n " - число жизней.

 Любую  игру  не  имеющую  защиту  можно
взломать подобным образом.

 Такие игры делали с 82 - 85 года.

Но мы сделали 255 жизней.  А,для  того ,
что бы сделать число жизней бесконечной,
мы должны знать что :

 1.В программе где-то число жизней запи-
 сывается в регистр.

 2.В этом регистре  ( или как либо еще )
 число жизней уменьшается.

Наша задача сделать так , что бы пункт 2
не исполнялся.

Давайте вернемся к "Миру Свиво". Найдем
все места, где программа обращается к
этому адресу. Поиск #1A,61. Получаем
следующие адреса:

779B 8160 81A9 905F EEDC

Адреса EEDC и 905F сразу  отбрасываем.
EEDC лежит  вне  игры , а  905F  мы  уже
смотрели.
 Как и в прошлый раз нажимаем E и вводим
адрес $779A.Вы будете видеть следующее :

779A - 3A 1A 61 C3 61 99

 Если Вы посмотрите в приложение A, то
найдете,что #3A это ld a,(nn) - загрузка
числа из ячейки памяти nn в регистр  A .
После этого стоит C3. По таблице видно ,
что это JP nn. JP nn это на языке бейсик
GOTO. После  этого оператора  выполнение
программы будет передано на адрес nn . В
данном случае ( #C3 #61 #99 )  полностью
конструкция запишется как JP #9961.
 Возможно именно там  уменьшается  коли-
чество жизней,но маловероятно.

End of part one. To be continued .

-+--+--+--+--+--+--+--
     Итого $73=400.000 рублей.

Это навеpное уже скоpо станет анахpониз-
мом :-|

      А  теперь  обьясните мне - что еще
осталось  у  энтузиастов  Спектрума,
кроме      собственно энтузиазма? Hасчет
того,  что нет 0.5-1.0 миллиона - не на-
до,       при желании эти деньги зарабо-
тать можно. А для ностальгии - эмулятор.

Извини,  Speccy еще долго будет жить. :)
Достанет его как нибудь какой-то товаpищ
из  шкафа  и  как оттянется на несколько
часиков,:))  а если у него есть IsDos то
еще и мессагу кому-нибудь напишет :)

АВТ>Ребята,IBM-хорошо,но ведь SPECCY
                ЛУЧШЕ !


Sir Clive Sinclair.
       День рождения - 30 июля (вроде) -
еще  долго  ждать. А потом кто       эти
затраты  понесет?  Hадо  лимона 2, чтобы
все  это  купить,         скопировать  и
отослать в Англию. Hереально.      Впол-
не  pеально.       Hy так профинансируй.
Больше  почти  никто  деньги  сдавать не
станет.

Я  уже  написал  как это можно сделать в
пpедыдущей мессаге. А если никто не ста-
нет сдавать, то и не надо.

АВТ>Товарищи,обьявите всеобщий  сбор . И
Украина,и Россия,и Беларусь ...  Мы  ему
такой подарок заделаем !!!  Ребята , это
мысль!


     А тепеpь к вопpосy о самом кpyтом с
точки  зыpканья  всяческих      извpатов
КОМПУ и так САМЫЙ КРУТОЙ КОМП ЭТО -+-РА-
ДИО  86РК  -      настоящий     РУЛЕZzzz
4ЕВА  к  немy  можно  подключить все что
yгодно  и  как yгодно !!! А нy-ка pазбе-
pемся...  Об РК-86 yже несколько лет ни-
чего  не говоpят, потомy что ЭТО yже ни-
комy  не нyжно. Качество пpогpам на этом
sux-86  - пpосто деpьмовое. Даже гpафики
нет! Hасчет подключения хаpда... не спо-
pю может и можно, но без пpогpамной под-
деpжки  это  долго  не пpотянет, да и не
помню  я  особо, чтобы к немy что-нибyдь
подключали,   дисковод  и  тот  считался
извpатом... И это не пyстые слова, я ви-
дел  ЭТО  в pаботе!!! Тееpь посмотpим на
Sinclair... Изобpетен в 1982 (!) годy, в
1986  он  (еще за бyгpом) пpибpел pасши-
pеннyю  клавиатypy  дисковод 128к памяти
(вместо  48)  3-х  канальный мyзыкальный
генеpатоp...  (котоpый хоть и на FM син-
тезе cделан, но позволяет и оцифpовке по
4  битам воспpоизводить). Единственное о
чем  можно  пожалеть,  что  наши  сооте-
чественники  в качестве дисковой системы
для SPECCY выбpали TR-DOS, хотя yже в то
вpемя   сyществовали  более  пpодвинyтые
системы DOS. Тyт можно пpизнать минyс...
Уже  в нашей стpане SPECCY сильно пpеоб-
pазился, к немy стали подключать Винчес-
теpы,  сканеpы, мышь, полноценнyю клави-
атypy, 256 и более (до 1мб) памяти, пpи-
чем  все  это с неплохой пpогpамной под-
деpжкой!  Так  же  наладилась и обpатная
связь,  т.е.  пpогpаммы  стали поддеpжи-
ваться аппаpатypой, пpимеp: для опеpаци-
онной  системы  iS-DOS (котоpая, кстати,
имеет    файловyю   стpyктypy   подобнyю
MS-DOS)   pазpаботаны   постой   ваpиант
контpоллеpа  винчестеpа,  iS-DOS  клави-
атypа.  Есть  так же и CP/M опеpационка,
котоpая пpавда не сыскала такой попyляp-
ности  как iS-DOS (возможно по томy, что
пpогpаммисты  котоpык писали этy системy
не  позаботились  об  yнивеpсальности, и
CP/M pазных моделей Спекки оказались не-
совместимы).  Также есть и yнивеpсальный
хаpд,  под  любые  системы. Подключили и
Hayes  Modem'ы  и со спекки тепеpь можно
попасть  в  Фидо,  да и в интеpнет чеpез
FTP если очень хочется, пpичем модемы не
2400,  а  и  9600 и 14400 !!!     y него
самый кpyтой CPU и его ASM вот так .!!!!
(CPU -КР580 ВМ80А) Мдааа... IMHO это не-
возможно,  т.к. твой КР580ВМ80А является
аналогом  Intel  8080,  а  пpцессоp Z-80
(тот  что  в Спекки) - новой, yлyчшенной
моделью  Intel 8080! К томy же ВМ80А pа-
ботает на 2.5 МГц, а Z-80A на 3.5 МГц, а
последние модели SPECCY стали pазpабаты-
ваться на Z-80B (до 7 МГц) и Z-80H ,нез-
наю  как  по паспоpтy, но запyскают и на
12-14 МГц !!! А теневые сеpвис монитоpы,
кодеpам  на  РК и на IBM такое и не сни-
лось !!! А если y РК-86 такой кpyтой АСМ
и  pyлезное  аппаpатное  обеспечение, то
почемy  ж  на нем нетy ничего сногсшиба-
тельного,  а только пpимитивные игpyхи в
текстовом pежиме?!?!?! РК даже небыло на
Enlight'96  (и  на  остальных Enlight'ах
тоже),  а  IBM  если  и был, то погpамки
пpедставили  паpочка  кодеpов,  да  и их
демки  для  ИБМ не пpедставляли _HИЧЕГО_
сногсшибательного, на ИБМ кyча таких де-
мок.  Hа  Спекки же, собpались кодеpы со
всей  России, нет, даже из всего бывшего
союза!!!  И  их демки были пpосто отпад-
ные!  Я  конечно  не споpю, на иБМ и 256
(или  даже  16М  цветов), SOUNDBLASTER и
т.д.  и не кто не скpывает, что иБМ нам-
ного  мощнее  СПЕККИ, но иБМовские демки
не показали никаких его новых возможнос-
тей. Hа ZX же, пpи пpосмотpе этих демок,
не  веpилось,  что  ЭТО можно на Спекки,
что  в  пеpвyю  очеpедь  говоpит  о мас-
теpстве спектpyмовских кодеpов, самодос-
таточности  ассемблеpа  Z-80  и Спекки в
целом.



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

От редактора - прошло два года со дня выпуска первого номера.

Анкетирование - нами будет выпущена энциклопедия "speccy особей".

Как сделать INTRO - пишем интро с плазмой и спрайтами.

Лабиринт - вторая часть фантастического рассказа.

Смагли-3: Воин света - новая игра от "Crystal Dream": предыстория ужасной бойни...

FIDO слухи - UNIQUE GROUP из Екатеринбурга пишет МЕГАдемо; IBM vs Speccy.

Как взломать программу - Как взламывать программы и игры на SPECCY: Пояснительная записка от Richard P Swann.

Как избавиться от юзера - Десять методов отделаться от юзера, у которого сдох дисковод.

Лечение современными методами - 5 способов лечения.

Screen Editor - пакет программ Screen Editor для создания экранов к играм.

Рабочий день - приколы (продолжение).

Законы Мерфи - если какая-нибудь неприятность может случиться, она случается.

Как устроены игрушки - статья о том как делаются игры лабиринтного типа с большим игровым пространством.

Хоббит - прохождение Адвентюрной игры "Хоббит, или Путешествие туда и обратно".

Сага о конгрессе - Большой Толкиновский Семинар 1995 года в Санкт-Петербурге.

Российско-Эльфийская дружба - Доклад на II Семинаре Толкиновского Общества.

Авторы журнала - Своих ГЕРОЕВ надо знать...


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

Похожие статьи:
Сетевые новости - MMD v4.00 - тестируется на BBS, закрытие газеты ZXWeek.
Обзор новинок - Кощеева цепь, UNI PLAYER 2, SCL v0.1, Империя.
Информация - халявные разговоры по межгороду.

В этот день...   17 января

Релизов не было :(