Мысли вслух:
Как правильно заметил CodeMaster - VROM должен был обеспечивать не только защиту, но и стабильную работу.
Начнем сначала - насколько я понял, если просто скопировать прошивку, то ZX Next нормально работает примерно первые три минуты. Значит основной нужный нам код или большая его часть без ПБ. Тогда если несколько раз считывать дамп с холодной ПЗУ и если там будут плавающие биты или даже байты, то это мишура и к основному коду не имеет никакого отношения. Иначе бы ZX Next VROM просто не работал бы нормально в течении первых трех минут. Хотя это может и не совсем так, некоторые биты могут плавать и в основном коде сразу же, но обэтом чуть позже.
Что же может происходить в эти первые три минуты:
1. Предположим что в основном коде нет ПБ и он(основной код) собирает статистику по всей ПЗУ о ПБ и когда соберет ее и убедится что чтото не так, то отрубается. Но.... это слишком явно с точки зрения раскрытия кода и слишком сложно в реализации с точки зрения аппаратной части(нужна стабильность в плавании постоянного количества ПБ, причем в разное время и в разных местах). Так что этот вариан отпадает.
2. По всей ПЗУ в виде мишуры записано куча плавающих битов и даже байтов(чтоб при взломе было трудно найти закономерность). При этом несколько реальных ПБ есть в основном коде.
Думаю немного не так, много незначащих, а те 10 они скорей всего не анализируются, а находятся в основном коде и выполняются. Как бы объяснить по доходчивей
Скажем есть задача - подвесить проц через три минуты.
Один из вариантов переполнить стек, так чтоб через три минуты он переполнился и проц фиг знает что начал выполнять.
Вот простой пример:
start:
call loop
jp start
loop:
nop
jp start
Стек переполнится.
А теперь представим что в байте где стоит nop и там есть плавающие биты и nop заменяется на ret. Это конечно утрировано, но идея думаю понятна.
Кроме стека еще куча возможностей завесить проц.
Скажем заводим какой либо счетчик и его нужно будет обнулять раз в три минуты, а иначе он переполнится.
Вот и нужны несколько байт с плавающими битами чтоб гарантировано один из них сработал, т.е. "поплыл" в нужное нам русло.
Хороший пример тому в AVR - watchdog
Если вовремя не обнулить его, то проц резетится.
И нужно тупо в код в разные места натыкать несколько раз обнуление таймера и все.
Применимо к нашему случаю с ПБ получится - байты будут считываться либо nop, либо обнуление таймера. Итого обе инструкции не влияют на выполнение основного кода, а на нормальную работоспособность проца ох как даже влияют. А еще натыкать пару сотен ПБ в неиспользуемые места, то попробуй повычисляй тогда
Т.е. получается нужно всего лишь вычислить незначащие байты в основном исполняемом коде, точнее не влияющие на выполнение основной задачи поставленной перед ZX Next VROM и правильно исправить их.
И Conan думаю знает что нужно искать. Допускаю что он может и не помнить где именно они находятся, но точно знает что нужно искать и на что править
Впомним те годы (80-90) когда все это делалось.
Кто мог - тот создавал, а кто не мог - тот тупо копировал.
Причем даже и без всякой защиты частенько толком скопировать то без ошибок не могли
Так что городить чтото невероятное небыло смысла.
Как он правильно сказал, для того кто может, не составит труда написать программу по новой.
А кто не может - тот фик скопирует и простую защиту.
Защита была не от производителей Profi, АТМ, Scorpion и т.п.,
а от тех кто тупо пытался копировать.
Что первым делом будут делать ?
Правильно - пытаться считывать несметное количество раз ПЗУ и искать закономерность
Флаг им в руки, там больше пол ПЗУ с ПБ. Искать закономерность будут всю жизнь.
Через неделю им надоест и они другим займутся, т.к. как говорится время деньги.
Думаю расчет как раз и был на это.
Исходя из соотношения трудозатраты-откат ни за что не поверю что в ZX Next VROM использовалась защита на уровне космических технологий(чтоб все плавало так, что даже зависило от направления ветра на марсе и при этом все это можно было просчитать, да к тому же при всем при этом основная программа выполнялась стабильно).
Хотя думаю и понимаю его почему он не хочет просто так об этом рассказать.![]()






Ответить с цитированием