Комментарии 38
Кто-то убивает время, чтобы создать такое колдунство из старых и свежих технологий, а кто-то убивает его же эксплуатируя товар, отдав за него денег.
Но есть пытливые умы, которым некуда деть время, кроме как убить его, ковыряясь в кишочках, и восстанавливая ход мысли первых маньяков.
Последним - не знаю за что, но респект :)
Чтобы разобраться, мне пришлось купить пару моделей. Если бы там был 32-бит процессор, то я бы попробовал портировать Doom. Но с 2КБ ОЗУ, думаю, это невозможно. Тем не менее, эмулятор написать тоже было интересно. С исходниками у меня лежит экстрактор ресурсов, и я описал формат графики, так что можно делать моды прошивки, если кому-то захочется.
Очень крутой ресёрч, спасибо! Сильно не хватает таких материалов на просторах:)
про XN297LBW хотелось бы пару слов. какую фунцию он выполнянет в оригинале, есть ли на него документашка, для чего можно приспосбить.
мне вся это история напомнило про другую игрушку с беспроводной микросхемой, с полноценной клавиатурой, где можно было небольшой беспроводной чат организовать. Реверс ее дал хороший скачек для развития любительских беспроводных технологий.
понятно дело я поэтому погуглил :) Похоже что родич nrf24 . Где есть пакеты данных - вероятно есть и буфер для них. а если есть буфер - есть и переполнение. Другое дело что там с размером пакета не очень разгуляться. Ну и главное - а в процессоре адресное пространство оперативки и флеша вообще пересекаются ?
Тут нет аппаратной поддержки отображения содержимого флэш памяти в адресное пространство, всё читается через порты.
Собственно суть чтобы мог запускаться код, загруженный в оперативку. На некоторых архитектурах это как бы не возможно, но что здесь? Код сперва куда то грузиться из флеша?
Я же написал в статье, что у процессора есть свой ROM, который назвал "биосом". Что доступен по адресам 0x6000..0x7fff. Он и запускает прошивку с игрой с флэша (путём чтения кусочка кода из флэша в RAM и его запуска из RAM, этот кусок кода далее запрашивает чтение и запуск других кусков кода из флэша).
Вы такой крутой реверс-инженер, или же просто не очень в теме, но буфер != переполнение в нём, если сделано грамотно.
Вы правы, уязвимости не гарантированы.
Нашел код, что принимает сообщения по беспроводной связи. Судя по этому коду - принимаемые значения хорошо проверяются на допустимые диапазоны значений. Так что на первый взгляд, уязвимости мало вероятны. Например, текстовые сообщения имеют максимальную длину в 30 байт, на них выделено 30 байт (0x0a..0x27), внутри принимаемого блока на 64 байта. Проверяется что байты в диапазоне печатных символов ASCII: 0x20..0x7e, что сообщение заканчивается на ноль, и что остальные символы после первого нуля - тоже нули (что совсем не обязательно для безопасности). Хотя допускается сообщение во все 30 байт, без нуля в конце.
это все конечно да, но вопрос то в том выделено ли место именно для всех 64 байт пакета. И более сложный вопрос - а что если мы все таки умудримся передать пакет длиной более 64 байт
Программа запрашивает в цикле по одному байту и складывает в статический массив в памяти, количество повторений определено в программе, ровно 64. Вы никак не можете на это повлиять извне. Заканчивайте фантазировать.
бывают случаи когда есть даже регистр аппаратный - сколько байтов принять, а по факту - принимает сколько передали. Мне конечно проще было бы самому по коду посмотреть, а не задавать наводящие вопросы.
А насчет фантазировать - обидненько, я как вижу че там хакеры да и реверсеры придумывают, то понимаю что у меня то фантазии в этой области явно недостаточно. Так... обсудили вариант.
На чипах для кнопочных телефонов, и даже смартфонов, у некоторых производителей полно таких ошибок в бутлоадерах и FDL. Через USB передаёшь данные, а их размер даже не проверяется. Используя эти ошибки энтузиасты разблокируют загрузчик и устанавливают другую сборку Андроида или делают рута. Тут нет таких ляпов. Беспроводной чип не имеет доступа к ОЗУ, даёт данные по байту когда программа его спрашивает. Размер пакета устанавливается программой, а не беспроводным чипом.
Очень крутая работа и очень интересное её описание! Читал с удовольствием, спасибо!
ркспектище! очень классно!
что использовали в качестве дизассемблера?
по части разбора, точнее подбора формата графических ресурсов,полезно подсмотреть на форуме old-games, у них есть полезные утилиты, чтобы подобрать размер и битность графических ресурсов прямо по дампу, быстро можно найти шрифты и картинки, если они без сжатия лежат в дампе. ;)
очень крутая статья спасибо!
Крутой проект, спасибо
Очень круто. еще похоже с этими же каплями сейчас выпускают карманные "денди". Было бы интересно узнать, можно ли там слить прошивку и изменить набор игр. Не могу играть на эмуляторах, чувствую импут лаг.
Скорее всего нет, я вскрывал не карманный NES, дешевый клон с прошитыми играми. В корпусе SNES-мини, но внутри NES. Причём даже от корпуса мини - там занят лишь малый объём корпуса.
фото
Флэш Spansion S71PL127N. Впрочем, могут поставить любой другой. Это BGA чип, его не перепрошить так же просто как SOP8.
Думаю в карманных то же самое. Находил фото плат из карманных, бывают используют и флэш чипы с ножками (тоже большие, не SOP8), но и к ним сложно будет подключиться без пайки.
Вот, странная память с удобным доступом. Интересно есть ли сервисный режим для usb, будет забавно если на несовском процессор реализовали usb.
Так помимо дорогих консолей (которые чуть ли не на 4к дисплеях и FPGA эмулируют работу старинного железа) и ноунейм китайцев (в т.ч. поддерживающих загрузку дампов картриджей с кучи разных систем) были обыкновенные нинтендовские выпуски Game&Watch, сделанные на STM32 и давно хакнутые (и сторонние прошивки заливать можно, и родную при этом в дуалбуте держать, и чип памяти на более ёмкий перепаять). Ну прям на любой вкус девайсы есть.
В итоге я не утерпел и решил посмотреть сколько стоят эти игрушки. Не копеечно. И есть русифицированный вариант - хотя это похоже перевод инструкции, но сам факт .. кто то с этим играет
Посмотрите еще сколько стоят японские (Tamagotchi Uni, Tamagotchi Smart). Там ESP32-S3 в качестве процессора.
очень интересная статья. я коллекционирую тамагочи. Нашла несколько rom цветных тамагочи но не понимаю почему до сих пор не могут скопировать черно белые пиксельные тамагочи. нужно обязательно знать фирму и номер процессора?я вообще не разбираюсь конечно, вы поняли, но эта тема меня интересует. Так как получить некоторые модели очень тяжело
Что значит скопировать, прочитать ROM и эмулировать? Чёрно-белые китайские тоже есть, если вы про копирование. Где-то находил дамп рома чёрно-белого японского, вроде и эмулятор есть. Но вот эти чёрно-белые тамагочи не прочитать программатором, потому что вся прошивка находится в процессоре, только растворять оболочку процессора химией и потом фотографировать кристалл под микроскопом (чем я не занимаюсь).
наши добрые китайские друзья обладают талантом не только изготовить что то из того что было под рукой но и продать. а что бы сделать эмуляцию ("скопировать", если можно так выразиться) одного rom мало, надо в целом досконально знать как все это работает, а это "секрет фирмы". раскопать это - уже весьма трудозатратно, люди годами копаются, ну и повторить зачастую не вот просто.
Как верно заметил @jpegqs, уже давно была прочитана прошивка оригинального Тамагочи (Bandai P1) и написаны эмуляторы. Но с ним, можно сказать, повезло - ПЗУ у него довольно легко считывается визуально. Я сам, с недавнего времени, занимаюсь вскрытием кристаллов в "Тетрисах" и чтением их прошивки, и оказывается, это относительно редкая удача, увидеть читаемое ПЗУ под компаундом. Из 8 семейств микроконтроллеров, которые я находил, только у двух ПЗУ можно прочитать. Я вскрывал и пару "китайских" тамагочи - Mini Pets 8-in-1 и Pocket Puppy, и у обоих нечитаемое ПЗУ :(
Реверс-инжиниринг ToumaPet, китайского клона тамагочи с цветным экраном