2015-02-09 19 views
10

Ich bin gerade dabei, ein Projekt für meinen Universitätskurs zu entwickeln, in dem ich hoffentlich die Funktionalität der HCE-Funktion von Android bearbeiten werde, damit ich beim Emulieren meine eigene UID einstellen kann eine Karte.Bearbeitungsfunktionalität der Hostkartenemulation in Android

Jetzt habe ich die AOSP-Quelle heruntergeladen und ein benutzerdefiniertes Bild ohne bearbeiteten Code erstellt und das auf meinem Nexus 7 installiert (Dies beinhaltet das Herunterladen und einschließlich der Herstellerspezifischen Hardware-Treiber), und ich bin auf dem fest nächster Teil.

Ich kann physikalisch den Gerätecode nicht finden, der die NFC-Funktionen von Android regelt, und ich bin mir nicht sicher, wie ich a) auf der Suche nach, und b) Wie ich diesen Code bearbeiten sollte.

Ist der Code für NFC in Android in der Basis Kernel? und wenn ja, wie würde ich das bearbeiten, bevor ich wieder "make" starte und hoffe, dass es aufbaut? oder ist es anderswo? Ich habe festgestellt, dass die Dateien im Vendor-Ordner, den ich heruntergeladen und extrahiert habe, in einem .ncd-Format vorliegen, was meiner Meinung nach nicht bearbeitbar ist.

Jede Hilfe, die ich bekommen kann, würde sehr geschätzt werden.

Antwort

13

Ok! Also habe ich eine Lösung für das Problem gefunden, das ich hatte!

Auf dem Nexus 7, wenn die NFC eingeschaltet wird, wird es seine Informationen aus einer Konfigurationsdatei in „/ etc /“ „libnfc-BRCM-20791b05.conf“ genannt

Innerhalb dieser Datei gibt es ein Parameter „NFA_DM_START_UP_CFG“

standardmäßig genannt, es sieht wie folgt aus:

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} 

die UID zu bearbeiten, die bei Emulation erzeugt wird, müssen Sie einige Bytes bis zum Ende dieses Parameters hinzuzufügen.

Das erste Byte Sie hinzufügen, ist 0x33 (Dies bedeutet, dass Sie manuell die UID werden eingestellt)

Das zweite Byte, die hinzugefügt wird, ist die Länge der UID Sie einstellen wollen (Dies kann 4 entweder , 7 oder 10 Bytes, so kann dieses zweite Byte 0x04, 0x07 oder 0x0A sein)

Die nächsten Bytes sind dann die ID, die Sie setzen möchten! (HINWEIS: Je nachdem, wie viele Bytes Sie hinzufügen, sollten Sie das erste Byte des Arrays ändern, um die neue Größe des Arrays widerzuspiegeln - es beginnt bei 42, also sollten Sie 6 Bytes hinzufügen, sollte es 48 werden)

zum Beispiel, wenn Sie so einstellen wollen sieht eine 7-Byte-ID 01 02 03 04 05 06 07, die neue Konfigurationszeile wäre:

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} 

anschließend können Sie diese Konfigurationsdatei auf Ihr Nexus-Gerät drücken using adb:

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

Dies wird das Nexus mit der neuen Konfigurationsdatei in und emulieren Die UID wird jetzt auf 01 02 03 04 05 06 07

gesetzt

Hoffe das hilft jedem meine Frage zu lesen!

+0

Hallo, ich habe versucht, die UID meines OnePlus One in der Datei libnfc-brcm.conf zu fixieren, scheint aber nicht zu funktionieren ... :(Haben Sie eine Ahnung von der richtigen Konfiguration für das OnePlus? – Spawnrider

+0

Can Android dies mit Kartenemulation? – muyiou

4

Android NFC-Stack ist im Wesentlichen in fünf Teile aufgeteilt:

  • Die NFC-Schnittstelle Gerätetreiber. Dies ist ein Teil des Kernels. Kurz gesagt, dieser Treiber tunnelt einfach Datenrahmen (z. B. NCI-Protokollrahmen) zwischen einer Zeichengerätedatei und der NFC-Controller-Hardware. Sie müssen diesen Teil für Ihr Projekt nicht berühren.

  • Die Low-Level-Interface-Bibliothek geschrieben in C (oder libnfc-nxp für Geräte mit NXP PN544 NFC-Controller). Diese Bibliothek bietet eine Reihe von Funktionen auf hoher Ebene für die Interaktion mit dem NFC-Controller. Im Grunde übersetzt es grundlegende Funktionalität (z. B. "Startabfrage für Technologien X, Y und Z") in NCI-Befehle, die über den Kerneltreiber an den NFC-Controller gesendet werden. Dies ist sicherlich ein Ort, an dem Sie Änderungen hinzufügen müssen. Da es Teil von AOSP ist, können Sie es mit dem normalen AOSP-Build-System kompilieren.

  • Die in C++ geschriebene JNI-Schnittstellenbibliothek (libnfc_nci_jni). Diese Schicht verbindet die libnfc-nci C-Bibliothek mit höherem Java-Code. Wenn Sie die emulierte UID aus Android-Apps ändern möchten, müssen Sie hier Änderungen vornehmen. Da es Teil von AOSP ist, können Sie es mit dem normalen AOSP-Build-System kompilieren.

  • Das Android NFC system service in Java geschrieben. Dieser Dienst übernimmt die Kontrolle über den gesamten NFC-Stack und implementiert die High-Level-Funktionalität basierend auf den von libnfc-nci bereitgestellten Ressourcen. Wenn Sie die emulierte UID aus Android-Apps ändern möchten, müssen Sie hier Änderungen vornehmen. Da es Teil von AOSP ist, können Sie es mit dem normalen AOSP-Build-System kompilieren.

  • Das Android core framework bietet eine API für die Funktionalität des NFC-Systemdienstes, auf den Android-Apps zugreifen können.

Im Hinblick auf Einstellung/das emulierte UID Modifizierung werden Sie sicherlich einen Blick auf diese Projekte haben wollen, dass ich vor kurzem auf GitHub veröffentlicht (obwohl sie noch im Gange sind, funktionieren):