Echo
#05
31 августа 1998 |
|
Советы хаккеру - Методика адаптирования авторских программ под систему 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. Все те кто наезжает на хакке-
ров - _ЛЕЙМЕРЫ_.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября