PDA

Просмотр полной версии : Лоадеры своими ручками.



tmp_online
23.04.2007, 14:30
Лет эдак пять-семь назад пытался разобраться с лоадерами игр Savage (крякнутой Биллом Гильбертом), Double Dragon (крякнута неким S.S.Captain). У этих игрулек процесс загрузки изображался моргающим прямоугольником в левой верхней части экрана. Полосок загрузки не было, то есть Border был полностью черного цвета. Если происходила ошибка загрузки с ленты (аля RTape Loading Error), происходил сброс. Итак, к чему я веду, никто не подскажет, по каким адресам размещаются эти лоадеры? Во вложении - игра Savage. Отдельное спасибо ZEman'y, за то что поделился этой версией игрульки, а то с ленты восстановить у себя не удалось.

Shadow Maker
24.04.2007, 23:12
Ну расскажу что видно невооруженным глазом. Игра грузится так - сначала первый басик-лоадер грузится, запускает кусок кода, который грузит второй басик-лоадер (собсна сам "протект" если его мона так назвать, там где куча всяких вызовов. Он в итоге своей работы печатает надпись САВАЖ-БИЛЛ ГИЛБЕРТ и делает процедуру загрузчика (этого самого с квадратиком) по адресу 60000 (EA60), который грузит саму игру.

Тока вопрос-то в чем? Так и не понял чего тебе надо... Только адрес этот чтоли?

Вообще с такой вещью как отладчик у Unreal взлом стал дико скучным занятием... Тупо поставил брекпойнты и жди када словиться...

TomCaT
24.04.2007, 23:50
Вообще с такой вещью как отладчик у Unreal взлом стал дико скучным занятием... Тупо поставил брекпойнты и жди када словиться...

Точно так. Вот, например, такое зверство, как в оригинальной Thunderbirds -- то, которое аркада про пирамиду, а не серия квестов. Есть, конечно, хуже (Head Over Heels и Sir Fred, может быть, с их картинками), но это худшее, что я видел. Один моноблок без заголовка, на нестандартной скорости, конечно, в котором адрес и длина очередной части считываются на лету перед собственно чтением этой части. Частей этих с полтора десятка, частично перекрывающихся, так что в итоге грузится много больше 48 килобайт. А потом все раскодируется через ключ и ПЗУ и благополучно виснет на нестандартном 48к. Ключ, конечно, в IY, для вящей неработоспособности брейкпойнтов.

Без UnReal пришлось бы долго биться об стену.

goodboy
25.04.2007, 10:42
неплохая книжка для начинающих http://trd.speccy.cz/book/RIDDLES.ZIP

Shadow Maker
26.04.2007, 08:27
Ну ты уж вообще... Возьми любую книжку по Басику где написаны коды символов и кейворды - там всё понятно будет... 0 - 5 не использ., 8 - 10 - курсор влево/вправо/вниз, 14 - управл. код числа, 15 - не использ., 24 - 31 - не использ., 94 - символ "стрелка вверх", 96 - символ "фунт стерлингов", 127 - 164 - (с) и после набор UDG-графики.

Shadow Maker
26.04.2007, 09:35
Это не ахинея, это машкод. Подробнее смотри 'Методы Билла Гильберта' в ZX Ревю, 1992. Если до вечера не разберешься, домой приду подробнее расскажу.

goodboy
26.04.2007, 10:35
команды бейсика элементарно смотрятся по PRINT CHR$ x
также например в ConverCommander`e (не помню точно версию) в диск докторе есть просмотр бейсик программы,BestView кажется тоже даёт листинг

Shadow Maker
26.04.2007, 11:53
Ну значмт 93, в 92 там просто серия статей была про взлом программ.

Добавлено через 9 часов 9 минут
Ну короче все тупо как дерьмо мамонта. После числа того PRINT USR 6746931 идет 14 (знак числа) и само число 143, 58, 42, 51, 51 - это представление с плавающей запятой, как оно представляется сам прочитаешь, но если по русски это число 23829.1, дальше можно не читать. PRINT USR = RANDOMIZE USR = вызов программы в машкодах из памяти по адресу в данном случае 23829. Там находиться программа, суть ее в том, что она частью себя копирует, другой частью убивает возможные отладчики и потом возвращается опять назад в басик прогу, натыкается на LOAD "" которая грузит второй бейсик блок с кучей вызовов про который я уже говорил.

Jukov
27.04.2007, 15:12
Мой совет - используй для просмотра Basic'a прогу Das boot со встроенным Look Basic Programm

Shadow Maker
27.04.2007, 22:40
Да давай я тебе лучше свой комплект для басик-лоадеров дам. Там один файлик для всего.

Бывалый
28.04.2007, 09:49
Конечно давай!! В хозяйстве всё сгодится :)
Адрес я тебе в приват сейчас напишу. Спасибо.
И мне очень интересно, если можно дайте пожалуйста ссылку.:)

Shadow Maker
29.04.2007, 01:28
Ну эт.. Вот. Берите, мне не жалко ;) Они конечно некоторые из Ревю потырены, некоторые самим написаны, в общем такая сборная компиляция... Для тех у кого Скорпион на реале (как у меня) - для басик-прожек больше ничего не нада..

Jukov
29.04.2007, 10:27
Вот das boot вместе с описанием

Shadow Maker
29.04.2007, 13:58
Им дико неудобно с лентой/тапами работать.

Jukov
29.04.2007, 14:12
Им дико неудобно с лентой/тапами работать.
Дык для дисков изначально предназначался. Очень хорошо описаны способы защиты/взлома магнитофонных загрузчиков в книге "Тайники ZX Spectrum и вечная жизнь в 600 играх" издательства Va Print, M:1993

Shadow Maker
30.04.2007, 10:32
Да лично мне ничего не надо, кроме Unreal :) А ребята пусть да, почитают, и статьи Михайленко в Ревю 1992.

klondike
15.05.2007, 21:12
Для начала решил поинтересоваться, что размещается в самом первом блоке SAVAGE .de (прикольное расширение).

Это не полная версия первого savage, а DEMO, о чем и сообщает приставка .de
Демо версия отличается сокращенным уровнем и соотв. иноформирует при прохождении уровня о том, что это демо.

Что касается лоадера, ох как я в 90м помучался, разгадывая загадку - почему же один в один переписанный лоадер без бордера не работает по адресам ниже 32768??
:)

А что касается выкрутасов в бейсике (и не только) - рекомендую глянуть мой лоадер, например:
http://zxaaa.untergrund.net/DEMO/ripds.zip

Там многое подчерпнуто из оригинальных защит + собственные разарботки.

ZEman
14.06.2007, 09:04
вот ещё коечто по лоадерам.
откопал я с одной из своих касет програмку Ultraload от Николая Родионова.
с помошью этой программы можно создовать загрузчики с Ultraload, это когда картинка рисуется бегающим по экрану квадратом и полосы разноцветные.
в архиве содержатся 3 файла программы:

1. Ultraload Screen Modifier
собственно сама программка для изменения картинок, загружаете в неё картинку со спека и меняете как вам угодно.

2. Ultraload Protection Copier
программа для копирования блоков которые идут после картинки.

3. Ultraload Universal Loader
универсальный loader с помощью которого грузятся изменённые картинки.

ПРЕДУПРЕЖДЕНИЕ !
данная программа будет практичеки бесполезна на эмуляторах, так как сохранить результаты из эмулятора невозможно (сигнал Save на выходе нестандартный) но на реальном спектруме всё прекрасно сохраняет.

Splinter
12.07.2007, 14:34
Вопрос по Гилберту. В его загрузчике к Хроносу (кодовом) картина рисуется неадекватно Ж), кто нибудь знает, какой там применяется метод? При попытке кряка (в свое время) у меня возникло подозрение, что эти хулиганы сделали наколку, типа грузится картинка, а на самом деле грузится депакер, а кртинка типа уже в экране, и в лодере просто стоит call на процедуру заполнения атрибутов.... Никто не просветит детальнее ?

Roger Wilco
13.07.2007, 11:31
Splinter, метод преобразования в псевдографику. Каждый "квадратик" 8Х8 пикселей был преобразован в символ 8Х8, с координатами и цветом.
Когда-то не зная, как, по загрузчику был сделан кодер. Можно было курсором выбрать последовательность загрузки "знакомест".
Кстати, все эти мифы о Билле Гилберте полная чушь. Защита была содрана с классического SpeedLock, отличается от него только самой процедурой загрузки и надписью для незадачливых хацкеров "Protected By Bill Gilbert" вместо "Protected By SPEEDLOCK". Плагиат.

Shadow Maker
13.07.2007, 14:14
Вопрос по Гилберту. В его загрузчике к Хроносу (кодовом) картина рисуется неадекватно Ж), кто нибудь знает, какой там применяется метод? При попытке кряка (в свое время) у меня возникло подозрение, что эти хулиганы сделали наколку, типа грузится картинка, а на самом деле грузится депакер, а кртинка типа уже в экране, и в лодере просто стоит call на процедуру заполнения атрибутов.... Никто не просветит детальнее ?
Такое дофига где пользовалось, к примеру в куче фирменных лоадеров... Был даже псевдозагрузчик, прикольный.

Splinter
14.07.2007, 08:53
Splinter, метод преобразования в псевдографику. Каждый "квадратик" 8Х8 пикселей был преобразован в символ 8Х8, с координатами и цветом.
Когда-то не зная, как, по загрузчику был сделан кодер.

Не дашь ли ссылочку на кодер такого загрузчика ?

Добавлено через 4 часа 13 минут
еще, в игре BOMBJACK во время загрузки чувак говорит -TollySoft. Не этоли случай с псевдозагрузчиком ?

Roger Wilco
16.07.2007, 10:46
Splinter, ссылки нет. Если где и есть, так это на моих старых кассетах. Написал его один мой друг в начале 90-х.
Если удастся найти, выложу. Он вообще занимает мало места.
Можно и самому написать, принцип ведь я описал.

transman
23.07.2007, 15:35
Понятие псевдозагрузчика применимо только к дисковым лоадерам. это имитация загрузки с ленты на высокой скорости.

В случае когда экран строится произвольным образом - ето не псевдозагрузчик. Тама экранный файл записан в формате типа (адрес знакоместа на экране),(8байт данных),(1байт атрибутов) и все это в процессе загрузки выводится на экран.
Примеры тому - chronos, mikie, transformers, future games1&2, battle of planets и куча других.

Vovoi
24.07.2007, 18:28
Когда я впервые увидел IBM-PC, то очень понравилась полоска копирования (progress bar) в Dos Navigator. Сразу захотелось повторить на спеке (см.прицеп).
Смешной типа код. Сделано в Генсе. Сразу вставил в загрузчик самого Gens3m21, а потом и в артстудию.
:)

Vovoi
06.08.2007, 16:48
При загрузке art studio почти сразу выскакивает tape loading error ;)
Создал диск, закинул на него хобетовские файлы, получил:
LINLOAD <C> 9 48866 2213
load+IY <C> 8 33866 2037
Попробовал подизасмить - на первый взгляд ничего не понял.. Как это кушать? :)

1. У Вас подписано "Scorpion ZS 256 Turbo+", значит и реальник имееется. Потому что в эмуляторах я не тестил. :(
2. !linload.$c и !load-iy.$c, это текстовые файлы так что дизасмить ничего не нада. :(((

Открываю текст !LINLOAD и попробую что-то вспомнить (все-таки 10 лет назад печатал:)
У меня реальник ремонтируется, что что откомментить абсолютно точно не смогу.

Подпрограмма "LOAD" повтряет некторую часть кода из ПЗУ с адреса 1366 (dec), т.о. я смог что-то поменять в стандартной загрузке.
Итак:ORG 30000
* готовим экран
* выводим текст " LOADING FILE "
* далее "DRAW ", похоже что рисую логотип :)
METKA LD IX,55000; куда грузить
LD DE,30960: объем байт
LD A,255; код загрузки а не SAVE
SCF
CALL LOAD; вызываем нашу загрузку
меточка "M11", сразу хочу предупредить, работал один и код мой никому не нужен был, так что названия меток безобразные.
Объем файла математикой делится на 32 что ли, по числу знакомест по горизонту (или 30?) и кодом "PRINT" зарисовывается очередное знакоместо.... а, ну правильно - SUB 4, как раз вычитаем и прописываем.

Программуля "!LINLOAD" (восклицательный знак в Спеке давал асмовым исходам, чтобы не путать проги и тексты) создавалась как универсальное средство загрузки (только объемы подставляй и адреса загрузки), а "!load+IY" стал использовать из-за того, что на индексных регистрах это было удобнее:
METKA LD IX,40000;16384 - грузим скрин или картинку-самораспаковку по адресу 40к(dec)
LD DE,6912 - объемом 6к
 LD IY,23233 - начало координат для прорисовки прогрессбара.
"DANGER" - юзер давит "бряк" и мы отключаем строчку EDIT (т.е. подвисаем, типа защита от взлома:)


На самом деле все очень просто, а если не понятно, отмылю письмом, откомментив каждую строчку (правда не обещаю, что сделаю это в ближайшее время)

Добавлено через 8 часов 22 минуты
Вообще-то я был не прав, что разместил исходники в раздел "Для начинающих" без каких-либо комментов. Исправлюсь.

Shwartz
01.09.2007, 14:09
Помню, мы с братом написали самый крутой загрузчик в мире:
- внизу экрана шла полоска шириной 4 пикселя
- справа налево летели звезды (точки), за счет того, что у разных точек была своя скорость (8, 16, 24 или 32 пикселя) создавался эффект трехмерности
- два знакоместа переливались желтым и красным (там я думал нарисовать ракету как в Academy Tau Ceti, как будто она летит через звезды)
- и все это выполнялось по времени ровно столько (такт в такт), сколько пустой цикл в стандартном загрузчике.

А еще я сделал загрузчик, который воспроизводил двухголосую музыку. Движок взял из игры trans am и немного переделал (убрал ударники и сделал синхронизацию с учетом длинной единицы и короткого нуля). Все это опять таки уложилось в заданное количество тактов.

ram_scan
09.10.2007, 09:19
Исходники в студию ! Пажалуйста !

Splinter
09.10.2007, 10:36
а я на 128м спеке пробовал так:
1) грузил 2 экрана, один ч.б., другой в цвете
2) вместа переключения цвета бордера менял в загрузчике код на переключение
экрана, 4 NOP и обратно. Довольно мило получалось 8))))

Добавлено через 1 минуту
кстати, дико хотел сделать лодер с анимацией, что б в уголке внизу крутилась кассетка 2*3 знакомест... так и не дошли ручки....

Jack Ketch
04.11.2007, 11:39
Без UnReal пришлось бы долго биться об стену.[/QUOTE]

Нда раньше ручками-ручками СТС 3 и 5 для кассет вот так вот

А сир фред даже и ломать то не надо там все очень просто
Загрузчик
сначала картинка:
1,2 байт - адрес на екране
8 байт - рисунок
9,10- адрес атрибутов
11,-атрибут

так весь рисунок
а потом моноблоком и сама игра и запуск !!! Во тебе и 48 килобайт !!!!!! ГЫ!!!

tmp_online
12.03.2008, 00:46
Народ, а вот подскажите, значения каких адресов надо менять, чтобы изменить цвета полосок на бордере во время загрузки (пары красный-зеленый и синий-желтый, думаю, вы поняли о чем я)?

maxT
22.03.2008, 11:03
я в своё время впечатлился загрузчиком "шахматкой" из RED Heat и пробовал написать псевдозагрузчик на бейсике (не было учителя по ASM-у). Надо сказать, что первые две трети экрана осилил, а в нижней части алгоритм почему-то "лажал". Вестимо, тормозило всё это нешутошно.

James DiGreze
24.03.2008, 13:40
maxT, скорее всего (но не факт!), проблемы с нижней третью экрана на бейсике вполне объяснимы, так как нет универсального способа впечатывать туда информацию - нижняя треть делится на 2 части, так называемые каналы "S" и "K". Первый канал работает через обычный PRINT, но печатает (чаще всего) только 6 текстовых строк, оставшиеся 2 строки принадлежат второму каналу, который работает не только на вывод информации в нижнюю часть экрана, но и для ввода с клавиатуры.

Splinter
13.04.2008, 16:31
Народ, а вот подскажите, значения каких адресов надо менять, чтобы изменить цвета полосок на бордере во время загрузки (пары красный-зеленый и синий-желтый, думаю, вы поняли о чем я)?

уже и не помню на память, но точно знаю, что при просмотре кода лодера дизасмом, эти ячейки видны невооруженным глазом.

Firelord
02.05.2008, 13:23
Народ, а вот подскажите, значения каких адресов надо менять, чтобы изменить цвета полосок на бордере во время загрузки (пары красный-зеленый и синий-желтый, думаю, вы поняли о чем я)?
Есть, в общем-то, два способа, самый простой из которых — это использовать "модификацию" стандартного загрузчика в ROM. Для этого нужно было поменять несколько первых команд, поставив в аккумулятор атрибут цвета и затем вызвать стандартный загрузчик уже где-то с середины (если мне не изменяет память, это адрес DEC 1218). Это метод Гилберта. Второй способ — просто взять и написать свой загрузчик.

Было время, когда я баловался с разными лоадерами. У меня даже была написана программа на бейсике, которая генерировала их (если найду, выложу). Один из примеров я приложил к сообщению. Игра *слегка взломана*. Но, по-моему, таких загрузчиков экрана, как у меня здесь, не было (по крайней мере я не видел нигде).

Плюс положу ещё свою прогу, которая использовалась в том числе для создания "рисующих" загрузчиков экрана (как в Mikie). Суть этой проги в том, что она просто считывает символьные данные с загруженного экрана: 8х8, плюс цвет и адрес (специально для загрузчиков). Адрес в том случае, если в загрузчике нет таблицы адресов.

Orionsoft
22.06.2008, 18:47
а никто не помнит , что надо было прописать из бейсика , чтоб при команде
LOAD "scr1"CODE 16384 название кодового блока не выводилось на экран ?

goodboy
22.06.2008, 20:44
нужно переправить канал печати вместо экрана на принтер. только я уже запамятовал какие переменные бейсика надо изменить.

Orionsoft
22.06.2008, 21:35
goodboy, мне тоже также ))
в итоге решил подругому
СПС !

tmp_online
23.06.2008, 17:46
ну-ка ну-ка, как решил по-другому?) Или это секретные сведения?

Orionsoft
23.06.2008, 18:52
да , через call 1366 грузя заголовок в другое место
про печать в 3 канал я помню, но быстрее написать пару строчек кода
чем искать старые тетрадки .
результат не заставил себя ждать ))
ПЫЩЩЩ-шщшщшщ (http://youtube.com/watch?v=k6qhzswd4Ig)

goodboy
23.06.2008, 19:58
да , через call 1366 грузя заголовок в другое место

а зачем тогда заголовок, если грузишь из кода ?
и ещё лучше сделав начальные настройки врезаться на 1378, это исключит вываливание в бейсик при ошибке

Orionsoft
23.06.2008, 20:25
а магнитофонный звук был заранее приготовлен и не подлежал редактированию
вот по этому

ProSoft
08.08.2008, 19:59
в архиве содержатся 3 файла программы:

я тоже помню этот пакет от Н.Родионова.
а где теперь можно этот архив взять, кто-нить знает?

Спасибо.

transman
09.08.2008, 12:03
а никто не помнит , что надо было прописать из бейсика , чтоб при команде
LOAD "scr1"CODE 16384 название кодового блока не выводилось на экран ?
в ВАСИКЕ без тырдоса- poke 23739,111
вернуть как было - poke 23739,244

еще poke 23659,0 если не путаю. но у него последствия - при выходе в ВАСИК по BREAK - черный экран с зависанием.
вернуть как было - poke 23659,2

Antipod
20.08.2008, 16:56
В свое время тож мучался с биллгилбертовскими загрузчиками, разломать не хватало квалификации, а поставить бессмертие на некоторые игры хотелось ( проблемой было узнать адреса загрузки блоков и адрес запуска программы ), поэтому заюзал такое...
Все попавшиеся мне игры имели упакованную картинку и потом несколько блоков собсна игры. Причем картинки были самораспоковывающимися, тость их можно было загрузить отдельно, запустить по адресу загрузки - и имеем картинку на экране. На этом и основан хак. Написал свою собственную "картинку", которая при запуске восстанавливала область системных переменных, печатала адрес вызова и вываливалась в бейсик, потом загружал генс, и по адресу вызова смотрел на незащищенный загрузчик...
Такой нюанс: картинка была универсальна, имела размер в стандартный спектрумовский экран и оканчивалась нулями ( байт ксорки находился сразу за кодом ), таким образом прекращение чтения между собственно кодом и концом "картинки" не давало ошибки, что делало "картинку" универсальной таблеткой от билл гилберта:)

Shadow Maker
20.08.2008, 19:43
Ну этим по моему много кто в те времена пользовался. Я правда вручную ломал, благо у меня всегда был Scorpion ZS 256, так что это проблем не составляло никаких. Ломать на тап-версиях это то еще удовольствие :)

rnd.gen
22.08.2008, 15:54
в ВАСИКЕ без тырдоса- poke 23739,111
вернуть как было - poke 23739,244

еще poke 23659,0 если не путаю. но у него последствия - при выходе в ВАСИК по BREAK - черный экран с зависанием.
вернуть как было - poke 23659,2

Это действует и на блоки типа bytes? и как долго? до резета если ничего не менять?

goodboy
22.08.2008, 16:04
Это действует и на блоки типа bytes? и как долго? до резета если ничего не менять?

(23739) это смена канала, вместо печати чего-угодно на экране всё уходит на принтер.конечно после reset`a всё вернётся на свои места.

Splinter
25.08.2008, 01:07
23659 вобще трогать не стоит, это переменная количества строк в редактируемой области, при сбое загрузки система повиснет...

А гилбертовские загрузчики нужно смотреть дизасмом ИМХО на то он и гилберт, что всегда все написано в кодах, да еще не ровен час отксорено....