Edición de la funcionalidad de la emulación de la tarjeta de host en Android

Actualmente estoy en el proceso de desarrollar un proyecto para mi curso de la Universidad en el que espero que edite la funcionalidad de la función HCE de Android para permitirme establecer mi propio UID al emular una tarjeta.

Ahora, descargué la fuente AOSP, y construí una imagen personalizada sin código editado y la instalé en mi Nexus 7 (esto incluye descargar e incluir los controladores de hardware específicos del proveedor), y estoy atascado en la siguiente parte.

Físicamente no puedo encontrar el código del dispositivo que rige las características NFC de Android, y no estoy seguro de cómo hacerlo a) Buscarlo, yb) Cómo debería editar este código.

¿El código para NFC en Android está en Kernel base? y si es así, ¿cómo editaría eso antes de ejecutar “make” de nuevo y esperar que se genere? o está en otro lugar? Me he dado cuenta de que los archivos en la carpeta del proveedor que he descargado y extraído están en un formato .ncd, que no creo que sea editable.

Cualquier ayuda que pueda obtener sobre esto sería muy apreciada.

    Okay ! ¡Así que encontré una solución al problema que estaba teniendo!

    En el Nexus 7, cuando se enciende la NFC, obtiene su información de un archivo de configuración en “/ etc /” llamado “libnfc-brcm-20791b05.conf”

    Dentro de este archivo hay un parámetro llamado “NFA_DM_START_UP_CFG”

    Por defecto, se ve así:

    NFA_DM_START_UP_CFG={42:CB:01:01:A5:01:01:CA:14:00:00:00:00:0E:C0:D4:01:00:0F:00:00:00:00:C0:C6:2D:00:14:0A:B5:03:01:02:FF:80:01:01:C9:03:03:0F:AB:5B:01:00:B2:04:E8:03:00:00:CF:02:02:08:B1:06:00:20:00:00:00:12:C2:02:01:C8} 

    Para editar el UID que se genera en Emulation, debe agregar algunos bytes al final de este parámetro.

    El primer byte que agrega es 0x33 (Esto significa que va a configurar manualmente el UID)

    El segundo byte que se agrega es la longitud del UID que desea establecer (Esto puede ser 4,7 o 10 bytes, por lo que este segundo byte puede ser 0x04, 0x07 o 0x0A)

    ¡Los siguientes bytes son la ID que deseas establecer! (NOTA: Dependiendo de cuántos Bytes agregue, debe cambiar el primer byte de la matriz para reflejar el nuevo tamaño de la matriz; comienza en 42, por lo que si agregara 6 bytes, debería cambiar a 48)

    Por ejemplo, si desea establecer una ID de 7 bytes de 01 02 03 04 05 06 07, la nueva línea de configuración se vería así:

     NFA_DM_START_UP_CFG={4B:CB:01:01:A5:01:01:CA:14:00:00:00:00:0E:C0:D4:01:00:0F:00:00:00:00:C0:C6:2D:00:14:0A:B5:03:01:02:FF:80:01:01:C9:03:03:0F:AB:5B:01:00:B2:04:E8:03:00:00:CF:02:02:08:B1:06:00:20:00:00:00:12:C2:02:01:C8:33:07:01:02:03:04:05:06:07} 

    A continuación, puede insertar este archivo de configuración en su dispositivo nexus usando adb:

     -> adb root -> adb remount -> adb push libnfc-brcm-20791b05.conf /etc/ -> adb reboot 

    Esto restablecerá el Nexus con el nuevo archivo de configuración, y luego de la emulación, el UID se establecerá en 01 02 03 04 05 06 07

    Espero que esto ayude a cualquiera que lea mi pregunta!

    La stack de NFC de Android se divide básicamente en cinco partes:

    • El controlador del dispositivo de interfaz NFC. Esto es parte del kernel. En pocas palabras, este controlador simplemente en túneles de marcos de datos (por ejemplo, marcos de protocolo NCI) entre un archivo de dispositivo de caracteres y el hardware del controlador NFC. No tendrá que tocar esa parte para su proyecto.

    • La biblioteca de interfaz de bajo nivel escrita en C ( libnfc-nci , o libnfc-nxp para dispositivos con controlador NFC PN544 de NXP). Esta biblioteca proporciona un conjunto de funciones de alto nivel para interactuar con el controlador NFC. Por lo tanto, básicamente se traduce la funcionalidad de alto nivel (por ejemplo, “inicio de sondeo para las tecnologías X, Y y Z”) en los comandos NCI que se envían al controlador NFC a través del controlador kernel. Este es ciertamente un lugar donde tendrá que agregar modificaciones. Como es parte de AOSP, puedes comstackrlo usando el sistema de comstackción AOSP normal.

    • La biblioteca de interfaz JNI escrita en C ++ ( libnfc_nci_jni ). Esta capa conecta la biblioteca libnfc-nci C con código Java de alto nivel. Si desea modificar el UID emulado de las aplicaciones de Android, este es sin duda un lugar donde tendrá que agregar modificaciones. Como es parte de AOSP, puedes comstackrlo usando el sistema de comstackción AOSP normal.

    • El servicio del sistema Android NFC escrito en Java. Este servicio toma el control de toda la stack de NFC e implementa la funcionalidad de alto nivel en función de los recursos proporcionados por libnfc-nci. Si desea modificar el UID emulado de las aplicaciones de Android, este es sin duda un lugar donde tendrá que agregar modificaciones. Como es parte de AOSP, puedes comstackrlo usando el sistema de comstackción AOSP normal.

    • El marco central de Android proporciona una API para la funcionalidad del servicio del sistema NFC al que pueden acceder las aplicaciones de Android.

    Con respecto a establecer / modificar el UID emulado, seguramente querrá echar un vistazo a estos proyectos que publiqué recientemente en GitHub (aunque todavía están en proceso):