Перейти к содержанию

← Назад в раздел NFC.cool Blog

Читай, коллекционируй и делай резервные копии Amiibo на iPhone и Android

Вымышленная коллекционная фигурка с NFC рядом с телефоном, на экране которого личная коллекция

Люди думают, что внутри Amiibo стоит что-то экзотическое. Какой-то кусок нинтендовского кремния, который больше нигде не купишь. Ничего подобного. В основание фигурки запаян NTAG215, та самая чистая наклейка-чип, которую я читаю и записываю каждый день, из тех, что продаются десятком за копейки. Примерно 540 байт памяти, серийный номер, прошитый на заводе, и вот вся фигурка. Дорогая в ней пластмасса. Чип почти второстепенная деталь.

Именно поэтому меня это так долго и грызло. Я зарабатываю чтением и записью NFC-меток, а целая категория меток, несколько фигурок на полке у стола, вызывала у моего собственного приложения лишь пожатие плечами. Я хочу, чтобы NFC.cool был самым способным NFC-приложением, которое можно поставить на телефон, и не оставлял без внимания ни одного вида меток.

Так что я сел, разложив фигурки с одной стороны и Switch с другой, и сделал в NFC.cool нормальную поддержку Amiibo. Дальше о том, что из этого вышло и что я по дороге понял, начиная с того, почему настолько дешёвый чип так неожиданно трудно скопировать.


Так в чём же волшебство?

Если чип настолько обычный, волшебство явно не в кремнии. Оно в байтах. Amiibo работает по сути как дешёвая записная книжка, в которой Nintendo пишет своим закрытым шифром, а внизу ставит подпись, чтобы подделку можно было отличить от настоящей. (Сам чип это обычный NTAG215, если хочется подробнее разобраться в типах меток.)

В этих байтах живут две вещи. Первая открыта всем: небольшой блок, который говорит, что это за персонаж, скажем Link из серии The Legend of Zelda в конкретной линейке Amiibo. Именно эту часть читает Switch, чтобы понять, что его коснулась фигурка. Вторая часть закрыта: это сами сохранённые данные, вроде прозвища, Mii владельца, числа использований фигурки и того, что нацарапала в отведённом ей блокноте текущая игра. Эта часть зашифрована и подписана.


Почему Amiibo нельзя просто скопировать

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

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

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


Что NFC.cool умеет теперь

Три вещи, примерно в том порядке, в котором ими и пользуются.

Чтение. Поднеси Amiibo к задней стороне телефона так же, как любую NFC-метку, и NFC.cool сразу его опознает: персонаж, игровая серия, серия Amiibo, тип фигурки и её изображение, плюс пара фактов с самой метки, например сколько раз на неё писали. Ключи для этого не нужны. Опознание фигурки трогает только ту часть, что и так открыта.

Коллекция. Каждый считанный Amiibo попадает в «Мою коллекцию», простую сетку из всего, что у тебя есть. Она живёт на устройстве, а на iPhone синхронизируется с другими устройствами Apple через iCloud, и изображения кешируются, поэтому без интернета коллекция всё равно выглядит как надо. Одно это превратило мою грустную полочку в то, что можно листать.

Резервное копирование и восстановление. Со своими импортированными ключами можно записать копию фигурки с новыми ключами на чистую метку NTAG215. Копию можно снять прямо с фигурки, которую только что считал, или восстановить из сохранённого файла .bin на устройстве. Приложение заново выводит ключи под ту чистую метку, что у тебя в руках, и подписывает данные для неё, поэтому копия верна сама по себе, а не остаётся заведомо провальной побайтовой подделкой. Запись необратима: заблокированная метка остаётся заблокированной, и приложение прямо говорит об этом до того, как ты соглашаешься.


Чего здесь намеренно нет

NFC.cool не поставляется с ключами Amiibo и не будет. Ключей внутри приложения не спрятано, и библиотеки данных Amiibo в него не зашито.

Чтение и коллекция работают сразу, потому что трогают только открытую часть метки. С резервным копированием иначе: ему нужны мастер-ключи, а они принадлежат Nintendo, а не мне. Если ты добыл их сам, будь то объединённый key.bin или два отдельных файла, ты один раз импортируешь их в приложение, и резервное копирование включается. Если не добыл, оно остаётся выключенным. Я сделал машину, топливо приносишь ты.

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


Для протокола

Две вещи, о которых хочу сказать прямо.

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

Во-вторых, резервное копирование и восстановление сделаны для образовательных и личных целей: чтобы защитить фигурки, которые у тебя уже есть. Сделай запасную копию той, которую ребёнок постоянно роняет, или оставь оригинал в коробке, а повседневную нагрузку отдай дешёвой метке NTAG215. Ради этого я функцию и делал. Приноси свои ключи, копируй только те фигурки, которыми действительно владеешь, и уважай права Nintendo и закон там, где ты живёшь. Что ты делаешь с инструментом, остаётся твоей ответственностью.


Оно и правда работает

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

Я считал одну из своих фигурок, сохранил её на чистую метку NTAG215 и отнёс копию к Switch. Запустил The Legend of Zelda: Tears of the Kingdom, поднёс копию к нужному Joy-Con, и в инвентарь упала горсть игровых предметов. Ровно как с оригиналом. Ни жалоб, ни сообщения о том, что этот Amiibo не читается. Вот в этот момент всё и стало для меня настоящим. Вся эта математика вывода ключей и раскладка байтов, а на выходе дешёвая чистая наклейка, которую консоль Nintendo спокойно принимает за настоящую фигурку.

Полка рядом со столом больше не просто украшение. Она стала функцией.

Если хочется попробовать, инструменты для Amiibo лежат в NFC.cool на iPhone и на Android, рядом со всем остальным, что я сделал для чтения и записи меток. Приноси свои ключи, поднеси фигурку и посмотри, что твоё приложение всё это время тихо игнорировало.

Похожие статьи

Готов сканировать?

4,5·73 500 оценок·Бесплатно