Эмулировать карты Mifare с Android 4.4

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

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

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

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

спасибо.

4 ответов


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

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

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

    1. собственный протокол: поскольку этот протокол не использует APDUs в соответствии с ISO / IEC 7816-4, его невозможно эмулировать с помощью Android HCE.
    2. завернут родной протоколом: этот протокол использует APDUs согласно ISO / IEC 7816-4, однако, читатели обычно не будут выдавать команду SELECT с помощью помощи DESFire при запуске для связи с картой в оболочке собственный командный режим. (Примечание: новые реализации reader, скорее всего, выдадут команду SELECT, совместимую с Android HCE, поскольку это также требуется для некоторых из новых продуктов смарт-карт NXP с эмуляцией протокола DESFire.)
    3. протокол ISO: этот протокол основан на ISO / IEC 7816-4 и использует выбор применения помощью. Таким образом, можно эмулировать этот протокол с помощью Android РДП.

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

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


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

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

хороший способ продолжить этот поиск будет путем обратного проектирования приложения кошелька Google.


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

существует автономный эмулятор Mifare Ultralight что позволяет любое значение для UID0, имеет сбрасываемый OTP, замок, и блокирующие биты. Дополнительную информацию смотрите в руководстве.


короткий ответ:да. Однако зависит от многих факторов, таких как версия android, чип NFC телефона и т. д.

чтобы узнать, поддерживает ли ваше устройство, просто загрузите приложение, такое как"проверка NFC " по Tapkey, и он сообщит вам, если Mifare Classic & Mifare Ultralight поддерживаются. Существует также обновленный список, но, по-видимому, может быть некоторое несоответствие:https://www.shopnfc.com/en/content/7-nfc-compatibility

теперь вопрос в том "как". Я еще не нашел приложение, чтобы использовать эмуляцию хост-карты нового Android (HCE) для этой цели (см. здесь): насколько хорошо Android NFC API поддерживает Mifare Desfire?

на самом деле недавно MiFare предложил использовать метод" secure element " вместо этого:https://www.mifare.net/support/forum/topic/emulate-mifare-classic-1k/

вернемся к вашему вопросу о сверхлегком, основная трудность заключается в том, что Android API определяет как-сегодня отправка случайного UID на каждом кране, как предложил предыдущий пользователь nCypher:https://developer.android.com/guide/topics/connectivity/nfc/hce

в качестве альтернативного корневого доступа (или пользовательских ПЗУ cyanogen) может помочь изменить UID, как в этом примере: http://osgt7405i.bkt.clouddn.com/help/en/index.html?t=1536931682474

однако новейший Android API относится непосредственно к Сверхлегкий объект:https://developer.android.com/reference/android/nfc/tech/MifareUltralight

Я знаю некоторые компании, которые эмулируют это с помощью SIM-карты. Для использования телефона в качестве RFID-карты этих типов MIFARE, MiFare уже сделал одно решение, где бизнес может загружать карты в облаке https://www.mifare4mobile.org/ связанный к их SIM несущей. Существует список официально сертифицированных чипов NFC, которые работают, большинство из них NPX которые широко включены в смартфоны.

однако их решение является API SDK (а именно TapLinx). Нет чистого программного продукта от NXP, доступного как любое программное обеспечение эмуляции телефона или решение облачной базы.

более того, форум MiFare говорит об этом: https://www.mifare.net/support/forum/topic/creating-nfc-android-app-to-act-as-mifare-card-to-interact-with-mifare-readers/