Подтвердить что ты не робот

Эмулируйте карту Mifare с Android 4.4

Я изучил Mifare и другие эмуляции карт. У меня очень хорошие знания в программировании (не Android, а C/С++). У меня есть proxmark, и я сделал несколько кодов эмуляции для proxmark, поэтому я знаю, как взаимодействуют карты.

В настоящее время я не понимаю, поддерживает ли андроид полноценную эмуляцию карты. Я исследовал это уже около 3 дней, и вывод заключается в том, что нет никакой постоянной картины. Некоторые говорят, что это возможно, некоторые говорят, что это не так. Я просмотрел API Android и эмуляция карт на основе хоста, похоже, в состоянии сделать трюк, но, как я понимаю, это новая вещь в 4.4 Kitkat, есть ли у кого-нибудь опыт?

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

Значит, у кого-то есть знания в эмуляции карт на Android. Возможно, не использовать ОС ОС. Любая вещь, которая стоит знать, будет очень оценена.

Спасибо.

4b9b3361

Ответ 1

С эмуляцией карт на базе хоста (HCE) в Android 4.4 вы можете эмулировать протокол ISO/IEC 14443-4. Более конкретно, вы можете эмулировать структуры приложений в соответствии с ISO/IEC 7816-4 (при этом приложения эмуляции карт должны выбираться с помощью AID). Кроме того, API не дает вам никаких средств, чтобы указать, следует ли использовать эмуляцию карты с использованием протокола типа A или типа B.

Итак, что касается эмуляции различных протоколов MIFARE:

  • Протокол MIFARE Ultralight (и производных) работает поверх ISO/IEC 14443-3. Невозможно эмулировать карты с использованием таких протоколов низкого уровня с помощью Android HCE.
  • Протокол MIFARE Classic частично работает поверх ISO/IEC 14443-3 (с некоторым различным обрамлением). Таким образом, его также невозможно эмулировать MIFARE Classic с помощью Android HCE.
  • Протоколы MIFARE DESFire работают поверх ISO/IEC 14443-4. Существует три варианта протокола DESFire:

    • собственный протокол: поскольку этот протокол не использует APDU в соответствии с ISO/IEC 7816-4, его невозможно эмулировать с помощью Android HCE.
    • wrapped native protocol: этот протокол использует APDU в соответствии с ISO/IEC 7816-4, однако, как правило, читатели не выдают команду SELECT с использованием DESFire AID при запуске связи с картой в оболочном режиме командной строки. (Примечание. Более новые реализации читателей с большей вероятностью выдают команду SELECT, совместимую с Android HCE, поскольку это также необходимо для некоторых новых продуктов для смарт-карт NXP с эмуляцией протокола DESFire.)
    • Протокол ISO: Этот протокол основан на ISO/IEC 7816-4 и использует выбор приложений с помощью AID. Таким образом, можно будет эмулировать этот протокол с помощью Android HCE.

    Некоторым читателям могут потребоваться определенные значения параметров в нижних слоях протокола (например, конкретный каскадный уровень UID, определенное значение ATQA, определенное значение SAK или определенное ATS). Android HCE не имеет никаких средств для установки этих значений. См. Редактирование функциональности эмуляции хост-карты в Android для возможного подхода к изменению этих значений для определенных корневых устройств и мой ответ на Host для эмуляции карты с фиксированным идентификатором карты для стратегии по программному изменению этих значений в пользовательском ПЗУ.

Замечание о функции HCE, доступной в CyanogenMod от версии 9.1 до версии 10.2: Это будет эмулировать любой протокол на основе ISO/IEC 14443-4 без требования к структуре приложения в соответствии с ISO/IEC 7816-4. Вы даже можете выбрать, хотите ли вы эмулировать протокол типа A или типа B. Поэтому должно быть возможно (хотя я еще не тестировал), чтобы подражать любому из трех протоколов DESFire. Однако даже с функцией HCE CyanogenMod невозможно эмулировать протоколы MIFARE Ultralight или Classic. Кроме того, также невозможно влиять на параметры протокола низкого уровня, такие как UID, ATQA, SAK или ATS.

Ответ 2

Я провел недели, исследуя эту тему год назад, и мой вывод, основанный на текущей реализации, был: Эмуляция MIFARE Classic возможна, но только через Embedded Secure Element этот элемент встроен в чип NFC NFC (чип PN65, встроенный, например, в Samsung I9300).

Мне удалось полностью эмулировать карту Mifare Classic, используя скрытые функции в библиотеке android_external_libnfc-nxp. Хотя я мог только читать карту, и для ее использования вам нужен доступ к защищенному элементу, где апплет NXP существует в большинстве случаев, эти серверы апплетов являются интерфейсом для управления эмулированными картами.

Хорошим способом продолжить этот поиск было бы обратное проектирование приложения Google wallet.

Ответ 3

Микросхема MIFARE Ultralight MF0ICU1 (16 страниц по 4 байта каждая) действительно является кошмаром, но не может быть эмулирована на любых NXP-интерфейсах, включая PN53x, потому что они связали первый UID байт (UID0) с 0x08, поэтому это означает, что у тега есть случайный UID (в соответствии со стандартами NXP). Вам нужно UID0 = 0x04 для эмуляции MIFARE Ultralight.

Существует автономный эмулятор автономный эмулятор MIFARE Ultralight, который позволяет любое значение для UID0, имеет сбросные блоки OTP, блокировку и блокировку блокировки. Подробнее см. В руководстве.