Emular la tarjeta Mifare con Android 4.4

Investigué Mifare y otras emulaciones de tarjetas. Tengo muy buenos conocimientos de progtwigción (no de Android, sino de C / C ++). Tengo proxmark y he creado varios códigos de emulación para proxmark, así que sé cómo se comunican las tarjetas.

No entiendo actualmente, Android permite la emulación completa de la tarjeta. He investigado esto durante aproximadamente 3 días, y la conclusión es que no hay un patrón constante. Algunas personas dicen que es posible, otros dicen que no. Miré a través de la API de Android y la emulación de la tarjeta basada en host parece ser capaz de hacer el truco, pero como entiendo es algo nuevo en 4.4 Kitkat, ¿alguien tiene alguna experiencia con eso?

Para simplificar las cosas, actualmente estoy investigando la emulación básica más simple para Mifare Ultralight. Esta tarjeta es una pesadilla de seguridad, no hay encriptación y solo tiene unas 10 funciones. Así que estoy interesado en comenzar una investigación con esta tarjeta, porque es la más fácil de reproducir.

Entonces, ¿alguien tiene algún conocimiento sobre emulación de tarjetas en Android? Tal vez no use el SO de stock. Cualquier cosa que valga la pena saber sería muy apreciada.

Gracias.

Con la emulación de tarjeta basada en host (HCE) en Android 4.4, solo puede emular el protocolo ISO / IEC 14443-4. Más específicamente, solo puede emular estructuras de aplicaciones de acuerdo con ISO / IEC 7816-4 (por lo tanto, las aplicaciones de emulación de tarjetas deben seleccionarse mediante un AID). Además, la API no le proporciona ningún medio para especificar si la emulación de la tarjeta debe realizarse utilizando el protocolo Tipo A o Tipo B.

Entonces con respecto a la emulación de varios protocolos MIFARE:

  • El protocolo MIFARE Ultralight (y derivados) opera sobre ISO / IEC 14443-3. No es posible emular tarjetas usando tales protocolos de capa baja usando Android HCE.
  • El protocolo MIFARE Classic opera parcialmente sobre ISO / IEC 14443-3 (con algunos marcos diferentes). Por lo tanto, tampoco es posible emular MIFARE Classic con Android HCE.
  • Los protocolos MIFARE DESFire funcionan sobre ISO / IEC 14443-4. Hay tres variantes del protocolo DESFire:

    1. protocolo nativo : como este protocolo no utiliza APDU según ISO / IEC 7816-4, no es posible emularlo usando Android HCE.
    2. protocolo nativo envuelto : este protocolo usa APDU de acuerdo con ISO / IEC 7816-4, sin embargo, los lectores normalmente no emitirán un comando SELECT usando el DESFire AID cuando comiencen a comunicarse con una tarjeta en modo nativo envuelto. (Nota: las implementaciones de lectores más nuevos tienen más probabilidades de emitir un comando SELECT que sea compatible con Android HCE, ya que también es necesario para algunos de los productos de tarjetas inteligentes más nuevos de NXP con la emulación de protocolo DESFire).
    3. Protocolo ISO : este protocolo se basa en ISO / IEC 7816-4 y utiliza la selección de aplicaciones por AID. Por lo tanto, es posible emular este protocolo con Android HCE.

    Algunos lectores pueden requerir ciertos valores de parámetros en capas de protocolo inferiores (como un nivel de cascada de UID específico, un cierto valor de ATQA, un cierto valor de SAK o un determinado ATS). Android HCE no tiene ningún medio para establecer estos valores. Consulte Edición de la funcionalidad de Emulación de tarjeta de host en Android para un posible enfoque para modificar esos valores en ciertos dispositivos rooteados y mi respuesta a Emulación de tarjeta basada en host con Identificación de tarjeta fija para una estrategia para cambiar programáticamente esos valores en una ROM personalizada.

Una nota sobre la función HCE disponible en CyanogenMod desde la versión 9.1 a la versión 10.2 : Emulará cualquier protocolo basado en ISO / IEC 14443-4 sin el requisito de una estructura de aplicación de acuerdo con ISO / IEC 7816-4. Incluso puede elegir si desea emular el protocolo Tipo A o Tipo B. Entonces debería ser posible (aunque no lo he probado) emular cualquiera de los tres protocolos DESFire. Sin embargo, incluso con la función HCE de CyanogenMod, no es posible emular los protocolos MIFARE Ultralight o Classic. Además, tampoco es posible influir en los parámetros de protocolo de bajo nivel, como un UID, ATQA, SAK o ATS.

He pasado semanas investigando este tema hace un año y mi conclusión basada en la implementación actual fue: la emulación de MIFARE Classic es posible, pero solo a través del elemento seguro integrado, este elemento está integrado en el chip NFC de NXP (chip PN65 incorporado para ejemplo, el Samsung I9300).

Pude emular completamente una tarjeta Mifare Classic usando funciones ocultas en la biblioteca android_external_libnfc-nxp. Aunque solo pude leer la tarjeta y para que sea útil, necesita acceso al Elemento seguro donde existe un applet de NXP en la mayoría de los casos, este applet sirve como front-end para administrar las tarjetas emuladas.

Una buena forma de continuar esta búsqueda sería mediante la aplicación inversa de la aplicación Wallet de Google.

El chip MIFARE Ultralight MF0ICU1 (16 páginas x 4 bytes cada uno) es de hecho una pesadilla, pero no se puede emular en ninguna interfaz NXP, incluido PN53x, porque cablearon el primer byte UID ( UID0 ) a 0x08 , por lo que significa que la etiqueta tiene un UID (según los estándares de NXP). Necesita UID0 = 0x04 para emular MIFARE Ultralight.

Existe un emulador Ultralight MIFARE independiente que permite cualquier valor para UID0 , tiene OTP reseteable, locking y bits de locking de bloque. Vea el manual para más información.