Pull to refresh

Comments 81

Когда увидел заголовок вспомнил "опознай самолет" в F19, номер девушки из телефонной книги "Leisure suit Larry III" и т.д.
Автору спасибо, про аппаратные защиты и про призмы не знал.
В первом Ларри вопросы были скорее на определение совершеннолетия и касались широко известных фактов, например, как расшифровывается название фирмы "ИБМ" или кто из исполнил какую-то песню.
В игре "Budokan" при входе нужно было сопоставить текст на японском с гербом, причем иероглифы соответствовали моменту в который нажимаешь кнопку на заставке, я разучил на определенной секунде нажимать пробел и получать одно известное мне сочетание герба и текста.
Была еще популярна о том что игроделы закладывают вирусы, которые активируются при неправильных ответах на эти вопросы.

Вроде, силуэты надо было определять и в F-117A.

Но да, спасибо этой проверке - силуэты запоминались накрепко.

Вспомнил спэйс квест с Роджером Вилко, там были координаты для гиперпрыжка или чот такое.

их оборонял «Церикопик», проверяющий процедуру обработки немаскируемого прерывания, которая у «Байта» и оригинального Спектрума отличалась.

NMI в Спектруме не использовалось вообще. Оно использовалось внешними устройствами, такими, как контроллер дисковода. Совершенно непонятно, о какой "процедуре обработки NMI" идет речь.

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

NMI на Z80 генерируется аппаратно.

К сожалению не осталось никаких следов от той эпохи, чтобы посмотреть листинг кода, даже название забыл напрочь. В книжках по архитектуре на русском примерно тоже самое было написано про немаскируемые прерывания, только БГ (тот самый) точно знал что именно происходит при вызове команды на самом деле, поскольку куда дальше переносился адрес исполнения, мне узнать не удалось

NMI нашёл применение в продвинутых клонах, насчёт «Байта» не знаю (а это клон очень продвинутый), но у «Орели БК-08» одна из кнопок прямо называется NMI, там можно в любой момент вытащить на экран отладчик, покопаться в содержимом ОЗУ, и вернуться обратно в работавшую перед этим программу.

Это сколько угодно. Но это уже не каноничный Спектрум, и программы, расчитанные на особенности советских клонов (да еще и определенных, а не всех), никто не писал.

Да и реализована эта кнопка была аппаратно, а не программно. Из программного кода вызвать NMI невозможно - в системе команд Z80 нет для этого команды.

Еще как писали. У меня как раз был такой - ZS Scorpion 256 с аппаратным отладчиком. Там так же происходила запись в определенные регистры и вызов прерываний для переключения страниц. Вот этим и пользовались, записывая мусор, что приводило либо к подвисанию, либо к рестарту.

Я правильно понял, что целенаправленно писали программы, результатом деятельности которых было подвисание либо рестарт?

Да, но там много делать не нужно было, достаточно было поправить адрес в блоке памяти, куда писались настройки принтера и прочий мусор, а в скорпионе было модифицированное местами пзу - переход в итоге делался по новому адресу в пзу, который в итоге приводил к переходу в 0 (reset). Точнее сказать уже не смогу, последний раз эту железку видел более 25 лет назад.

Возможно, вопрос был неправильно понят.

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

В Скорпионе модифицированное ПЗУ - да пожалуйста, хоть сто порций, там не только ПЗУ модифицировано, но и сама схема, архитектура немного, но отличается от классического Спектрума. Но в Спектруме, несмотря на наличие ошметков подпрограммы в ПЗУ, которая должна обслуживать NMI, это самое NMI, да и сама эта подпрограмма никак, нигде и никогда не используются. Следовательно, на оригинальном Спектруме вызвать NMI невозможно ну совсем никак - на ногу процессора не приходит сигнал, она не распаяна, висит в воздухе (немного утрирую, но пусть), на него ничего не подается, и кнопки никакой нет. Да, нештатное использование буфера принтера или области системных переменных может вызвать ресет Скорпиона - но не срабатывание NMI. На Скорпионе NMI генерируется аппаратно - и все тут. Могу ошибаться, со Скорпионом дела никогда не имел, но мне кажется, что теневой монитор на Скорпионе невозможно вызвать даже через запись в какой-то порт какого-то значения. Еще раз - могу ошибаться, но там теневой монитор вызывается только аппаратным рубильником. Ну, на крайний случай - сочетанием клавиш, которое обрабатывается все-таки аппаратно, и подает сигнал на ногу процессора NMI.

Нет, имелось ввиду, что после настройки пары циферок и нажатия на апаратную кнопку отладчика происходил множественный переход с конечным адресом в 0. Это не мешало обычной работе и срабатывало только при попытке входа в сервис-монитор.

Следовательно, на оригинальном Спектруме вызвать NMI невозможно ну совсем никак - на ногу процессора не приходит сигнал, она не распаяна, висит в воздухе (немного утрирую, но пусть), на него ничего не подается, и кнопки никакой нет

Я кстати кнопку припаивал между ногой CPU NMI и GND. Настраивал обработчик, чтобы он выходил в BASIC, и так можно было ломать сложные загрузчики. Они там делают 100500 ксорок, а ты потом жмёт кнопку и получаешь код расшифрованным.

В оригинальном ROM была ошибка в обработчике NMI, псевдокод
IF (*5CB0) != 0 THEN RETN ELSE JP (*5CB0)
Из-за чего NMI мог перейти только на адрес 0, т.е. сделать RESET
В клонах это исправили, заменив 1 байт на
IF (*5CB0) == 0 THEN RETN ELSE JP (*5CB0)
Некоторые защиты проверяли именно этот патченный байт.

Вроде похожая (аналоговая) защита была в Star Control II.
Вместе с игрой шла космическая карта, и для старта нужно было ответить на вопрос о позиции определенной звезды.

Если ты играл в взломанный Star Control II, и тебе нужно было по сюжету лететь в систему координаты которой у тебя спрашивали при старте, то игра вешала комп. Было ли это задумано изначально разработчиками, или создатели кряка не докрутили неизвестно.

Дискеты не только царапали и протыкали иглами, но и дырявили лазерами, преимуществом становилось отсутствие выпуклостей, опасных для голов дисковода.

Причём использовалось это и в куда более серьёзном ПО. У меня есть софт для старой платы шифрования с вот такой вот защитой от копирования.

Защита через дискеты с дефектами - так себе: с одной стороны лицензионный продут довольно скоро становился нерабочим - дискеты не долговечны, а с другой - защита полезной программы относительно легко ломается (и напрямую и через свой обработчика на int13h)

Да ну! Уж если народ на это шел - то обычно программировался контроллер дисковода через порты ввода-вывода... Кто ж серьезную защиту через bios будет делать...

Насколько я помню, программы которые навешивали защиту - таким баловались (типично чтобы нестандартно отформатировать дискету), а вот то, что шло в продажу обходилось стандартными прерываниями (иначе не везде-бы работало...)

До Windows повсеместно использовалось программирование железа через порты (прежде всего, графика, VGA/EGA/CGA). А уж контроллер FDD и его порты были очень даже стандартными.

Согласен. И я таким баловался. Но вот вот случаев низкоуровневого чтения через прямое программирование контролера я могу припомнить единицы: помниться был любопытный вариант защиты где дискета не портилась но защитные метки писались (и читались) в меж-секторном пространстве..

я могу припомнить единицы

На PC я ни разу не сталкивался вживую с защитой дискет. Но тогда мне не нужен был коммерческий софт, переписанные дискеты приходили из 10-х рук, и приходило только то, что точно копировалось.

Позже, в начале 2000-х, были защиты (StarForce), которые работали с контроллером CD-ROM напрямую. Вряд ли пользователи точно знали все подробности. Также и в дискетные времена могли не догадываться, а как именно в их программе устроена защита.

в меж-секторном пространстве..

Не очень эффективно, потому что были копировщики, которые читали дорожку в RAW виде и писали её так же.

Защита через дискеты с дефектами - так себе: с одной стороны лицензионный продут довольно скоро становился нерабочим - дискеты не долговечны, 

Мы это решали просто: при штатном использовании программы ключевая дискета запрашивалась раз в несколько месяцев. Если программу переставляли на другой комп, или при других очень существенных изменениях в окружении первый запрос происходил почти сразу же после этого (в течение недели-двух), а потом (при удачном исходе проверки) опять раз в полгода. Так что на время жизни программы одной дискеты обычно хватало ;-) Кроме того, мы почти сразу стали давать каждому юзеру не одну ключевую дискету, а пару. Но это скорее не на случай порчи дискеты, а потому, что каждый дисковод уникален: у нас были случаи, когда поцарапанная дискета на каком-то дисководе не работала штатно. А вот чтобы не сработали сразу обе - не бывало ни разу.

защита полезной программы относительно легко ломается (и напрямую и через свой обработчика на int13h

Это имеет смысл, если ты потом можешь взломанную программу продать. А в нашем случае продукт был сверхузконишевый. Фактически все потенциальные юзеры даже в 1980-е годы знали друг друга лично либо по публикациям (программа у нас русскоязычная полностью, поэтому она ходила и до сих пор ходит почти исключительно в FUSSR; отдельные пользователи-коллеги, уехавшие за бугор, не в счет). Так что защита была скорее моральным стимулом, чем

реальной необходимостью

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

свелся к нулю

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

но только не наши

а того сотрудника, который будет пользоваться продуктом. Поэтому для научных организаций оплата была символической (какие были зарплаты в науке в 90-е годы, напоминать вряд ли нужно). А вот при продаже программы в банк мы пару раз получили неплохую надбавку к зарплате ;-)

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

гораздо лучше подходило для текущей рутины

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

Но пережить самые трудные времена эти продажи нам действительно помогли.

Ну и во-вторых, у нас запрос ключевой дискеты происходил стохастически и довольно редко. А вызовы  int13h в программе были на каждом углу. Поэтому сажать профессионала на взлом, чтобы он несколько дней искал нужный вызов (или, еще хуже, ждал, прока он произойдет), было бы экономически нерентабельно. Тем более, что там еще и некоторые другие методы маскировки использовались. Несмотря на всю их простоту, при взломе ведь надо было все это понять, а это тоже рабочее время неплохого профессионала.

Откройте на телефоне ваш комментарий и все спойлеры до конца. Последний прочитать уже нереально.

Откройте на телефоне ваш комментарий и все спойлеры до конца. Последний прочитать уже нереально.

К сожалению, я не могу это проверить - у меня Нокия 1101. В цивилизации я всегда и везде работаю только с десктопа, в крайнем случае с ноута, а вне цивилизации надо не работать, а отдыхать ;-)

Но в любом случае спасибо за замечание - постараюсь в дальнейшем учесть.

Выглядит так

Понятно, что это больше камень в огород вёрстки хабра)

однако в 80-90-е годы ХХ века скопировать дискету или кассету было, порой, проще, чем скопировать цветную книжку…

Никто и не копировал книжку целиком, просто прикладывали к игре текстовой файлик с парами вопрос/ответ.

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

IMHO Фото вашего "Datasette " - магнитофон к Commodore 64. С64 шел с таким кассетником или с дисководом (в более жирной конфигурации)

Кассета с Кашпировским тоже, кажется, не от Спектрума.

> Способ Вячеслава Медноногова

А в каком году это было?

Мы так свою самодельную программу (не игру) защищали: к ней тоже прикладывалась вручную поцарапанная гвоздиком (хорошо, иголкой) ключевая дискета ;-)

А поскольку мы все это придумывали и писали, сидя в горной памирской глухомани, и в полном отрыве от "Большой земли", то были уверены, что мы это все сами изобрели... Интернетов-то тогда в наших краях не существовало. Хотя, с высоты современного опыта, начинаешь понимать, что глючные дискеты тогда не только у нас были. А от глючной (и потому уникальной) дискеты до описанной технологии и вовсе полшага. Так что такая мысль наверняка почти одновременно сразу во многие головы приходила...

У меня даже сохранилась программа, которая гоняла такую дискету на нескольких дисководах и накапливала статистику по плохо читающимся секторам (она на каждом дисководе была своя, разумеется). Затем автоматически выбирались "плохие" и "хорошие" сектора, которые наиболее стабильно воспроизводили ошибки чтения-записи (или их отсутствие) на разных дисководах. Потом они жестко прописывались в exe-шнике, который компилировался специально под каждую такую дискету.

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

А вот та самая функция проверки ключевой дискеты на древнем фортране

Как видно из алгоритма, проверка была довольно лояльной, чтобы учесть индивидуальные особенности разных дисководов. Единственное, прошу прощения, но я так и не смог победить "умный" редактор Хабра, который катастрофически портит фортрановский код при вставке, глотая пробелы и отступы

в случайных местах

Причем в буфере обмена все хорошо: в любой другой редактор код вставляется совершенно корректно... А что наделал хаброредактор, видно по циклу do ниже... И с длинными строками фигня какая-то...

UPD: А еще символы "*" в операторах описания переменных полетели... А вверху должна быть ровная красивая рамка-прямоугольник. А чуть ниже - операторы типа "logical*1 function ...". Прям зла не хватает! Но время правки на исходе.

Специально оставил все как есть, т.к. простых способов вставить код корректно у меня не нашлось. А применять "сложные" (т.е. сидеть править каждую строчку вручную) не хочу, так как тогда администрация Хабра точно проблему проигнорирует. А так может вдруг все-таки кто-то что-то подкрутит?

Надеюсь, что особый стиль автоформатирования кода, присущий редактору Хабра, не помешает вам улыбнуться, читая комментарии в этой функции ;-) Кстати, у меня она все еще компилируется (фортран!), и даже работала бы, если б не умер последний дисковод тех времен. Правда, это уже не самая первая версия функции из примерно 1988г, а скорее последняя - из 1996. Но разница там минимальная. Кстати, в "продакте" этот код работал чуть ли не до 2010г, когда последние юзеры нашей проги перешли с DOS-версии на виндовую (в которой мы уже отказались от "детских болезней" с ключами и пр.).

CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C Идентификация ключевой дискеты: C
C.......................................................................C
logical1 function readtest_set(ndrv) integer4 readtest,i,err,ntest, count
parameter (ntest=3)
integer2 ndrv2, good(ntest), bad(ntest)
c
c Чтобы настроить программу на работу с конкретной дискетой, надо
c тут указать номера хороших и плохих секторов
data bad/ 2361,2541,2685 /, good / 2362,2542,2686 /
c
c !Параметры дискетки
c
c За 10+ ошибок в хорошем секторе -1 очко
c За 0 ошибок в хорошем секторе +1 очко
c За 100+ ошибок в плохом секторе +3 очка
c За 10+ ошибок в плохом секторе +2 очка
c За >1 ошибок в плохом секторе +1 очко
c За 0 ошибок в плохом секторе -1 очко
c Каждая пара bad+good дает максимум +4 очка, минимум -2 очка.
c В процессе проверки надо набрать +4 очка из 9 возможных
c Если достаточно окажется 1-2-х проверок, третью не проводим:
c
count=0

    do i=1,ntest
       err=readtest(good(i),ndrv)
       if (err.gt.9)  count=count-1
       if (err.eq.0)  count=count+1
       if (count.ge.4) exit

c
err=readtest(bad(i),ndrv)
if (err.eq.0) count=count-1
if (err.gt.1) count=count+1
if (err.gt.9) count=count+2
if (err.gt.99) count=count+3
if (count.ge.4) exit
end do
c
c
readtest_set=(count.ge.4)
return
end

Будучи скопированным на другую дискету, такой exe-шник, разумеется, не работал ;-) Точнее, он запускался, и даже делал вид, что работает, но код с результатом проверки, который он возвращал основной программе, был "паленым". Впрочем, юзеру она ничего об этом не сообщала, а просто уменьшала вероятное время ожидания следующей проверки ключа вдвое. То есть, при получении правильного кода программа запрашивала ключевую дискету в следующий раз через несколько месяцев (сам момент запроса, естественно, выбирался случайно), но если она получала неправильный код 2-3 раза подряд, то запросы ключевой дискеты становились все чаще, вплоть до нескольких раз в день. А поскольку тестирование секторов на такой дискете требовало времени (до 5 минут) и сопровождалось жуткими звуками ;-), то это начинало ощутимо мешать, так как продолжить работу можно только после окончания проверки. В результате у нас даже не было необходимости придумывать какие-то санкции для пиратов: программа продолжала работать при любом исходе проверки. Но сам по себе факт запроса дискеты несколько раз в день уже был достаточной санкцией ;-)

А стохастичность проверок плюс невозможность простым способом определить, "паленый" или корректный код возвращает этот exe-шник в основную программу, здорово затрудняли взлом. Конечно, трюки совсем простые и доморощенные, но именно в силу этого очень трудно вскрываемые ;-) Хотя если честно, мы сделали это все больше из развлечения и для собственного развития, чем по необходимости. Так как взлом нашей защиты был тогда почти настолько же актуален, как

ловля неуловимого Джо

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

Однако, наличие ключевой дискеты собственного дизайна придавало нам некоторую уверенность, а программе солидность ;-) Да, интересное время было...

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

вот так выглядеть (скриншот)
Некорректно вставляющийся код
Некорректно вставляющийся код

Кстати, только сейчас заметил несоответствие комментариев коду: максимально одна пара bad+good дает не +4 очка, а +7: +1 за good и еще +1+2+3=6 за bad. Так что потенциально даже одной итерации цикла должно хватить, а не двух, если в bad-сектрое ошибок достаточно.

Судя по всему, код функции я менял для "облегчения" прохождения проверки (это точно было), а вот комментарий привести в соответствие позабыл. Стандартный баг ;-)

P.S. Я понимаю, что тут сайт рассчитан прежде всего на крутых перцев, которые на лету (пока фотоны движутся от монитора к глазам), автоформатируют любой код на любом языке, вставляя в нужные места недостающие символы), а все ошибки и опечатки (типа пропавших звездочек) нейросеть корректирует прямо в ганглиозных пластинках сетчатки. Но, сейчас во всем мире тренд на доступную среду. Не пора ли и администрации хабра

сделать небольшой шажок в эту сторону?

Я имею в виду всяких чайников, у которых упомянутые выше навыки пока что недостаточно развиты? Или отсутствуют вовсе в зародыше, как в моем случае? Нельзя ли все-таки дать возможность таким товарищам с ограниченными возможностями, то есть нам, просто копировать свой исходный код из обычного текстового редактора в редактор хабра через буфер обмена as is, то есть не подвергая его высокохудожественным преобразованиям? Ну вот нет у меня правильного творческого вкуса, не понимаю я некоторые формы "современного искусства" (и уже видимо не пойму).

Можно, я просто нажму Ctrl+V и код вставлю?

Fortran можно вставить как код без указания языка, подсвечен он не будет, но по крайней мере не поедет.

Пример кода
C AREA OF A TRIANGLE - HERON'S FORMULA
C INPUT - CARD READER UNIT 5, INTEGER INPUT, NO BLANK CARD FOR END OF DATA
C OUTPUT - LINE PRINTER UNIT 6, REAL OUTPUT
C INPUT ERROR DISPAYS ERROR MESSAGE ON OUTPUT
  501 FORMAT(3I5)
  601 FORMAT(" A= ",I5,"  B= ",I5,"  C= ",I5,"  AREA= ",F10.2,
     $"SQUARE UNITS")
  602 FORMAT("NORMAL END")
  603 FORMAT("INPUT ERROR OR ZERO VALUE ERROR")
      INTEGER A,B,C
   10 READ(5,501,END=50,ERR=90) A,B,C
      IF(A=0 .OR. B=0 .OR. C=0) GO TO 90
      S = (A + B + C) / 2.0
      AREA = SQRT( S * (S - A) * (S - B) * (S - C) )  
      WRITE(6,601) A,B,C,AREA
      GO TO 10
   50 WRITE(6,602)
      STOP
   90 WRITE(6,603)
      STOP
      END

@nick758, спасибо за пример, но у меня так не получается. Проблема не в выборе языка, а в том, что код у меня портится в момент вставки из буфера обмена. То есть еще до того, как я могу щелкнуть по кнопке "<>" и что-то там выбрать.

Возможно, у меня с буфером обмена что-то не то? Он как-то неправильно с хабраредактором взаимодействует? Вот для примера я скопировал Ваш код из поста, и попробовал вставить.

Просто копипаста:

C AREA OF A TRIANGLE - HERON'S FORMULA C INPUT - CARD READER UNIT 5, INTEGER INPUT, NO BLANK CARD FOR END OF DATA C OUTPUT - LINE PRINTER UNIT 6, REAL OUTPUT C INPUT ERROR DISPAYS ERROR MESSAGE ON OUTPUT 501 FORMAT(3I5) 601 FORMAT(" A= ",I5," B= ",I5," C= ",I5," AREA= ",F10.2, $"SQUARE UNITS") 602 FORMAT("NORMAL END") 603 FORMAT("INPUT ERROR OR ZERO VALUE ERROR") INTEGER A,B,C 10 READ(5,501,END=50,ERR=90) A,B,C IF(A=0 .OR. B=0 .OR. C=0) GO TO 90 S = (A + B + C) / 2.0 AREA = SQRT( S * (S - A) * (S - B) * (S - C) ) WRITE(6,601) A,B,C,AREA GO TO 10 50 WRITE(6,602) STOP 90 WRITE(6,603) STOP END

Уточню, что немедленно после вставки весь этот фрагмент у меня уже автоматически помечен, как код, причем без указания языка. То есть, предположительно схема глюка такая:

1) Я копирую фрагмент текста из буфера обмена в хабраредактор

2) Храбро-редактор автоматически распознает вставляемый фрагмент, как код на неизвестном языке,

3) Редактирует (удаляя лишнее), затем форматирует его в соответствии со своими представлением о прекрасном

4) Вставляет отредактированный и отформатированный код

Наверно, я правда чего-то совсем простое не догоняю.

Но что именно?!

UPD: Или, может, мне в браузере какие-то настройки подкрутить надо? У меня просто стандартный Хром, обновляемый, с Ad-блоком. Больше

ничего особенного нет.

Винда - десятка...

UPD2:

Черт возьми, еще одна мысль!

А вдруг это то самое, которое уже началось?! Только совершенно иначе? Мы ждали от ИИ какую-то жесть, а вместо этого зарождающийся новый разум пытается, в меру своего развития, создать нечто прекрасное?

Я сначала выбрал "<> Код", потом вставил текст.

Покопался в своих архивах - и там, неожиданно, нашлась такая ключевая дискета с царапкой! Я их в свое время наделал с большим запасом, потом истрачены были не все. Это уже одна из последних партий, "наиболее современный" форм-фактор, 2002 год ;-)

Царапка на дискете не кажется прозрачной - она действительно просвечивает ;-)
Царапка на дискете не кажется прозрачной - она действительно просвечивает ;-)

;-)

А вот "протокол тестирования" той самой дискеты на нескольких дисководах

Disk 344202.

Selected bad: 2113, 2437, 2725
Selected ok: 2112, 2436, 2727

2077+ 2113+ 2149+ 2167+ 2185+
2203+ 2221+ 2239+ 2257+ 2275+
2293+ 2311+ 2329+ 2347+ 2365+
2383+ 2401+ 2419+ 2437+ 2455+
2473+ 2491+ 2509+ 2527+ 2545+
2563+ 2581+ 2599+ 2617+ 2635+
2653+ 2671+ 2689+ 2707+ 2725+
2743,

****>>>> Testing Sectors From 0 to 2880
sect: read_err: write_err: total: 386

2041 0 1 1 386A

2077 145 438 583 486
2077 178 453 631 386
2077 431 459 890 386A
2077 443 436 879 486A
2077 512 0 512 486MAIL
2077 512 0 512 5CARE
2077 512 0 512 5HOME
2077 512 0 512 5HOMEA

2095 0 261 261 486
2095 512 0 512 5HOME

2113 441 330 771 486A
2113 466 490 956 386A
2113 467 325 792 486
2113 474 493 967 386
2113 512 0 512 486MAIL
2113 512 0 512 5CARE
2113 512 0 512 5HOME
2113 512 0 512 5HOMEA

2131 83 189 272 486A
2131 303 364 667 486
2131 512 0 512 5HOME
2131 512 0 512 5HOMEA

2149 445 503 948 386A
2149 457 401 858 486A
2149 466 407 873 486
2149 470 504 974 386
2149 512 0 512 486MAIL
2149 512 0 512 5CARE
2149 512 0 512 5HOME
2149 512 0 512 5HOMEA

2167 185 0 185 386A
2167 200 0 200 386
2167 222 245 467 486A
2167 328 400 728 486
2167 512 0 512 486MAIL
2167 512 0 512 5CARE
2167 512 0 512 5HOME
2167 512 0 512 5HOMEA

2185 215 508 723 386A
2185 226 508 734 386
2185 446 363 809 486A
2185 460 399 859 486
2185 512 0 512 486MAIL
2185 512 0 512 5CARE
2185 512 0 512 5HOME
2185 512 0 512 5HOMEA

2203 249 193 442 386
2203 265 196 461 386A
2203 334 412 746 486
2203 366 280 646 486A
2203 512 0 512 486MAIL
2203 512 0 512 5CARE
2203 512 0 512 5HOME
2203 512 0 512 5HOMEA

2221 439 417 856 486A
2221 465 454 919 486
2221 503 508 1011 386A
2221 512 0 512 486MAIL
2221 512 0 512 5CARE
2221 512 0 512 5HOME
2221 512 0 512 5HOMEA
2221 512 508 1020 386

2239 249 501 750 386A
2239 379 401 780 386
2239 407 434 841 486
2239 418 412 830 486A
2239 512 0 512 486MAIL
2239 512 0 512 5CARE
2239 512 0 512 5HOME
2239 512 0 512 5HOMEA

2257 408 415 823 486A
2257 512 0 512 486MAIL
2257 512 0 512 5CARE
2257 512 0 512 5HOME
2257 512 0 512 5HOMEA
2257 512 436 948 486
2257 512 508 1020 386
2257 512 508 1020 386A

2275 410 441 851 486A
2275 415 449 864 486
2275 418 358 776 386A
2275 420 331 751 386
2275 512 0 512 486MAIL
2275 512 0 512 5CARE
2275 512 0 512 5HOME
2275 512 0 512 5HOMEA

2293 452 457 909 486A
2293 512 0 512 486MAIL
2293 512 0 512 5CARE
2293 512 0 512 5HOME
2293 512 0 512 5HOMEA
2293 512 460 972 486
2293 512 508 1020 386
2293 512 508 1020 386A

2311 416 464 880 386A
2311 425 452 877 486A
2311 430 458 888 486
2311 432 427 859 386
2311 512 0 512 486MAIL
2311 512 0 512 5CARE
2311 512 0 512 5HOME
2311 512 0 512 5HOMEA

2329 186 508 694 386A
2329 448 462 910 486A
2329 506 464 970 486
2329 512 0 512 486MAIL
2329 512 0 512 5CARE
2329 512 0 512 5HOME
2329 512 0 512 5HOMEA
2329 512 508 1020 386

2347 403 429 832 486A
2347 413 474 887 386
2347 442 433 875 486
2347 444 478 922 386A
2347 512 0 512 486MAIL
2347 512 0 512 5CARE
2347 512 0 512 5HOME
2347 512 0 512 5HOMEA

2365 493 431 924 486A
2365 497 465 962 486
2365 511 508 1019 386A
2365 512 0 512 486MAIL
2365 512 0 512 5CARE
2365 512 0 512 5HOME
2365 512 0 512 5HOMEA
2365 512 508 1020 386

2383 409 463 872 486A
2383 426 500 926 386
2383 466 503 969 386A
2383 467 468 935 486
2383 512 0 512 486MAIL
2383 512 0 512 5CARE
2383 512 0 512 5HOME
2383 512 0 512 5HOMEA

2401 253 497 750 386A
2401 283 508 791 386
2401 408 438 846 486A
2401 487 412 899 486
2401 512 0 512 486MAIL
2401 512 0 512 5CARE
2401 512 0 512 5HOME
2401 512 0 512 5HOMEA

2419 434 478 912 486A
2419 457 509 966 386
2419 459 508 967 386A
2419 470 481 951 486
2419 512 0 512 486MAIL
2419 512 0 512 5CARE
2419 512 0 512 5HOME
2419 512 0 512 5HOMEA

2437 283 501 784 386
2437 300 295 595 386A
2437 311 306 617 486A
2437 376 308 684 486
2437 512 0 512 486MAIL
2437 512 0 512 5CARE
2437 512 0 512 5HOME
2437 512 0 512 5HOMEA

2455 426 494 920 486A
2455 454 508 962 386
2455 459 489 948 486
2455 511 509 1020 386A
2455 512 0 512 486MAIL
2455 512 0 512 5CARE
2455 512 0 512 5HOME
2455 512 0 512 5HOMEA

2473 129 116 245 486A
2473 138 306 444 386A
2473 182 373 555 386
2473 280 0 280 486
2473 512 0 512 486MAIL
2473 512 0 512 5CARE
2473 512 0 512 5HOME
2473 512 0 512 5HOMEA

2491 412 500 912 486A
2491 428 499 927 486
2491 512 0 512 486MAIL
2491 512 0 512 5CARE
2491 512 0 512 5HOME
2491 512 0 512 5HOMEA
2491 512 508 1020 386
2491 512 508 1020 386A

2509 233 493 726 386A
2509 273 321 594 486A
2509 281 311 592 486
2509 289 498 787 386
2509 512 0 512 486MAIL
2509 512 0 512 5CARE
2509 512 0 512 5HOME
2509 512 0 512 5HOMEA

2527 439 500 939 486A
2527 442 503 945 486
2527 456 508 964 386A
2527 488 508 996 386
2527 512 0 512 486MAIL
2527 512 0 512 5CARE
2527 512 0 512 5HOME
2527 512 0 512 5HOMEA

2545 243 496 739 386
2545 259 497 756 386A
2545 300 340 640 486A
2545 309 304 613 486
2545 512 0 512 486MAIL
2545 512 0 512 5CARE
2545 512 0 512 5HOME
2545 512 0 512 5HOMEA

2563 424 508 932 486
2563 512 0 512 486MAIL
2563 512 0 512 5CARE
2563 512 0 512 5HOME
2563 512 0 512 5HOMEA
2563 512 506 1018 486A
2563 512 508 1020 386
2563 512 508 1020 386A

2581 238 485 723 386A
2581 273 489 762 386
2581 402 412 814 486A
2581 422 337 759 486
2581 512 0 512 486MAIL
2581 512 0 512 5CARE
2581 512 0 512 5HOME
2581 512 0 512 5HOMEA

2599 412 496 908 486A
2599 441 502 943 486
2599 467 508 975 386A
2599 494 508 1002 386
2599 512 0 512 486MAIL
2599 512 0 512 5CARE
2599 512 0 512 5HOME
2599 512 0 512 5HOMEA

2617 259 479 738 386
2617 281 475 756 386A
2617 381 339 720 486
2617 415 426 841 486A
2617 512 0 512 486MAIL
2617 512 0 512 5CARE
2617 512 0 512 5HOME
2617 512 0 512 5HOMEA

2635 428 491 919 486
2635 430 487 917 486A
2635 448 508 956 386A
2635 456 508 964 386
2635 512 0 512 486MAIL
2635 512 0 512 5CARE
2635 512 0 512 5HOME
2635 512 0 512 5HOMEA

2653 338 443 781 386
2653 355 454 809 386A
2653 363 288 651 486
2653 397 404 801 486A
2653 512 0 512 486MAIL
2653 512 0 512 5CARE
2653 512 0 512 5HOME
2653 512 0 512 5HOMEA

2671 416 450 866 486A
2671 447 461 908 486
2671 478 501 979 386A
2671 485 508 993 386
2671 512 0 512 486MAIL
2671 512 0 512 5CARE
2671 512 0 512 5HOME
2671 512 0 512 5HOMEA

2689 365 392 757 486A
2689 380 375 755 486
2689 380 428 808 386A
2689 390 431 821 386
2689 510 0 510 5HOME
2689 512 0 512 486MAIL
2689 512 0 512 5CARE
2689 512 0 512 5HOMEA

2707 406 408 814 486A
2707 429 491 920 386
2707 432 502 934 386A
2707 450 419 869 486
2707 512 0 512 486MAIL
2707 512 0 512 5CARE
2707 512 0 512 5HOME
2707 512 0 512 5HOMEA

2725 209 401 610 386
2725 332 408 740 386A
2725 349 344 693 486
2725 351 361 712 486A
2725 512 0 512 486MAIL
2725 512 0 512 5CARE
2725 512 0 512 5HOME
2725 512 0 512 5HOMEA

2743 0 333 333 486A
2743 0 391 391 386
2743 0 417 417 386A
2743 341 319 660 486
2743 512 0 512 486MAIL
2743 512 0 512 5CARE
2743 512 0 512 5HOME
2743 512 0 512 5HOMEA

2761 221 143 364 486

Черт, и здесь форматирование (выравнивание столбцов) при вставке поехало...

Как видно из протокола, это уже была эпоха 486-х машин... DOS уже фактически умирал, но "программы-зомби" еще встречались на каждом углу ;-)

покупателям предлагался удешевлённый вариант в виде отдельных комплектующих

Это когда это такой фирменный спектрум был??

Во время чтения статьи в ушах зазвучали звуки от магнитофонной кассеты с программами БК-0010. На слух можно было определить участки данных где грузился шрифт, код или спрайты =). Еще помню модифицированные загрузчики - которые записывали данные на кассету на более высокой частоте (профит - на кассету влезало больше данных). При перезаписи с кассету на кассету необходимо было отключать АРУЗ (авто регулировку уровня записи) . Еще был популярна легендарная дека МАЯК (вроде правильно) 2 класса: 2х кассетный, отключаемый АРУЗ, реверс, счетчик позиции на ленте, умеющий отматывать пленку до очередной паузы между записями, что сильно упрощало загрузку нужной программы - просто ИМБА.

для пущей ностальгии могу подсказать более современные видео, правда там для спектрума. Один раз сделали мелодию, которая игралась теми звуками что на кассете, а потом как то сделали видеоклип в начале которого играла запись с кассеты, а все видео было стилизированно под 8bit графику

Я в детстве долго не понимал отличие цифрового от аналогового. Проблема в том, что это отличие вообще мало кто понимает (но все думают, что понимают). Помню, как-то спросил на форуме, и до ответа снизошёл тогдашний главред «Компьютерры», который во-первых, намекнул, что стыдно спрашивать такие глупости, а, во-вторых, это человеческая выдумка, в природе есть только аналоговое.

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

В качестве примера приводился механический компьютер Бэббиджа. Он оперировал децитами — битами с 10 состояниями (понятно, почему: у человека 10 щупальцев). В качестве ячейки памяти использовалась шестерёнка. Поскольку плоскость равна, как известно, 360°, то поворот вокруг оси относительно первоначального положения кодировал значение децита: 0° — 0, 36° — 1, 72° — 2 и т.д. Возникает вопрос: а что делать, если угол поворота равен 70°? На первый взгляд кажется, что мы открыли новые и поистине неисчерпаемые запасы ёмкости в нашей ячейке памяти («и побольше, побольше!» ©). Но при пристальном рассмотрении оказывается, что задолго до планковских масштабов система утрачивает способность запоминать точное значение и давать его считывать. Тем самым, мы вообще лишаемся хранения информации.

Бэббидж же мыслил прямо противоположно, и организовал доводчик, который при малых отклонениях угла корректировал его так, чтобы луч «указателя угла» центрировался в своём секторе. Его дециты обладали способностью к самокоррекции. Тем самым, он спроектировал настоящий цифровой компьютер. (Нынешние компьютеры устроены так же, но вместо угла у них в ячейках памяти гуляет напряжение).

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

Можно было. По крайней мере, один раз - точно можно было, а то и несколько, если магнитофоны хорошие, и нет защиты - но какая на территории СНГ была защита... На первой-второй копии люфт шестеренок мог не сказаться. Лично я понимал, что так неправильно, и так никогда не делал, но знакомые делали, и работало.

если магнитофоны хорошие

Если брать большой технологический запас, то, конечно, это сработает… пару раз ))

Я просто очень удивлялся в детстве, зачем такой класс программ — копирование с буферизацией в RAM — вообще нужен. Есть же двухкассетник…

Можно было сделать (и делали) "кондиционер": фильтрующую цепочку и триггер Шмитта, как на ленточном входе "Спектрума", а после него -- сразу фильтрующую цепочку, как на выходе. У меня в "Спектруме" был тумблер, просто отключавший ленточный выход от порта и соединявший его с входным портом. При его включении при загрузке с кассеты на выходе оказывался уже обработанный сигнал, который можно было использовать для контроля, а можно было записать на второй магнитофон.

Глубоко, я уж не думал что увижу вывод. Смутно помню что тиражировщики кассет для спектрума пользовались именно одно/многокассетниками, такими же как для обычных кассет. Избыточность заложена в принципе кодирования. Ладно если мелкие ларечники, они, может, ночами сидели и втапливали в COPYCOPY, это надо считать один файл и отписать на другие кассеты, ну может и многократно, и так повторять со всей кассетой, кассетами ... были времена.

Ну, наверно там был какой-то запас. Принципиальная разница в том, что в одном случае он исчерпывается (ошибки накапливаются), а в другом — нет.

были времена

О да. По Спектруму были две популярные книжки (кажется). (Забавно, что по всем продуктах из детства я помню две книжки. По МК-52 — жёлтая и голубая. Спектрумовские обе были чёрные). Я всё более-менее понимал. Но не то, зачем сделан COPYCOPY. Позже оказалось, что вопрос, действительно, глубок.

Ну это Родионов и Ларченко - "ZX-Spectrum для пользователей и программистов", и вторая, где описывался TR-DOS.

Не было там никакой избыточности. Там была обычная побитная FSK, с единственным средством контроля целостности -- контрольной суммой всего файла. Никаких тебе кодов Соломона-Рида.

так там же не один импульс а несколько?

Там на каждый бит один период, только единице соответствует вдвое большая частота.

ночами сидели и втапливали в COPYCOPY, это надо считать один файл и отписать на другие кассеты

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

а когда его не было? были же и такие времена

Может, писали с PC? Всё-таки, год 91-97й, уже были писишки с дисководами.

Скорпион, ATM были более доступны, чем x86 даже если это "Поиск"

С кассетами все началось гораздо раньше чем в 91, PC тогда не особо отличались от спектрумов. у PC дисководами вроде уже не было выходов на магнитофон, а если и было то не в совместимом же формате писали.

реально проще через формирователь было как тут описали в комментах

С PC можно писать на магнитофон через LPT-порт.
В середине 90-х была услуга "запись кассеты на заказ" из каталога. Приходишь через 90 минут, и всё готово. Вот это офигенно, не то что сборники.

Ну это где была такая роскошь то.. Именно софт писали? значит уже был какой то софт для имитации нужного битового потока.. думаю тоже далеко не сразу все это наработалось

Писали игры 48K из каталога. Столик на 2-м этаже универмага, сейчас бы его назвали торговым центром )) Точка на заказ работала на Scorpion ZS-256.

А про какой-то пк-шный софт я слышал, но не сталкивался. Мощности i386 с избытком хватит, чтобы програмно дергать pin порта с частотой 4 KHz, там стандартная скорость обмена с принтером - 115кб/с (без каких-либо разгонов)

Да всякий софт был и есть, но попозже.  Scorpion тоже не сразу разработали

Ну, развалы с кассетами тоже не сразу набрали популярность. Эх, помню в нулевых, когда интернет-каналы были тощими, популярностью пользовались DVD-по-почте. Через интернет скачиваешь только каталог, а контент приходит почтой, довольно дёшево. Я тогда в приступах плюшкинства заказывал по 50 дисков в посылке. Если бы в 90-е был канал распространения каталогов, можно было ожидать и аналогичный сервис для кассет.

так инфоком распространял бумажные каталоги гдето в 1991 с ценами и рассылал диски

Программа VV50
Программа VV50

Недавно изучал содержимое жесткого диска от 286-машины, емкость которого 80 мегабайт. Одна из программ завыла сиреной на спикер и выдала такую грозную надпись.

Один из известных примеров "плавающего" бита - защита на дискетах с игрой Dungeon Master.

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

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

Таких битов и проверок в коде было много и все они были неочевидны и разбросаны по ходу игры, поэтому на полноценный взлом Dungeon Master ушло много времени.

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

Чем-то всё это напоминает современные потуги разработчиков DRM-систем вроде Denuvo.

Cовременные потуги разработчиков Denuvo приводят почти к полному успеху - последние итерации не взламывают.

imho, их не взламывают, потому что знают, что защиту гарантированно уберут через год-полтора.
После перехода Denuvo на подписку, разработчики перестают её оплачивать через некоторое время, видимо не окупается. Буквально на этой неделе убрали Denuvo с The Callisto Protocol (через год после релиза), в тот же день ушла на торренты.

Вам не кажется это глупыми отговорками? Случай с Callisto Protocol только доказывает мою правоту - её не взломали.

Shin Megami Tensei III: Nocturne HD Remaster так уже 3 года не взломан.

А про окупаемость вообще смешно - перестают оплачивать после снятия всех сливок. Она не может не окупиться - её не взломали и игру играть можно только купив (или почти купив).

Но вот Sega, например, никогда не снимает.

Но вот Sega, например, никогда

Ну, что на слуху
Judgment - релиз 2022, на торрентах 2023
Серия Yakuza - вся на торрентах, через год-полтора.
Может, что-то нишевое типа Соников и Hatsunu Miku не то, что не ломают, вообще не заморачиваются копировать/выкладывать незащищённое, потому что массам не интересно.

А про окупаемость вообще смешно - перестают оплачивать после снятия всех сливок

Поясню. Не окупается не игра, а конкретно оплата Denuvo на очередной год. Через год, кто хотел купить - и так купит, возможно на распродаже. Кто сомневается - купить или скачать, скорее всего купят новую свежую игру.

Естественно. Те, кто не желает дальше платить за защиту, могут прекратить. Это никак не доказывает, что её использование не окупается, так как те же самые издатели продолжают её вставлять в новые игры.

Опять не смог донести. Попробую ещё раз.
Первый год Denuvo окупается, в последующие годы не окупается, поэтому защиту убирают.

Пираты знают про эту ситуацию и не рыпаются что-то там ломать. Потому что зачем? Достаточно подождать и защита сама слетит.

Мне очень нравилась "защита" на спектруме, когда программа специально ставила цвет текста и фона белыми, чтоб, при нажатии на Break ты не увидел листинг. Это был мой первый в жизни взлом через INK 0

Точно, было такое! Не вспомнил бы без вашего комментария.

помню уже на излёте спектрума была "ufo враг неизвестен" которую даже на Юноне на 2х дискетах продавали, а в родном городе взломали, что легко копировалась на одну. до кучи с бесконечными деньгами (по выбору) и "точкой" на мировой карте и названием города

Спросил дядю про защиту "Байта" правда ли написана:
Правда. Сам делал эту защиту и Церикопика рисовал

А можно подробнее про 30 литров спирта в месяц? Это для протирки контактов или спасаться от стресса и депрессии при работе на первых ЭВМ?

В 80-ых годах в МИЭМе на кафедре САПР стоял АРМ-И (автоматизированное рабочее место инженера). Это был огромной величины горизонтальный планшет со всякими железными прибамбасами и кучей электронных блоков размером с тумбочку. Все это хозяйство занимало целую комнату площадью метров 70. АРМ-ом этим никто не пользовался по причине его полной моральной старости и он тихо стоял покрытый слоем пыли.
В остальных комнатах кафедры было довольно тесно и каждый вновь прибывавший на кафедру сотрудник (будь то руководитель или просто специалист) выступал с предложением разобрать к чертовой матери железного монстра и освободить комнату для судьбоносных исследований, которые возглавляет (или в которых просто участвует) предлагающий. В ответ он получал только неопределенное хмыкание сотрудников кафедры. Причем "рационализатор" выдвигал такое предложение только один раз и потом, начав работу, больше к этому вопросу не возвращался. Кафедра продолжала уплотняться, но "священная корова - АРМ" продолжал занимать одну из самых больших комнат.
Причина такого поклонения была следующая - по технической документации на обслуживание данного агрегата полагалось и выдавалось ЧЕТЫРЕ... ВЕДРА... СПИРТА... ЕЖЕМЕСЯЧHО!

Старый боян

Странно что для дискет не упомянута простенькая защита основанная на редактировании бут-сектора. Смысл в том, что в TR-DOS в заголовке файла на дискете было два числа, одно обозначало размер файла в байтах и использовалось для UI (насколько я помню), а второе обозначало размер файла в секторах и использовалось для дисковых операций.

Если напрямую поставить второе число в 0 и тогда такой файл прочитать можно было только прочитав нужное количество секторов в ручную.

Хотя... 25 лет прошло... могу путать детали :) Но редактирование хедара что бы сделать файл нулувой длины точно было.

«В 1980-х годах в США и Европе была даже запущена антипиратская кампания «Домашняя запись убивает музыку»»

Она была запущена в Англии, и только там. И касалась таймшифтинга - записи теле- и радиопередач в личных целях, чтобы посмотреть или послушать не в момент выхода в эфир, а позже. В подавляющем большинстве стран так делать разрешено за счёт надбавки к стоимости чистого носителя, а также железки, с помощью которой осуществляется запись. И только в Англии такой надбавки не было (потом сделали, как везде), и существовал запрет таймшифтинга (потом отменили, как везде).

Sign up to leave a comment.