24567, 0 Зачастую просто забивали Dec A на NOP. Просто удаляли инструкцию отнимающую что-то - вместо нее вставляли команду не делающую ничего. Либо это был RET - значение 201, которое возвращало выполнение из вызова CALL. А вот конкретного значения жизней, забиваемого в память, такого было мало.
Сохраненки тоже были тогда, например в игре Elite,помню фокус с Робокоп делали так, когда проходишь первый уровень нужно было загружать второй уровень игры с кассеты, сначала загружали часть блока второго уровня, потом останавливали кассету и перематывали на следующий блок, но уже любого другого уровня,что бы не проходить все заново, и это ещё до появления журналов с кодами взлома.
Когда переводил игры с кассеты уже на дискеты, тоже свою надпись вставлял "Disked by ..." и в конце добавлял выбор бесконечных жизней)) А к играм для которых не было кодов, сам подбирал при помощи встроенного отладчика с дизассемблером, прерывая игры кнопкой NMI. И иногда это удавалось, хотя чаще наблюдал просто глюки да зависания))
Когда в ход пошли дисководы была хитрая защита. Код игры был зашифрован. Загрузчик сначала расшифровывал ее, затем запускал. А если точнее, то загрузчик сначала расшифровывал конец своего кода, где было зацикливание расшифровщика и вызов самой игры. Ничего, ломал)
Насколько я помню, сохраняться в спектральных играх можно было, только сохранения надо было записывать отдельно, на кассету или диск, при последующей загрузке игры нужно было загрузить и сохранение. Какой порядок записи сохранений был, не помню уже, давно это было, но точно помню как мы рубились в Elite, Renegade, в какие то игры ещё и грузились потом уже далеко не с начала, особенно Elite в памяти отложилась, помню опыта накопилось, крутой корабль, денег куча, мы с приятелями потом эти сохранения продавали. :)
А еще некоторые игрушки точнее загрузчики приходилось ломать когда в ход пошли дисководы и любимые игрушки перекидывались на диски. Некоторые хитрые загрузчики прятали ячейку старта игрушки, что бы нельзя было ее дизассемблировать.
о, поки я любил, собирал их отовсюду, откуда только можно было и записывал в отдельную тетрадочку, чтобы не потерялись. Когда у меня появился современный ПК, даже в Экселе сделал книгу с поками. А Билла Гилберта обычно ломал просто - после загрузки бейсика нажимаешь Break, потом border 0, ink 6. Затем при помощи дампа менял номера строк, которые часто были все нулевыми и вставлял поки куда надо. Сейчас у меня другой прикол - люблю проходить старые игры по-честному, которые в детстве проходил с поками.
А я вообще удивляюсь - как мы раньше проходили эти игры. Dan Dare проходил неск. раз без всяких читов. А сейчас бы до соседнего экрана добежать и не умереть.
Прям merge "" выполнил и все, щастье. Не помогал против Гилберта останов магнитофона, сбрасывалось его чудо сразу. (да и не один Гилберт такой фигней занимался) Никаких randomize тоже не было, сам загрузчик был уже в кодах написан. Даже если удавалось найти место где запускалась именно игра и перехватить управление - книжечки с поками имели 50% нерабочих рецептов ( или версии игр ходили разные, или опечатки). Mons загрузить - еще понять сперва надо куда в памяти его деть, ее хватало только под саму игру. Часто бывало грузили в регион 1 чтобы подебажить регион 2, игра уже не запускалась ес-но при этом. Что хорошо получалось если было книжное нерабочее "бессмертие", вручную рядом дизасемблировать код и уже думать что там. Обычный 48к, без всяких волшебных интерфейсов.
Ломался Гилберт. Просто загрузчик загружался не по адресу бейсик программы, а в нижнюю память, где и анализировался. Ну а там в нужном месте 3 байта менялись на команду JP и загрузчик записывался уже модифицииованным. Дальше - дело техники. Кто он такой вообще? Наверное хакер, который защищал программы? Эклектика.
@@hustedjack Поляк, снимал фирменные защиты и дальше толкал как "cracked by". Сломать загрузчик != поставить бессмертие. С дампом памяти - не вопрос. На обычных 48к его не было. Загрузчик по-другому адресу - хак из черной книжки Родионова, была у всех такая, наверное. Даже если перегоняли код в: 10 load "" screen$ 20 load "" code Еще сама игра как бы есть, в которой ни черта не понятно. После каждой попытки читать ленту такое себе занятие.
я помню свой загрузчик делал изощрялся, чисто для себя, в бейсике за командой REM писал код на ассемблере где запускал саму программу причем адрес высчитывал во встроенном калькуляторе ( кто знает тот помнит какой там калькулятор). по моему мнению получалось достаточно безумно ))))
@@vsn1980g А запуск этой программки осуществлялся наверно с помощью RANDOMIZE USR 0 в следующей после REM строке, где под "0" был скрыт адрес начала программки. Если эту строчку вызвать на редактирование в бейсике, то аргумент "0" становился действительно нулевым адресом старта, т.е. начало ПЗУ, и приводил к сбросу. Я забыл как это делается, связано как-то с системной переменной, которая меняет адрес начала BASIC-программы.
В гилбертовских хаках, загрузка по MERGE прокатывала только в ранних вариантах. Потом стали применяться защиты от останова и просмотра листинга. Да и, вообще масса иных приемов. Блоки с неправильной длиной, блоки без заголовков, "хитрые" пилот-тоны...
Для меня взлом кода игр тогда стал лучшим развлечением на ZX. А разбираясь в коде игры, очень часто можно было увидеть, что от тебя намеренно прятали алгоритм уменьшения жизней, или что ты там искал, и разобраться в этом становилось вызовом. Написал софтинку findsprite для поиска спрайтов, но она оказалась очень удачным инструментом для предварительного исследования программы-жертвы. За пару минут становилось понятно где графика, где код, где музыка и т.д. Эхх, золотое время... Ну и загрузчики других хакеров тоже взламывать очень интересно было. Из наших больше Кирилл Панюшкин запомнился. У него в коде loader'а каунтер на прерывании висел. Кажется, Game Over игрушка называлась.
До чего просто было ломать все подряд на Скорпионе... И до сих пор знаю ассемблер в совершенстве (на уровне бога, честно...). А Билла Гилберта вспомнил - респект.
@@MetaJamm Вот как раз я и писал уйму уймищную кода, но именно недокументированные возможности старался не использовать для сохранения совместимости, хоть и знаю их все.
А я даже большие игры какие-то бил на куски, чтобы можно было в память загрузить дизассемблер и с его помощью попробовать найти нужное место в коде. После правки ячеек памяти загружал с ленты уже второй кусок игры и запускал игру. И заранее не было известно в каком из двух кусков нужный мне код находится. :) Длительный процесс этот был. Но получалось. В основном условные переходы (JZ) надо было искать. Часть правок приводила к моментальным зависаниям. Еще часть к странным артефактам. :) Иногда забавным.
Как раз задача состояла в обратном ))) Ломалось в нем - многое, но важно было что бы во время загрузок что-то не пошло не так (а оно (частенько) сбоило (и нужно было искать в коде как запустить то, что уже (чудом) загрузилось в память)).
У меня была Nebulus и Krakout. После установки игры появлялся экран, где можно было нажать английскую букву "t", и игра запускалась с бесконечными жизнями. А потом Небулус "зежевало", и больше с такой версией мне игра не попалась (до сих пор плакать хочется). Даже уже на эмуляторах такой версии игр так и не нашел. Если у кого есть, буду благодарен. Кстати, у меня игра Freddy Hsrdest - загружалась не с полоскам по бокам, а с обычным счетчиком который шел в обратном направлении - это было мегакруто)
Масса ошибок. Нет, командой poke не ставили 0 в ячейку с количеством жизней и программа не сходила с ума. Нулём затирали dec a и ld (hl),a после dec a или подобное. То есть, просто не давали программе уменьшать количество жизней. А искалось анализом кода в Mons4, например. Сперва ищем что-то типа ld a,количество жизней ld (что-нибудь),a, Потом ищем нет ли где обращения к ld a,(что-нибудь) с dec a и каким-нибудь jr z или jp z или подобного, после которого ld (что-нибудь),a. Вот и всё. Затираем уменьшения и проверяем. Интересно, а видел ли автор бейсик-загрузчики, которые просто вылетают при попытке прерывания по caps shift+break (poke в нужную ячейку и это легко делается - забыл, правда, за давностью лет, в какую)? Видел ли автор загрузчик, внутри которого программа на асме в полях бейсик-программы (обычно, в операторе rem)? Видел ли автор программы, которые раскодируются после загрузки (по заставке, да)? Программа всегда начинается с бейсик-загрузчика, а не обычно. Иначе удачи вам в угадывании в какие адреса загружать и с какого адреса запускать. Нафига автор прерывал загрузку основной программы, когда надо прерывать именно загрузчик и там уже смотреть, как идёт загрузка? Видел ли автор зажатый в загрузчике через clear стек , когда даже операторы бейсика после прерывания caps shift+break не работают? А видел ли подставные операторы (на экране выводит одно, а выполняется совсем другое? Такой фокус на спектруме реализуем).
о да. я когда впервые увидел такой загрузчик (с randomize usr 0), у меня чуть мозг не взорвался ))))) потом уже стал интересоваться, как выглядела строка бейсика в памяти спектрума, и вкурил фокус ))))))
На кассете студии MiM с Dizzy (номер 65) шла Dizzy-6. И вот именно у этой Dizzy-6 был такой загрузчик, взломать который мне тогда вообще не удалось. Никак. Я до сих пор не в курсе, как он устроен и работает. Но с другой стороны, я его лет 20 назад видел и больше не анализировал, что там да как. :)
Да, куча была вариантов, автор упомянул только какие-то совсем простые и даже странные методы ))) Помню ломал я как-то chronos. Там была куча вложенных кодировок. Сами по себе они были простые: пробегался весь код XOR'ом с константой, но они были вложены. Т.е. после пробежки по всему коду сразу после цикла "открывался" следующий цикл, но с другой константой и так раз 10 (если мне не изменяет память). Работа была простая, но муторная - надо было после перекодировщика воткнуть команду возврата, запустить, потом в месте этой команды восстановить нужное значение и снова все повторить )))
Теоретически можно и без бейсик-зогрузчика. Например, кодовый блок грузится в системные переменные, перенаправляет обработчик ошибок или канал вывода... Но тут, как я понял, для неспектрумистов ролик.
@@АўтарівыканаўцаВіктарМіхайлаві О, канал вывода :) А еще переназначить обработку ошибки, а еще переназначить область расположения basic, а еще измененить в стеке номер строки и операнда после GO SUB, так, чтобы RETURN возвращался на операторы, находящиеся дааалеко за REM и комментариями в нем, а там что то типа PRINT `USR 0 , где вместо 0 - ясное дело, не 0, а USR это не команда а текст (т.е. вызываем обработку ошибки - переменная не найдена), но перед USR стоит `, а это перенаправление канала вывода. А в коде, частично размещенном в переменной, сохраненной в памяти, правильной точки входа - полный мусор на первый взгляд, LDIR перекрывающий сам себя так, что образуется новая команда (STS, как минимум на ранних версиях такое не отлавливал) и прочие прелести, типа использования регистра R с работающим IM2 для ксорки, проверяющей свое местоположение во время выполнения. Все эти хинты можно посмотреть например в этих релизах - zxaaa.net/intrip.html, кстати, там есть и bladewarrior ) а читы я любил вставлять как вызов меню с выбором чита в самой игре по SS+CS
В игрухе Sacred sword пароли для следующих уровней можно было получить просканировав память самописной программой на бейсике. Они там хранились подряд и не зашифрованные. Первый из них был PATAHUALPA
Cauldron 2 - прохождение не обязательно было записано игроком 80 уровня. Надо сверять его с архивом записей RZX, если это оно и есть, то в том архиве, во всяком случае, есть отметка "записано с использованием Rollback". А это значит, что по ходу записи прохождения оно как минимум один раз откатывалось на сколько-то секунд назад. Очевидно, при ошибках.
мы тоже ломали, но мы сами искали как раз в коде :) по моему у нас в какой-то момент это стало чем-то вроде спорта - типа, ну, давай, а у тебя что там...
Ну вы бароны! У вас оказывается был доступ к спискам кодов) Мне чтобы пройти Midnight Resistance пришлось ковыряться в машинном коде. И все что у меня было - одна книжка по ассемблеру. И ту я искал три года прежде чем купил
Таргет ренегат проходили все наверное и в конце почти киями получали .... Я придумал вот какой хак: так как игра с кассет шла с загрузкой каждого уровня отдельно я проходил первый уровень, затем грузил название второго но перематывая кассету до тела последнего уровня. Игра дико лагала, вплоть до того что герой мог уйти за экран вверх или вниз, но бывало что грузилась и позволяла пройти этих лысых аппонентов и огрести уже от босса.
В каком-то ЭСМИ, видел тулзу работающюю как cheat engine. Которая анализирует несколько магик-файлов на предмет изменения значения ячеек памяти отвечающие за количество жизней (высвечивая как ячейку в которой лежит число жизней, так и команду инкремента\декремента).
ну каждый искал себе удовольствие поиграть и как продлить прохождение игры:) иногда были простые решения в ведении команд в игре. например в "exelon" - было ухищрения перед началом прохождения, вбить в управление клавиатурой команду по клавишам сверху в низ текстом "z-o-r-b-a". дядя "биля" при загрузке меня не напрягал, а его надписи крякнул и дистрюбетив, я убрал через ассемблер и дальше не парился мозолями на глазах....
Я уже не помню всех подробностей, давно было. Но я начинал взлом с загрузчика заменяя его своим. Это совсем не сложно. Дальше уже разбирался с кодом с помощью MONS 3 и GENS 4. Обычно делал варианты загрузки, то есть если при загрузке удерживать "А", то грузится взломанная версия. То есть где надо что то в коде меняется. Если нет, то обычная.
Уже не помню какая игра была, но была закодирована xor...причем очень интересно,после загрузки загрузчик запускал кусок кода,который сначала расшифровывал один кусок кода и туда делал переход,в этом участке был код который расшифровывал второй участок кода(метод расшифровки был отличен он первого) и туда был уже прыжок,а после этого уже последний кусок кода расшифровывал весь код игры....так как я был мал и глуп,а литературы было мало,то я так и не прошел второго этапа ибо не думал,что может быть такая хитрая система.
А мне батя принес с работы распечатку перевода книги "Undestanding your spectrum", автор наверняка профессор, потому что просто рассказывал о сложном. А первую игру взломал с защитой, которая грузит блок кода поверх стека и адрес возврата из стека - адрес запуска. А в теле загрузчика ложный JMP
Ещё был вариант загрузки программы дешифратора в экранную область внизу. При ошибке получалось, что программа стиралась, так как строка выводилась и курсор. Помню переделывал игру лазер отряд, получилось сделать типа конструктора как в танках на денди, потом играл в переделанные карты.
У меня было две версии игры BATTY. Одна нормальная (три жизни). И другая где я мог задать количество жизни (кажись один раз взломщиком, но потом скопировав её я имел при загрузке например 7-ми жизненную. )))
Я бывало по 5 игр в день "взламывал". Искал счетчик жизней и находил. Чтоб пройти игру. Но у меня был готовый список поков, бессмертий для игр, не помню откуда, в большинстве случаев взлом был не нужен
В моментах остановки программы и поиске заветных POKE в коде, иногда выскакивала бегущая строка Cracked by Bill Gilbert! Что меня дико удивляло ! Как она понимала что я ее ломаю!
Элементарно! Команда CLEAR устанавливала границу, выше которой можно было загружать код. Стек возврата так же автоматом ставился ниже. Если загрузить код поверх стека, управление не вернется интерпретатору и автоматом запустится код. Прерывание загрузки тоже самое сделает.
Не всегда работало, в пару байт отображающую длину одной из строк проги на бейсике вставлялась заведомо огромная величина и мерже не могу выделить столько памяти. была маленькая прога load-merge, которая с этим справлялась
Первый загрузчик, который я полноценно изучил и взломал, был загрузчик игры Exolon Билла Гилберта. Там заставка была такая прикольная - то ли хоккеист, то ли робокоп.
@@null_device Мне он больше голкипера напоминал - зачем космонавту клюшка :))). А ещё я думал, что это и есть сам Билл Гилберт. Тогда я ещё не знал, что он даже не Билл и вообще поляк.
@@null_device Согласен, можно ещё добавить - "так рождаются мифы" :))). Но тема с голкипером мне нравится больше - крутой такой голкипер, попробуй забей.
Да уж, играть в «Диззи» без сохранения - худший ад Спектрума. Да и сейчас новые части пройти очень хочется, но по этой же причине не возьмусь. И быстрое перемещение по карте, как в «Фар край», там не помешало бы в 21 веке.
какой MERGE??? у билла гилберта загрузчик был в машинных кодах! т.е. по мерже программа остановиться, но в листинге бэйсика ты видишь "мусор", потому как в бэйсик он встраивал машинный код!
Его ранние загрузчики, вполне стопорились клавишей BREAK. Потом, начала применяться защита от останова (программа висла или сбрасывалась), но ее можно было загрузить через MERGE. После чего перестал работать и этот метод (использовался баг приводящий к зависанию).
У меня вопрос: - а лицуху с кассеты можно было скопировать на другую кассету через духкассетник? Обычные сборники игр копировались на раз, ещё и в ускоренном проигрывании (данный способ обнаружил сам, интернета тогда не было) - обмен с друзьями кассетами получил новый виток развития :))), единственное, что приходилось в ручную рисовать обложки (принтеры и прочие радости были не доступны).
@@Kaketobilo не-не сборники работали на ура. А вот скажите, как защищали запись звука от копирования? Через корпус кассеты это не работало - разобрал корпус или изменил его немного и всё в порядке. Просто сама технология защиты звука от копирования интересна.
@@sharpeye6366 На одной игрухе прямо поверх пиликаний был посторонний звук типа удара. Хз, это защита или случайный глюк записи. Прочитать игру можно было нормально, а при копировании он становился относительно пиликаний громче и игра на этом месте не грузилась. То есть способ навредить копировальщикам был - с таким дефектом можно сделать сильно ограниченное количество последовательных копирований.
@@Bebebe1111kbj Благодарю за инфу, это очень интересно. Не знал, что звук с кассет в одних случаях проходит нормально, а в других мешает, интересная технология.
При копировании с кассеты на кассету, происходит то же, что и при копировании на ксероксе (нарастает "шум"). Больше всего при этом страдает высокочастотная составляющая. Опять же, программа может использовать свой собственный формат хранения данных и загрузчик, который будет попросту не по зубам копировщику (к примеру, тот же SpeedLock).
Ну у вас журналы были. А мы дедовским способом - перебором, пока игра не подохнет или не изменится, что-то нужное. Так мы вычисляли, где картинки, а где код. Способ крайне не эффективный. Потом мы научились дизасемблировать код, опять же вручную, и дело пошло получше
Так и мы так делали. Особенно когда адрес неверный и пытаешься перебирать по одной цифре, выясняя в каком же месте ошибка. Это как подбирать код к сейфу ) Очень помогал "Копи - Копи", золотая программа.
Merge сразу приводил к зависанию. Там устанавливали длину строки беспредельно большую. Игры это ерунда. А вот ломал кто-нибудь журнал Spectrofon? Вот тут помучиться придется не один день
@@Putin-Lox Что бы вот так, не зная изначально какая там защита, взять и сломать. Да там десятки последовательных шифрований и некоторые из них проверяются не сразу, а уже после, в некоторых программах. И за 20 минут. Ха Ха
игры былы сложными чтобы западный покупатель не жалел потраченных денег при слишком быстром прохождении игры а так получалось что проводишь недели и месяцы и постепенно входишь во вкус с бессмертием это становится очевидно, игра не становится более понятной зато интерес после прохождения уже пропадает
@@Kaketobilo Да. Отличная игра. Достаточно простая и приятная. Из тех, которые можно пройти от начала до конца. Давно мною забытая. Спасибо что напомнили про её существование 😋
Что смешно, для вычисления этих самых "poke" абсолютно не нужно было быть программистом. Нужно было только уметь делать снимок памяти компьютера. Я уже не помню, чем именно делался такой снимок, помню только, что это было просто и доступно даже идиоту. А дальше, играешь, теряешь жизнь - делаешь снимок, играешь дальше, теряешь вторую - делаешь еще снимок. Потом сравниваешь оба и находишь ячейку, отличающуюся на единичку - вот он, нужный адрес. Пишешь туда либо 0, либо 255 - и играй на здоровье. Я сильно упростил описание процесса просто чтобы показать как иногда работали "крутые хакеры". А сборники поуков можно было купить на рынке. Весьма обширные сборники. Кстати, с появлением TRDOS сохранение игры стало банальностью. Просто нажимали кнопку "Magic" и дамп памяти сохранялся на диске. В следующий раз этот дамп просто грузили с диска и игра продолжалась с того места, на котором нажали кнопку. Приблизительно как сегодняшний "спящий" режим на РС.
Снапшоты в кассетную эпоху делались мультифейсом. Им же некоторые горе-хаккеры сдампливали игры, которые были кривые - косые, с запоротой заставкой, несменяемым управлением и не всегда проходимы. Волшебная кнопка на BDI, зачастую действительно добавляла в игру должную щепотку "волшебства". От возможности запороть каталог на дискете, до внезапного зависания загруженной из такого сохранения игры. Это если игра в принципе, позволяла провернуть такое (попробуйте например сохранить таком образом НЛО1\2 или Черный Ворон). Вроде как, значительную часть этих детских болячек пофиксили в скорпионовском ПрофПЗУ.
Poke 23606,60 Сначала СТС кстати переделали его чтобы работал на скорпион 256 потом скорпион с нми А еще припаял к сбросу вг93 кнопку и отключать защиту от ТР-ДОС нми
Дааа... Ломали игрушки, сначала по покесам из журналов, а потом уже сами с MONS4, а потом с STS.
STS ваще сила была)
Когда у меня появился ZX SP. , то поиграв пару месяцев интерес перешёл именно на взлом игр - в этом был сам смысл игры ;)
24567, 0
Зачастую просто забивали Dec A на NOP. Просто удаляли инструкцию отнимающую что-то - вместо нее вставляли команду не делающую ничего.
Либо это был RET - значение 201, которое возвращало выполнение из вызова CALL.
А вот конкретного значения жизней, забиваемого в память, такого было мало.
Сохраненки тоже были тогда, например в игре Elite,помню фокус с Робокоп делали так, когда проходишь первый уровень нужно было загружать второй уровень игры с кассеты, сначала загружали часть блока второго уровня, потом останавливали кассету и перематывали на следующий блок, но уже любого другого уровня,что бы не проходить все заново, и это ещё до появления журналов с кодами взлома.
Да. Причем в elite я сохранялся несколько раз. Мало ли не прочитается))
Когда переводил игры с кассеты уже на дискеты, тоже свою надпись вставлял "Disked by ..." и в конце добавлял выбор бесконечных жизней)) А к играм для которых не было кодов, сам подбирал при помощи встроенного отладчика с дизассемблером, прерывая игры кнопкой NMI. И иногда это удавалось, хотя чаще наблюдал просто глюки да зависания))
Когда в ход пошли дисководы была хитрая защита. Код игры был зашифрован. Загрузчик сначала расшифровывал ее, затем запускал. А если точнее, то загрузчик сначала расшифровывал конец своего кода, где было зацикливание расшифровщика и вызов самой игры. Ничего, ломал)
Насколько я помню, сохраняться в спектральных играх можно было, только сохранения надо было записывать отдельно, на кассету или диск, при последующей загрузке игры нужно было загрузить и сохранение. Какой порядок записи сохранений был, не помню уже, давно это было, но точно помню как мы рубились в Elite, Renegade, в какие то игры ещё и грузились потом уже далеко не с начала, особенно Elite в памяти отложилась, помню опыта накопилось, крутой корабль, денег куча, мы с приятелями потом эти сохранения продавали. :)
А еще некоторые игрушки точнее загрузчики приходилось ломать когда в ход пошли дисководы и любимые игрушки перекидывались на диски. Некоторые хитрые загрузчики прятали ячейку старта игрушки, что бы нельзя было ее дизассемблировать.
о, поки я любил, собирал их отовсюду, откуда только можно было и записывал в отдельную тетрадочку, чтобы не потерялись. Когда у меня появился современный ПК, даже в Экселе сделал книгу с поками. А Билла Гилберта обычно ломал просто - после загрузки бейсика нажимаешь Break, потом border 0, ink 6. Затем при помощи дампа менял номера строк, которые часто были все нулевыми и вставлял поки куда надо. Сейчас у меня другой прикол - люблю проходить старые игры по-честному, которые в детстве проходил с поками.
А я вообще удивляюсь - как мы раньше проходили эти игры. Dan Dare проходил неск. раз без всяких читов. А сейчас бы до соседнего экрана добежать и не умереть.
@@KaketobiloЯ тоже любил проходить Dan Dare. До сих пор помню фразу того инопланетянина: "No, no, put it back!"
Прям merge "" выполнил и все, щастье.
Не помогал против Гилберта останов магнитофона, сбрасывалось его чудо сразу.
(да и не один Гилберт такой фигней занимался)
Никаких randomize тоже не было, сам загрузчик был уже в кодах написан.
Даже если удавалось найти место где запускалась именно игра и перехватить управление - книжечки с поками имели 50% нерабочих рецептов ( или версии игр ходили разные, или опечатки).
Mons загрузить - еще понять сперва надо куда в памяти его деть, ее хватало только под саму игру.
Часто бывало грузили в регион 1 чтобы подебажить регион 2, игра уже не запускалась ес-но при этом.
Что хорошо получалось если было книжное нерабочее "бессмертие", вручную рядом дизасемблировать код и уже думать что там.
Обычный 48к, без всяких волшебных интерфейсов.
Ломался Гилберт. Просто загрузчик загружался не по адресу бейсик программы, а в нижнюю память, где и анализировался. Ну а там в нужном месте 3 байта менялись на команду JP и загрузчик записывался уже модифицииованным. Дальше - дело техники. Кто он такой вообще? Наверное хакер, который защищал программы? Эклектика.
@@hustedjack Поляк, снимал фирменные защиты и дальше толкал как "cracked by". Сломать загрузчик != поставить бессмертие. С дампом памяти - не вопрос. На обычных 48к его не было.
Загрузчик по-другому адресу - хак из черной книжки Родионова, была у всех такая, наверное.
Даже если перегоняли код в:
10 load "" screen$
20 load "" code
Еще сама игра как бы есть, в которой ни черта не понятно. После каждой попытки читать ленту такое себе занятие.
я помню свой загрузчик делал изощрялся, чисто для себя, в бейсике за командой REM писал код на ассемблере где запускал саму программу причем адрес высчитывал во встроенном калькуляторе ( кто знает тот помнит какой там калькулятор). по моему мнению получалось достаточно безумно ))))
@@vsn1980g А запуск этой программки осуществлялся наверно с помощью RANDOMIZE USR 0 в следующей после REM строке, где под "0" был скрыт адрес начала программки. Если эту строчку вызвать на редактирование в бейсике, то аргумент "0" становился действительно нулевым адресом старта, т.е. начало ПЗУ, и приводил к сбросу. Я забыл как это делается, связано как-то с системной переменной, которая меняет адрес начала BASIC-программы.
В гилбертовских хаках, загрузка по MERGE прокатывала только в ранних вариантах. Потом стали применяться защиты от останова и просмотра листинга. Да и, вообще масса иных приемов. Блоки с неправильной длиной, блоки без заголовков, "хитрые" пилот-тоны...
Для меня взлом кода игр тогда стал лучшим развлечением на ZX. А разбираясь в коде игры, очень часто можно было увидеть, что от тебя намеренно прятали алгоритм уменьшения жизней, или что ты там искал, и разобраться в этом становилось вызовом. Написал софтинку findsprite для поиска спрайтов, но она оказалась очень удачным инструментом для предварительного исследования программы-жертвы. За пару минут становилось понятно где графика, где код, где музыка и т.д. Эхх, золотое время...
Ну и загрузчики других хакеров тоже взламывать очень интересно было. Из наших больше Кирилл Панюшкин запомнился. У него в коде loader'а каунтер на прерывании висел. Кажется, Game Over игрушка называлась.
Просто приятное, короткое, содержательное и классное видео! Зачёт!!!
До чего просто было ломать все подряд на Скорпионе... И до сих пор знаю ассемблер в совершенстве (на уровне бога, честно...). А Билла Гилберта вспомнил - респект.
Чтобы знать асм в совершенстве надо написать и разобрать на нём уйму кода, а не просто знать пару недокументированных возможностей.
@@MetaJamm Вот как раз я и писал уйму уймищную кода, но именно недокументированные возможности старался не использовать для сохранения совместимости, хоть и знаю их все.
Ох!Офигенно .Вспомнил как вставлял Dec A )Спасибо за ролик
А я даже большие игры какие-то бил на куски, чтобы можно было в память загрузить дизассемблер и с его помощью попробовать найти нужное место в коде.
После правки ячеек памяти загружал с ленты уже второй кусок игры и запускал игру.
И заранее не было известно в каком из двух кусков нужный мне код находится. :) Длительный процесс этот был. Но получалось. В основном условные переходы (JZ) надо было искать.
Часть правок приводила к моментальным зависаниям. Еще часть к странным артефактам. :) Иногда забавным.
А потом натыкаемся на загрузчик не в бейсике, а машкодом, да ещё с ксорками, и всё становится совсем не так просто.
Спасибо, через 30 лет узнал что Сперктрум можно было сломать.......
Как раз задача состояла в обратном ))) Ломалось в нем - многое, но важно было что бы во время загрузок что-то не пошло не так (а оно (частенько) сбоило (и нужно было искать в коде как запустить то, что уже (чудом) загрузилось в память)).
У меня была Nebulus и Krakout. После установки игры появлялся экран, где можно было нажать английскую букву "t", и игра запускалась с бесконечными жизнями. А потом Небулус "зежевало", и больше с такой версией мне игра не попалась (до сих пор плакать хочется). Даже уже на эмуляторах такой версии игр так и не нашел. Если у кого есть, буду благодарен. Кстати, у меня игра Freddy Hsrdest - загружалась не с полоскам по бокам, а с обычным счетчиком который шел в обратном направлении - это было мегакруто)
Со взлома игр у меня началось изучение ассемблера. А после даже писали поиск байтов и правили участки памяти и даже без дизассемблера.
Масса ошибок.
Нет, командой poke не ставили 0 в ячейку с количеством жизней и программа не сходила с ума. Нулём затирали dec a и ld (hl),a после dec a или подобное. То есть, просто не давали программе уменьшать количество жизней. А искалось анализом кода в Mons4, например. Сперва ищем что-то типа ld a,количество жизней ld (что-нибудь),a, Потом ищем нет ли где обращения к ld a,(что-нибудь) с dec a и каким-нибудь jr z или jp z или подобного, после которого ld (что-нибудь),a. Вот и всё. Затираем уменьшения и проверяем.
Интересно, а видел ли автор бейсик-загрузчики, которые просто вылетают при попытке прерывания по caps shift+break (poke в нужную ячейку и это легко делается - забыл, правда, за давностью лет, в какую)? Видел ли автор загрузчик, внутри которого программа на асме в полях бейсик-программы (обычно, в операторе rem)? Видел ли автор программы, которые раскодируются после загрузки (по заставке, да)? Программа всегда начинается с бейсик-загрузчика, а не обычно. Иначе удачи вам в угадывании в какие адреса загружать и с какого адреса запускать. Нафига автор прерывал загрузку основной программы, когда надо прерывать именно загрузчик и там уже смотреть, как идёт загрузка? Видел ли автор зажатый в загрузчике через clear стек , когда даже операторы бейсика после прерывания caps shift+break не работают? А видел ли подставные операторы (на экране выводит одно, а выполняется совсем другое? Такой фокус на спектруме реализуем).
о да. я когда впервые увидел такой загрузчик (с randomize usr 0), у меня чуть мозг не взорвался )))))
потом уже стал интересоваться, как выглядела строка бейсика в памяти спектрума, и вкурил фокус ))))))
На кассете студии MiM с Dizzy (номер 65) шла Dizzy-6. И вот именно у этой Dizzy-6 был такой загрузчик, взломать который мне тогда вообще не удалось. Никак. Я до сих пор не в курсе, как он устроен и работает. Но с другой стороны, я его лет 20 назад видел и больше не анализировал, что там да как. :)
Да, куча была вариантов, автор упомянул только какие-то совсем простые и даже странные методы )))
Помню ломал я как-то chronos. Там была куча вложенных кодировок. Сами по себе они были простые: пробегался весь код XOR'ом с константой, но они были вложены. Т.е. после пробежки по всему коду сразу после цикла "открывался" следующий цикл, но с другой константой и так раз 10 (если мне не изменяет память). Работа была простая, но муторная - надо было после перекодировщика воткнуть команду возврата, запустить, потом в месте этой команды восстановить нужное значение и снова все повторить )))
Теоретически можно и без бейсик-зогрузчика. Например, кодовый блок грузится в системные переменные, перенаправляет обработчик ошибок или канал вывода...
Но тут, как я понял, для неспектрумистов ролик.
@@АўтарівыканаўцаВіктарМіхайлаві О, канал вывода :) А еще переназначить обработку ошибки, а еще переназначить область расположения basic, а еще измененить в стеке номер строки и операнда после GO SUB, так, чтобы RETURN возвращался на операторы, находящиеся дааалеко за REM и комментариями в нем, а там что то типа PRINT `USR 0 , где вместо 0 - ясное дело, не 0, а USR это не команда а текст (т.е. вызываем обработку ошибки - переменная не найдена), но перед USR стоит `, а это перенаправление канала вывода.
А в коде, частично размещенном в переменной, сохраненной в памяти, правильной точки входа - полный мусор на первый взгляд, LDIR перекрывающий сам себя так, что образуется новая команда (STS, как минимум на ранних версиях такое не отлавливал) и прочие прелести, типа использования регистра R с работающим IM2 для ксорки, проверяющей свое местоположение во время выполнения. Все эти хинты можно посмотреть например в этих релизах - zxaaa.net/intrip.html, кстати, там есть и bladewarrior ) а читы я любил вставлять как вызов меню с выбором чита в самой игре по SS+CS
В игрухе Sacred sword пароли для следующих уровней можно было получить просканировав память самописной программой на бейсике. Они там хранились подряд и не зашифрованные. Первый из них был PATAHUALPA
Помню эту чудную надпись. Даже не задумывался в те времена, что он там взламывал .
Cauldron 2 - прохождение не обязательно было записано игроком 80 уровня. Надо сверять его с архивом записей RZX, если это оно и есть, то в том архиве, во всяком случае, есть отметка "записано с использованием Rollback". А это значит, что по ходу записи прохождения оно как минимум один раз откатывалось на сколько-то секунд назад. Очевидно, при ошибках.
мы тоже ломали, но мы сами искали как раз в коде :) по моему у нас в какой-то момент это стало чем-то вроде спорта - типа, ну, давай, а у тебя что там...
Ну вы бароны! У вас оказывается был доступ к спискам кодов) Мне чтобы пройти Midnight Resistance пришлось ковыряться в машинном коде. И все что у меня было - одна книжка по ассемблеру. И ту я искал три года прежде чем купил
Да помню ещё забыл что часто в загрузчике были команды на изменение цвета букв inc и paper бумаги в результате текст писался белым по белому.
Таргет ренегат проходили все наверное и в конце почти киями получали .... Я придумал вот какой хак: так как игра с кассет шла с загрузкой каждого уровня отдельно я проходил первый уровень, затем грузил название второго но перематывая кассету до тела последнего уровня.
Игра дико лагала, вплоть до того что герой мог уйти за экран вверх или вниз, но бывало что грузилась и позволяла пройти этих лысых аппонентов и огрести уже от босса.
Зет иксь спектрум. Ржу до сих пор))
Филе, филе, говорил продавец на радиорынке, когда покупали игры для ZX на дискетах 5.25
P.s. так читается file на немецком ломанном))))
В каком-то ЭСМИ, видел тулзу работающюю как cheat engine. Которая анализирует несколько магик-файлов на предмет изменения значения ячеек памяти отвечающие за количество жизней (высвечивая как ячейку в которой лежит число жизней, так и команду инкремента\декремента).
ну каждый искал себе удовольствие поиграть и как продлить прохождение игры:) иногда были простые решения в ведении команд в игре. например в "exelon" - было ухищрения перед началом прохождения, вбить в управление клавиатурой команду по клавишам сверху в низ текстом "z-o-r-b-a". дядя "биля" при загрузке меня не напрягал, а его надписи крякнул и дистрюбетив, я убрал через ассемблер и дальше не парился мозолями на глазах....
Я уже не помню всех подробностей, давно было. Но я начинал взлом с загрузчика заменяя его своим. Это совсем не сложно. Дальше уже разбирался с кодом с помощью MONS 3 и GENS 4. Обычно делал варианты загрузки, то есть если при загрузке удерживать "А", то грузится взломанная версия. То есть где надо что то в коде меняется. Если нет, то обычная.
Сам делал в первом файле предложение бесконечных жизней ,(y/n). Да, были времена в детстве..)
На моём zx был отладчик по адресу 100. Очень помогал.
Да было время :)
Уже не помню какая игра была, но была закодирована xor...причем очень интересно,после загрузки загрузчик запускал кусок кода,который сначала расшифровывал один кусок кода и туда делал переход,в этом участке был код который расшифровывал второй участок кода(метод расшифровки был отличен он первого) и туда был уже прыжок,а после этого уже последний кусок кода расшифровывал весь код игры....так как я был мал и глуп,а литературы было мало,то я так и не прошел второго этапа ибо не думал,что может быть такая хитрая система.
А мне батя принес с работы распечатку перевода книги "Undestanding your spectrum", автор наверняка профессор, потому что просто рассказывал о сложном.
А первую игру взломал с защитой, которая грузит блок кода поверх стека и адрес возврата из стека - адрес запуска. А в теле загрузчика ложный JMP
Навороты были с использованием регистров R и I. Вот это была "веселая" очень защита. Книжек про это умных не было. Ломай как хочешь.
@@ВикторМ-в6э И с половинками индексных регистров IX, IY. Они работали префиксированием аналогичных команд с половинками HL.
@@moro-4684 и такую гадость делали тоже... документации по Zilog не было у народа, тем и пользовались кул хацкеры.
Ещё был вариант загрузки программы дешифратора в экранную область внизу. При ошибке получалось, что программа стиралась, так как строка выводилась и курсор. Помню переделывал игру лазер отряд, получилось сделать типа конструктора как в танках на денди, потом играл в переделанные карты.
У меня было две версии игры BATTY. Одна нормальная (три жизни). И другая где я мог задать количество жизни (кажись один раз взломщиком, но потом скопировав её я имел при загрузке например 7-ми жизненную. )))
Я бывало по 5 игр в день "взламывал". Искал счетчик жизней и находил. Чтоб пройти игру. Но у меня был готовый список поков, бессмертий для игр, не помню откуда, в большинстве случаев взлом был не нужен
Да, игры на Спектруме это особый хардкор))
В моментах остановки программы и поиске заветных POKE в коде, иногда выскакивала бегущая строка Cracked by Bill Gilbert! Что меня дико удивляло ! Как она понимала что я ее ломаю!
Элементарно! Команда CLEAR устанавливала границу, выше которой можно было загружать код. Стек возврата так же автоматом ставился ниже. Если загрузить код поверх стека, управление не вернется интерпретатору и автоматом запустится код. Прерывание загрузки тоже самое сделает.
Были книги с кодами. Сделайте подробный обзор исторических статей по теме ZX. Спасибо.
Мердж был любимой командой, после лоад :)
Не всегда работало, в пару байт отображающую длину одной из строк проги на бейсике вставлялась заведомо огромная величина и мерже не могу выделить столько памяти. была маленькая прога load-merge, которая с этим справлялась
боги !! blade warrior пооомню "ээээрорис бестонтыс" (на пямять написал это было ооочень давно) но дохли изи ))
Cracked by Bill Gilbert!
Первый загрузчик, который я полноценно изучил и взломал, был загрузчик игры Exolon Билла Гилберта. Там заставка была такая прикольная - то ли хоккеист, то ли робокоп.
@@-John-Rambo- это был то самый "космонавт" за которого вы играли. :)
@@null_device
Мне он больше голкипера напоминал - зачем космонавту клюшка :))). А ещё я думал, что это и есть сам Билл Гилберт. Тогда я ещё не знал, что он даже не Билл и вообще поляк.
@@-John-Rambo- эффект Манделы, в чистом виде. Нет там на заставочной картинке никакой клюшки. В правой руке - пистик. Левая, сжата в кулак.
@@null_device
Согласен, можно ещё добавить - "так рождаются мифы" :))). Но тема с голкипером мне нравится больше - крутой такой голкипер, попробуй забей.
Не поук, а поке! ))
Рисовал карты для Simcity - генератор не умел реки и острова)))
Самая лучшая защита была в игре airwolf от призрачного bill gilbert. До сих пор ни кто не знает кто это такой или что это такое..
Билл Гилберт легенда!
Да уж, играть в «Диззи» без сохранения - худший ад Спектрума. Да и сейчас новые части пройти очень хочется, но по этой же причине не возьмусь. И быстрое перемещение по карте, как в «Фар край», там не помешало бы в 21 веке.
Сейчас сохранение есть в эмуляторах. Проблема в том, что с тех пор привыкли к большему графону.
Первую Вторую и шестую я прошел без бессмертия. 3 и4. У меня не было. А 5я по мне самая сложная. Не смог
Спасибо. Понастальгировал )
Вот и мы в настоящее время с помощью чит энжина ковыряемся в кодах игр в соц сетях.
какой MERGE??? у билла гилберта загрузчик был в машинных кодах! т.е. по мерже программа остановиться, но в листинге бэйсика ты видишь "мусор", потому как в бэйсик он встраивал машинный код!
Его ранние загрузчики, вполне стопорились клавишей BREAK. Потом, начала применяться защита от останова (программа висла или сбрасывалась), но ее можно было загрузить через MERGE. После чего перестал работать и этот метод (использовался баг приводящий к зависанию).
Да делалось легко не все закодированы были..после загрузки титульной картинки
Я первый просмотри лайк
Всуе этому самому пресловутому Bill Gilbert преписывали в начале две буквы: "de" :))) Интересно что это за чел все таки был.
Так вот кто такой Билл Гилберт
ломали как спички мы
слушай, а что за игра 2.52- 3.00 там про самолет который нападает. искал ее как раз.
Harrier Attack
У меня вопрос:
- а лицуху с кассеты можно было скопировать на другую кассету через духкассетник?
Обычные сборники игр копировались на раз, ещё и в ускоренном проигрывании (данный способ обнаружил сам, интернета тогда не было) - обмен с друзьями кассетами получил новый виток развития :))), единственное, что приходилось в ручную рисовать обложки (принтеры и прочие радости были не доступны).
Конечно копировались, но качество сильно страдало. Мне давали такие сборники, очень редко что - то можно было загрузить из них.
@@Kaketobilo не-не сборники работали на ура.
А вот скажите, как защищали запись звука от копирования?
Через корпус кассеты это не работало - разобрал корпус или изменил его немного и всё в порядке.
Просто сама технология защиты звука от копирования интересна.
@@sharpeye6366 На одной игрухе прямо поверх пиликаний был посторонний звук типа удара. Хз, это защита или случайный глюк записи. Прочитать игру можно было нормально, а при копировании он становился относительно пиликаний громче и игра на этом месте не грузилась. То есть способ навредить копировальщикам был - с таким дефектом можно сделать сильно ограниченное количество последовательных копирований.
@@Bebebe1111kbj Благодарю за инфу, это очень интересно.
Не знал, что звук с кассет в одних случаях проходит нормально, а в других мешает, интересная технология.
При копировании с кассеты на кассету, происходит то же, что и при копировании на ксероксе (нарастает "шум"). Больше всего при этом страдает высокочастотная составляющая. Опять же, программа может использовать свой собственный формат хранения данных и загрузчик, который будет попросту не по зубам копировщику (к примеру, тот же SpeedLock).
Ну у вас журналы были. А мы дедовским способом - перебором, пока игра не подохнет или не изменится, что-то нужное. Так мы вычисляли, где картинки, а где код. Способ крайне не эффективный. Потом мы научились дизасемблировать код, опять же вручную, и дело пошло получше
Так и мы так делали. Особенно когда адрес неверный и пытаешься перебирать по одной цифре, выясняя в каком же месте ошибка. Это как подбирать код к сейфу ) Очень помогал "Копи - Копи", золотая программа.
Merge сразу приводил к зависанию. Там устанавливали длину строки беспредельно большую.
Игры это ерунда. А вот ломал кто-нибудь журнал Spectrofon? Вот тут помучиться придется не один день
@@Putin-Lox Что бы вот так, не зная изначально какая там защита, взять и сломать. Да там десятки последовательных шифрований и некоторые из них проверяются не сразу, а уже после, в некоторых программах. И за 20 минут. Ха Ха
Подскажите, как называется игра на 1:54?
Edd the Duck
Добрый день.
Как называется игра с первой минуты по минуту шестнадцать секунд?
0:57 Action Force II
@@Kaketobilo спасибо. Это игра из детства. Первая которую я увидел и помню очень отрывочно.
Спасибо за контент. Очень увлекательно.
игры былы сложными чтобы западный покупатель не жалел потраченных денег при слишком быстром прохождении игры
а так получалось что проводишь недели и месяцы и постепенно входишь во вкус
с бессмертием это становится очевидно, игра не становится более понятной зато интерес после прохождения уже пропадает
Pokes надо было вводить перед заставкой
Ааааа! Помогите! Как называется игрушка на 5:45? Не скажите - умру на вечерней зорьке от тоски!
Highway Encounter от Vоrtex. Вы играли в неё?
@@Kaketobilo Да. Отличная игра. Достаточно простая и приятная. Из тех, которые можно пройти от начала до конца. Давно мною забытая. Спасибо что напомнили про её существование 😋
@@merlin-ulg блин. сколько раз видел на кассете Highway Encounter 2, и всегда это была все та же первая часть :(
Что смешно, для вычисления этих самых "poke" абсолютно не нужно было быть программистом. Нужно было только уметь делать снимок памяти компьютера. Я уже не помню, чем именно делался такой снимок, помню только, что это было просто и доступно даже идиоту. А дальше, играешь, теряешь жизнь - делаешь снимок, играешь дальше, теряешь вторую - делаешь еще снимок. Потом сравниваешь оба и находишь ячейку, отличающуюся на единичку - вот он, нужный адрес. Пишешь туда либо 0, либо 255 - и играй на здоровье.
Я сильно упростил описание процесса просто чтобы показать как иногда работали "крутые хакеры".
А сборники поуков можно было купить на рынке. Весьма обширные сборники.
Кстати, с появлением TRDOS сохранение игры стало банальностью. Просто нажимали кнопку "Magic" и дамп памяти сохранялся на диске. В следующий раз этот дамп просто грузили с диска и игра продолжалась с того места, на котором нажали кнопку. Приблизительно как сегодняшний "спящий" режим на РС.
Снапшоты в кассетную эпоху делались мультифейсом. Им же некоторые горе-хаккеры сдампливали игры, которые были кривые - косые, с запоротой заставкой, несменяемым управлением и не всегда проходимы.
Волшебная кнопка на BDI, зачастую действительно добавляла в игру должную щепотку "волшебства". От возможности запороть каталог на дискете, до внезапного зависания загруженной из такого сохранения игры. Это если игра в принципе, позволяла провернуть такое (попробуйте например сохранить таком образом НЛО1\2 или Черный Ворон).
Вроде как, значительную часть этих детских болячек пофиксили в скорпионовском ПрофПЗУ.
Проще играть в эмуляторе.
Все игры ломал COPY-COPY)))
ADM 7.08 решал
С дисководом было проще, кнопку Magic и вперёд, правь как тебе нать))
Сечёшь! :)
Poke 23606,60
Сначала СТС кстати переделали его чтобы работал на скорпион 256 потом скорпион с нми
А еще припаял к сбросу вг93 кнопку и отключать защиту от ТР-ДОС нми