Android中主机卡仿真的编辑功能

时间:2015-02-09 12:33:30

标签: android kernel nfc serial-number hce

我目前正在为我的大学课程开发一个项目,我希望能够编辑Android的HCE功能的功能,以便在模拟卡片时设置我自己的UID。

现在,我已经下载了AOSP源代码,并构建了一个没有编辑代码的自定义映像,并将其安装到我的Nexus 7(这包括下载并包含供应商特定的硬件驱动程序),并且我坚持下一个一部分。

我实际上无法找到管理Android NFC功能的设备代码,我不确定如何去寻找a)寻找它,以及b)我应该如何编辑这段代码。

Android中的NFC代码是否基于内核?如果是这样,在我再次运行“make”并希望它构建之前,我将如何编辑?还是在其他地方?我注意到我下载和提取的Vendor文件夹中的文件是.ncd格式,我认为这种格式不可编辑。

我将非常感谢你能得到的任何帮助。

2 个答案:

答案 0 :(得分:14)

好的!所以我找到了解决我遇到的问题的方法!

在Nexus 7上,当NFC打开时,它从“/ etc /”中的配置文件中获取其信息,名为“libnfc-brcm-20791b05.conf”

此文件内部有一个名为“NFA_DM_START_UP_CFG”的参数

默认情况下,它看起来像这样:

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}

要编辑在Emulation中生成的UID,您需要在此参数的末尾添加一些字节。

您添加的第一个字节是0x33(这意味着您将手动设置UID)

添加的第二个字节是您希望设置的UID的长度(这可以是4,7或10个字节,因此第二个字节可以是0x04,0x07或0x0A)

接下来的字节就是您要设置的ID! (注意:根据您添加的字节数,您应该更改数组的第一个字节以反映数组的新大小 - 它从42开始,因此如果您要添加6个字节,则应更改为48)

例如,如果您希望将7字节ID设置为01 02 03 04 05 06 07,则新配置行将如下所示:

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}

然后,您可以使用adb

将此配置文件推送到您的nexus设备
-> adb root
-> adb remount
-> adb push libnfc-brcm-20791b05.conf /etc/
-> adb reboot

这将使用新的配置文件重置Nexus,并且在模拟时,UID现在将设置为01 02 03 04 05 06 07

希望这有助于任何人阅读我的问题!

答案 1 :(得分:4)

Android的NFC堆栈基本上分为五个部分:

  • NFC接口设备驱动程序。这是内核的一部分。简而言之,该驱动器简单地在字符设备文件和NFC控制器硬件之间隧道传输数据帧(例如,NCI协议帧)。您不必为项目触摸该部分。

  • 用C语言编写的低级接口库(libnfc-ncilibnfc-nxp用于具有恩智浦PN544 NFC控制器的设备)。该库提供了一组与NFC控制器交互的高级功能。因此,它基本上将高级功能(例如"开始轮询技术X,Y和Z")转换为通过内核驱动程序发送到NFC控制器的NCI命令。这肯定是您需要添加修改的地方。作为AOSP的一部分,您可以使用普通的AOSP构建系统进行编译。

  • 用C ++(libnfc_nci_jni)编写的JNI接口库。该层将libnfc-nci C库与高级Java代码连接起来。如果您想从Android应用修改模拟的UID,这肯定是您需要添加修改的地方。作为AOSP的一部分,您可以使用普通的AOSP构建系统进行编译。

  • 用Java编写的Android NFC system service。该服务控制整个NFC堆栈,并根据libnfc-nci提供的资源实现高级功能。如果您想从Android应用修改模拟的UID,这肯定是您需要添加修改的地方。作为AOSP的一部分,您可以使用普通的AOSP构建系统进行编译。

  • Android core framework为NFC系统服务的功能提供API,Android应用可以访问该功能。

关于设置/修改模拟的UID,你肯定想看看我最近在GitHub上发布的这些项目(尽管它们仍在进行中):