Echo #05
31 августа 1998

Советы хаккеру - Методика адаптирования авторских программ под систему TR-DOS (Методика взлома ZX-Format 8, Mortal Kombat).

<b>Советы хаккеру</b> - Методика адаптирования авторских программ под систему
 TR-DOS (Методика взлома ZX-Format 8, Mortal Kombat).
  Методика адаптации  авторских программ
           под систему TR-DOS.

(C) Delta/Power Hackerz Group.

   Эта статья преднозначена для всех хаке-
ров работающих на SPECTRUM'е. Профессиона-
лам  я тоже посоветовал-бы не гадиться по-
добными статьями,т.к.я тоже совсем недавно
не  уважал  когда меня "учили" в различных
изданиях, но здесь я расскажу об адаптации
программ,  и кто знает, возможно некоторая
информаци  будет нова для вас, тем более я
хакер  со  стажем, и успел испытать многие
подводные камни этого дела.
   Пусть  читатель  не думает что я пират,
нет,  это  ошибочная информация.Пират -это
тот  человек, который обкрадывает произво-
дителей,  к  тому-же  пират обычно даже не
хакер,  а  обычный юзер . Для пиратов даже
еще  и  лучше,  если  какая-либо приличная
прога  находиться  не  на TR-DOS ,а на ка-
ком-нибудь  извращенном  формате.  Взломом
такой  программы, пират убивает сразу двух
зайцев:  получает  копию, которую он может
распостранять; а также он понимает, что не
все  пользователи умеют пользоваться копи-
ровщиками  нестандартного формата, тем бо-
лее что 80% из них-полная лажа.
   Ну  вот я и выразил немного "наболевше-
го",  пора  приступить и к теории. Я поде-
люсь с вами методикой взлома и перевода на
TR-DOS  диск популярной игры MORTAL KOMBAT
и компьютерного журнала ZX-FORMAT#8. Время
взлома  MORTAL-1.  5 дней, а время взлома
ZX-FORMAT'а 4-5 часов.

   Если  вы сомневаетесь в моем профессио-
нализме, то можно и списочек больших прог-
рамм привести, которые я вломал :

   DOUBLE XINOX - Оттуда  я  убрал защиту,
поставил  TR-DOS LOADER ,  а также немного
подкоректировал KEMPSTON.

   THE SUNDREED -Она уже была "перелопаче-
на" ARS'ом из FATALiTY, в  результате чего
она не не работала ни на  каких  Брестских
машинах. Только позже заработала со страш-
ным скрипом на TR-DOS 5.043. Туда я всунул
#3D13,  правда пришлоь немного покопаться,
т. к. там портились системные переменные.

   ZX-FORMAT#06 - Фирменный  диск  привез
IMPERIO  с  ENLIGHT'а 97 .  Я  ее сломал и
адаптировал под TR-DOS 5. 043. Написал ко-
пировщик  как  говориться  "для себя", дал
одному...  и  сказал что-бы он его не рас-
постранял, через день его юзал весь Минск,
и  кричал  что  он глючный. Замечание : по
поводу глючности копировщика обращайтесь к
Гоге (ICE/PHD).

   TECHNODROM-Фирменная версия появилась у
меня  от автора (по соглашению). Она зани-
мала  весь  диск,  и  имела защиту (правда
ARS&MAST'овскую).  После  доработки  стала
брать около 600 секторов (со всеми картами
и отгрузками) грузилась вся в 128ую память
(48К  режим  тоже  использовался), и также
мною был убран авторский глюк:) Лично мною
эта  гейма  в  Бресте  не распостранялась,
потому  как  была взломана чисто ради спо-
ртивного интереса.

   MORTAL KOMBAT-Долгое время пользователи
брестских  контроллеров мучались из-за то-
го,  что не могли погейматься в эту непло-
хую   гейму,  не  помогала  даже  прошивка
TR-DOS v5.043.  Пришлось   ее   "изнасило-
вать", она была переведена на TR-DOS диск,
все  операции  через #3D13. Добавлен режим
быстрой  загрузки  меню  бойцов,  довольно
удобная  штука. Работает на любой конфигу-
рации  компьютера, даже на писюшном эмуля-
торе   проверял:)    Самое  сложное,  было
подстроиться под проверки.

   ZX-FORMAT#8 - Сравнительно недавно поя-
вился  он у нас в Бресте, я перевел его на
TR-DOS диск, естественно все через #3D13

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

        Метод конвертации данных.
   Раньше, я считал что перевод игр в сис-
тему  TR-DOS  требовал большого количества
времени  и сил, а также неимоверного коли-
чества дисков. Но есть способ лучше :) Не-
зачем  сидеть  над  программой, переводить
все  файлы  в стандартный TR-DOS формат, а
после  этого их склеивать. Если и в мелкой
гейме, например TECHNODROM, вся запакован-
ная информация (кроме карт) свободно "вла-
зит"  в  128K,  то естественно этот способ
подойдет. А если у вас 50 статей, и 20 му-
зыкальных  файлов  ?  С ними вы будете ко-
паться  не  менее  месяца, после этого вас
врядли потянет на следующие краки. Вот ме-
тод конвертации я сейчас и опишу.

------------------------------------------

   1.  Сначало  нужно  скопировать нестан-
дартный диск в TR-DOS.

   2.  Найти все загрузчики, и поставить в
них переход на свою процедуру.

   3. Разобраться в формате диска.

   4. Написать конвертер и LOADER.

------------------------------------------

   А теперь поподробней обо всех опциях.

   Скопировать   программу  просто,  нужно
только  написать  свой  копировщик. У меня
написание  копировщика  заняло около 10-15
минут. Стоит заметить что для каждой проги
нужно писать свой копировщик, т. к. напри-
мер  в  MORTAL'е сектора начинаються с #F4
(реально)  но  потом во взломанной версии,
от этого числа отнимают #F4, и каждый сек-
тор  там  занимает 512 байт. В ZF#8 совсем
другая  история, там сектора начинаються с
#6F  по  #73,  и длинна сектора составляет
1024 байта.
   Вас  наверное пугает такой большой раз-
мер сектора ? Ведь теоретически по сравне-
нию      с     TR-DOS'ом ,    выигрывается
1024*5=5120/256=20,  20-16=4 сектора с до-
рожки  (за счет небольшой динны полей про-
белов). Можно  прикинуть что с диска будет
выигрываться  4*160=640/16=40  дорожек! Но
авторы  ведь тоже люди, ведь склеивают они
свои проги в TR-DOS'е=>На диске даже место
должно свободное остаться. В MORTAL'е я не
обратил внимание на это, а вот в FORMATE'е
пришлось (из-за  приложения), весь  формат
(интруха+все  статьи+приложение)  даже  не
дотягивает до полного диска, осталось око-
ло  200 свободных секторов, напрашиваеться
вопрос  : а чего собственно авторы их при-
ложением не забили ?

   Кстати вот вам самая лучшая процедура
       записи/чтения (#3D13)

   Программируеться она очень просто :

 LOAD   LD      (23796),DE
        XOR     A
        LD      (23758),A
        LD      IX,7797
        PUSH    IX
        JP      15663

 SAVE   LD      (23796),DE
        LD      A,255
        LD      (23758),A
        LD      IX,7797
        PUSH    IX
        JP      15663

   Как  видите  ничего сложного нет. Адрес
7797-это адрес  стандартной процедуры чте-
ния/записи,  но  только без одной команды.
Это команда (CALL xxxx) и портит всю кашу,
т.е.  гоняет  голову дисковода назад/впред
на  дорожку,  бывает стучит головой о край
трека, и бывает, портит диски.Именно из-за
нее мы не могли работать на уровне нестан-
дартных дисков, TR-DOS процедурами 5, 6.Но
после удаления ее все O.K.TR-DOS вы больше
не узнаете, аминь. Все стало плавно, акку-
ратно,  скорость в принципе такая-же как и
у  обычного TR-DOS'а, но появилась возмож-
ность  считывать  с обычной скоростью нес-
тандартные  сектора, и это открывает перед
нами ну просто отличные возможности. К то-
му-же я на 90% уверен что MORTAL, SUNDRED,
DB XINOX, TECHNODROM, ZX#8 будут работать
на скорповских винтах, а также на брестких
контроллерах версий 5.04, 5.043.
   Но  у  этого способа загрузки есть одно
"но".  Он  не хочет работать в том случае,
если  прога  активно юзает системные пере-
менные. Приходиться извращаться.
            А вот и выход :

        DI
        PUSH    IX,IY
        PUSH    HL,DE,BC
        LD      IY,23610
        LD      HL,#5C00
        LD      DE,XXXX
        LD      BC,512
        LDIR
        LD      HL,10072 ;эти переменные
        EXX              ;нужны для
        LD      A,#FF    ;работы TR-DOS
        LD      HL,#C9F1 ;после чтения/
        LD      (23796),HL ;записи
        LD      (IY),A     ;TR-DOS их
        LD      (23752),A  ;основательно
                           ;поганит.
        POP     BC,DE,HL
        CALL    LOAD
        POP     IY,IX
        LD      DE,#5C00
        LD      HL,XXXX
        LD      BC,512
        LDIR
        RET

   XXXX-это свободная память в компьютере,
обычно ее не сложно найти,  особенно когда
компьютер   считывает  с  диска,  например
экран. Так сделал  Копеин/NHG  в UFOv2.0 и
JAGURA/PHG  в UFOv2.10, когда адаптировали
ее  под #3D13. Его я использовал и в гейме
HUNDRED,  там  тоже использовалась область
переменных.
   Этот  способ юзали еще и различные Ско-
робогатовы,   Васильевы  и  прочие  пошлые
"реставраторы" 90 годов, потому как геймов
этими умельцами было похерено куча. Сейчас
за такой изврат и голову открутить могут.
   Ну да ладно, я немного отвлекся.

   2.  После того как мы скопировали прогу
на  TR-DOS  диск, нужно найти и переделать
все  загрузчики. Просто в загрузчике, ста-
вите  JP на #5F00(24320), обычно это место
перед  стеком,  и  там  пишите конвертор и
LOADER. Приведу полностью мою процедуру :

        ORG     #5F00
        PUSH    IY ;запомним регистры
        PUSH    IX ;на всякие пожарные
        LD      IY,#5C3A ;эти значения
        LD      A,#C9 ;нужно поправить
        LD      (#5CC2),A
        EXX
        PUSH    HL
        LD      HL,#2758 ;тоже нужно
        EXX
LDER    PUSH    BC
        PUSH    HL
        CALL    RASS ;вызов конвертора
        POP     HL
        POP     BC

L1      LD      (#5CF4),DE
        LD      A,B ;умножаем на четыре
        ADD     A,A ;т.к. длинна секто-
        ADD     A,A ;ра 1024 байта.
        LD      B,A
        CALL    LOAD ;загрузка
        LD      DE,(#5CF4)
        XOR     A  ;восстановим
        EXX        ;загаженные
        POP     HL ;значение
        EXX
        POP     IX
        POP     IY
        RET
RASS    DEC     D ;в формате первая до-
                  ;рога не юзаеться
        LD      L,D   ;умножаем дорогу
        LD      H,0   ;на 20.
        ADD     HL,HL
        ADD     HL,HL
        PUSH    HL
        ADD     HL,HL
        ADD     HL,HL
        POP     BC
        ADD     HL,BC
        LD      B,H
        LD      C,L
        LD      A,E
        ADD     A,A ;умножаем сектор на
        ADD     A,A ;4 т.к. в ZF сектор
        LD      C,A ;занимает 1024 байта
        LD      B,0
        ADD     HL,BC ;прибавляем старое
        PUSH    HL    ;значение
        LD      A,L
        AND     %11110000
        LD      L,A
        OR      A ;делим все это на 16
        RR      H ;без остатка.
        RR      L
        RR      H
        RR      L
        RR      H
        RR      L
        RR      H
        RR      L
        LD      D,L
        ADD     HL,HL ;умножаем на 16
        ADD     HL,HL
        ADD     HL,HL
        ADD     HL,HL
        LD      B,H
        LD      C,L
        POP     HL
        OR      A
        SBC     HL,BC ;находим остаток
        LD      E,L
        RET           ;в DE-оригинальное
                      ;значение
LOAD    XOR     A
DISK    LD      (#5CCE),A
        LD      IX,7797
        PUSH    IX
        JP      #3D2F

   Эту  процедуру  конечно юзать нельзя, я
ее привел для того, что-бы вы написали по-
хожую  для  своего случая. Я высчитываю по
своей  формуле,  вы  вычисляйте  по своей.
Главное даже не компактность, хотя в неко-
торых случаях она просто необходима, быва-
ли  даже  такие случаи что одного байта не
хватало:)
   Процедуру  можно  конечно  уменьшить на
порядок, но для моего случая, она подходит
на  100%. В MORTAL'е дела были похуже, там
у  меня два байта свободных осталось (спа-
сибо #3D13). Если бы там стоял мой LOADER,
то   он  занимал-бы  кучу  памяти.  Кстати
LOADER в старой версии MORTAL'а был некор-
ректный,  тормозили дисководы 5313, 5311 и
пр.

    3. Как разобраться в формате диска.
   Тут есть несколько способов. Можно нап-
ример  пользуясь процедурой чтения дорожки
(ее  я  где-то уже описывал) можно считать
поля  пробелов, а потом разобраться в дан-
ных которые находяться там.
   Можно  поломать прогу, которую вы соби-
раете переводить, там порядок расположения
секторов, и их длинна точно есть.
   Можно  STS5.1,  STS6.2   считывать   по
сектору  (с 255-по 16) если ничего не счи-
тываеться,  придеться  пользоваться  двумя
верхними способами.

    4. Написать конвертер и LOADER.
   Ну это вы можете уже написать, т. к. ту
информацию,  которую я вам подарил, вполне
хватит  для  профессионального взлома. Ес-
тественно необходимы еще немного мозгов, и
99% пота. Т. к. в этом деле возникает мас-
са  щекотливых ситуаций, с которыми вы бу-
дете справляться один-на-один,  и меня уже
не будет рядом, что-бы  в  трудную  минуту
подать вам крепкую руку помощи...

   Если  у вас возникнут проблеммы с восп-
риятием  данного  текста,  или  вы  решите
сообщить  мне  что-нибудь,  милости прошу.

         Мой телефон в г. Бресте :
8+(0162)  41-09-12  DELTA/PHG  a.k.a.Олег.


    P.S. Кто говорит что не бывает хороших
    пиратских версий :)

    P.P.S. Что-бы все IMP'ы удавились :)

    P.P.P.S. Все те кто наезжает на хакке-
    ров - _ЛЕЙМЕРЫ_.





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

Вступление - Беларусские новости из мира Спектрума.

Обзор warez'а - Обзор новинок ПО: Зеркало, Nenther Earth+, The Mission, Fisherman, Puzzle, The Last Courier, Операция Р.Р., Волшебник Страны ОЗ, Sexmine Sniper, Fox Hunter, Lady in Love, Aany Tank, CLV-Copier v1.0, STS v6.2 , Digital Studio Record, ZASM v3.10, Sample Studio.

Обзор warez'а - Обзор ПО выпущенного в Бресте в 96-97г: Compress Copy, New Copy, Real Copy, Echo 1-3, Tehcnodrom, Sprites Generator, Text Print, Text Format, Impulse 1, Code Disassembler, Cyber Dream, Password Protect Files, Installator Stealth Boot, Real Commander, Heavy on the Magic.

Разборочка - Описание игры ОПЕРАЦИЯ Р.Р.

Разборочка - Формат отгрузки в игре Bard'S Tale.

Разборочка - Несколько советов по прохождению игры Зеркало (MIRROR).

Интервью - Интервью с автором серии демок "Monsters" - Inkognito Soft.

Game Project - War in Space - новая стратегическая игра.

Программирование - Драйвер памяти.

Программирование - Двойное разрешение на ZX-Spectrum.

Советы хаккеру - Методика адаптирования авторских программ под систему TR-DOS (Методика взлома ZX-Format 8, Mortal Kombat).

Текстовые редакторы - Проблемы текстового ПО на Speccy.

Железо - 122 цвета на спектруме: FLASH генератор цветов для ПК "Байт".

Железо - Программируемый параллельный интерфейс КР580ВВ55А.

Technodrom-2 - История создания игры Technodrom'а.

Сетевая игра - Пошаговая Сетевая игра со спектрумовскими персонажами.

Письма - Спектрумисты на Могилевщине вымерли как мамонты.

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


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

Похожие статьи:
Раскрутка - Обзор новых системок: BGE, Best Viewer, ExHummer, Selicon Player, SlangPro, Quick Commander,
cafe2002 report - репортаж Scremer'a с Казанского пати.
Горячая линия - Пишите нам на e-mail.
Реклама - реклама и обьявления от и для спектрумистов.
Интервью - Николай Родионов и ZX-Sectrum.

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