Pull to refresh

Comments 38

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

Чтобы разобраться, мне пришлось купить пару моделей. Если бы там был 32-бит процессор, то я бы попробовал портировать Doom. Но с 2КБ ОЗУ, думаю, это невозможно. Тем не менее, эмулятор написать тоже было интересно. С исходниками у меня лежит экстрактор ресурсов, и я описал формат графики, так что можно делать моды прошивки, если кому-то захочется.

Очень крутой ресёрч, спасибо! Сильно не хватает таких материалов на просторах:)

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

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

Документация гуглится по "XN297L pdf". Вот, прямо с сайта производителя микросхемы. Там две версии чипа, LBW это дешевая с малым количеством ножек. Интересно, есть ли там какие-то уязвимости, может ли один тамагочи заразить другого. В ToumaPet есть беспроводной чат.

понятно дело я поэтому погуглил :) Похоже что родич nrf24 . Где есть пакеты данных - вероятно есть и буфер для них. а если есть буфер - есть и переполнение. Другое дело что там с размером пакета не очень разгуляться. Ну и главное - а в процессоре адресное пространство оперативки и флеша вообще пересекаются ?

Тут нет аппаратной поддержки отображения содержимого флэш памяти в адресное пространство, всё читается через порты.

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

Я же написал в статье, что у процессора есть свой ROM, который назвал "биосом". Что доступен по адресам 0x6000..0x7fff. Он и запускает прошивку с игрой с флэша (путём чтения кусочка кода из флэша в RAM и его запуска из RAM, этот кусок кода далее запрашивает чтение и запуск других кусков кода из флэша).

да что то этот абзац я пропустил. ОК, ну тогда все зависит от кода "приложений" которые работают с безпроводкой и их работой с оперативкой. а при помощи sdr наверное можно вообще всю оперативку переписать :)

Вы такой крутой реверс-инженер, или же просто не очень в теме, но буфер != переполнение в нём, если сделано грамотно.

Вы правы, уязвимости не гарантированы.

Нашел код, что принимает сообщения по беспроводной связи. Судя по этому коду - принимаемые значения хорошо проверяются на допустимые диапазоны значений. Так что на первый взгляд, уязвимости мало вероятны. Например, текстовые сообщения имеют максимальную длину в 30 байт, на них выделено 30 байт (0x0a..0x27), внутри принимаемого блока на 64 байта. Проверяется что байты в диапазоне печатных символов ASCII: 0x20..0x7e, что сообщение заканчивается на ноль, и что остальные символы после первого нуля - тоже нули (что совсем не обязательно для безопасности). Хотя допускается сообщение во все 30 байт, без нуля в конце.

это все конечно да, но вопрос то в том выделено ли место именно для всех 64 байт пакета. И более сложный вопрос - а что если мы все таки умудримся передать пакет длиной более 64 байт

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

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

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

На чипах для кнопочных телефонов, и даже смартфонов, у некоторых производителей полно таких ошибок в бутлоадерах и FDL. Через USB передаёшь данные, а их размер даже не проверяется. Используя эти ошибки энтузиасты разблокируют загрузчик и устанавливают другую сборку Андроида или делают рута. Тут нет таких ляпов. Беспроводной чип не имеет доступа к ОЗУ, даёт данные по байту когда программа его спрашивает. Размер пакета устанавливается программой, а не беспроводным чипом.

И это даже как то неожиданно для такой игрульки с "историческим" процессором.

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

Очень крутая работа и очень интересное её описание! Читал с удовольствием, спасибо!

ркспектище! очень классно!

что использовали в качестве дизассемблера?

по части разбора, точнее подбора формата графических ресурсов,полезно подсмотреть на форуме old-games, у них есть полезные утилиты, чтобы подобрать размер и битность графических ресурсов прямо по дампу, быстро можно найти шрифты и картинки, если они без сжатия лежат в дампе. ;)

Использовал IDA не первой свежести, там 65C02 есть. Только почему-то не распознаёт команду WAI (опкод 0xcb). Впрочем, эта команда попадается лишь несколько раз на всю прошивку.

очень крутая статья спасибо!

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

Скорее всего нет, я вскрывал не карманный NES, дешевый клон с прошитыми играми. В корпусе SNES-мини, но внутри NES. Причём даже от корпуса мини - там занят лишь малый объём корпуса.

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

Флэш Spansion S71PL127N. Впрочем, могут поставить любой другой. Это BGA чип, его не перепрошить так же просто как SOP8.

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

Вот, странная память с удобным доступом. Интересно есть ли сервисный режим для usb, будет забавно если на несовском процессор реализовали usb.

Всё что могу различить на чипе с вашего фото: Thailand, Spansion. Тоже хотелось купить одну из таких приставок на Али, есть очень дешевые (видел по 300-400 рублей). Но я не умею перепрограммировать такие чипы, и разбираться лень, так что удержался.

Так помимо дорогих консолей (которые чуть ли не на 4к дисплеях и FPGA эмулируют работу старинного железа) и ноунейм китайцев (в т.ч. поддерживающих загрузку дампов картриджей с кучи разных систем) были обыкновенные нинтендовские выпуски Game&Watch, сделанные на STM32 и давно хакнутые (и сторонние прошивки заливать можно, и родную при этом в дуалбуте держать, и чип памяти на более ёмкий перепаять). Ну прям на любой вкус девайсы есть.

В итоге я не утерпел и решил посмотреть сколько стоят эти игрушки. Не копеечно. И есть русифицированный вариант - хотя это похоже перевод инструкции, но сам факт .. кто то с этим играет

Посмотрите еще сколько стоят японские (Tamagotchi Uni, Tamagotchi Smart). Там ESP32-S3 в качестве процессора.

И посмотрел. Цена останавливает от того чтобы купить такую тамагочи и сделать из нее flipper 2 (такое вот мечтание). Но рождают мысли купить flipper zero и сделать наконец из него тамагочи (софт написать) .

Ну и полагаю что уязвимостей в ESP32-S3 можно найти поболее чем китайской вариации..

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

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

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

Обычно секреты фирмы регулярно утекают в документации что выдают подрядчикам.

Как верно заметил @jpegqs, уже давно была прочитана прошивка оригинального Тамагочи (Bandai P1) и написаны эмуляторы. Но с ним, можно сказать, повезло - ПЗУ у него довольно легко считывается визуально. Я сам, с недавнего времени, занимаюсь вскрытием кристаллов в "Тетрисах" и чтением их прошивки, и оказывается, это относительно редкая удача, увидеть читаемое ПЗУ под компаундом. Из 8 семейств микроконтроллеров, которые я находил, только у двух ПЗУ можно прочитать. Я вскрывал и пару "китайских" тамагочи - Mini Pets 8-in-1 и Pocket Puppy, и у обоих нечитаемое ПЗУ :(

Почему не читаемое, не хватает разрешения фото или биты как-то скрыты?

Я на самом деле не уверен в причинах, скорее всего это такой тип ПЗУ, который в этой статье назван "Implanted", и чтобы его прочитать, нужно сначала "проявить" примеси на кристалле кремния довольно агрессивной смесью кислот.

Sign up to leave a comment.