NFC Spy 用来查看读卡器和智能卡之间的指令、数据的交互传输过程,以便 NFC/HCE 开发者分析研究底层通讯协议,定位错误指令。

本程序要使用两部带有 NFC 硬件的 Android 手机,并且要求其中至少一部运行4.4或更高版本的系统(因为需要支持 HCE)。

两部手机中一部处于主机卡模拟(HCE)模式,另一部处于一般的 NFC 读卡器模式,他们之间通过 WLAN 直连(WiFi-P2P)互相连接。

当第一部模拟卡片的手机靠近一个真实读卡器(POS机,柜员机,公交地铁站点闸机等)时,会接收读卡器发来的 APDU,并通过 WLAN 直连的 Socket 链路一并发给第二部手机,第二部手机事先已经靠近一张智能卡处于 NFC 读卡状态,它将转发过来的 APDU 发给智能卡,并将智能卡的响应 APDU 再发回第一部手机,进而由第一部手机发给真实的读卡器。

最终的效果是真实读卡器会认为自己在直接读卡,而本程序会记录下所有的往来 APDU。以上是本程序的工作方式,也是叫做“NFC Spy”的原因。

NFC Spy 是开源软件,可以在 https://github.com/sinpolib/nfcspy/ 下载最新代码。

Android NFC循环测试apk nfc测试设备_Android NFC循环测试apk

Android NFC循环测试apk nfc测试设备_github_02

Android NFC循环测试apk nfc测试设备_Android NFC循环测试apk_03

Android NFC循环测试apk nfc测试设备_github_04

Android NFC循环测试apk nfc测试设备_github_05

注意:

请不要用于非法途径,否则一切后果由当事者本人独自承担。另外有些情况下需要ROOT或修改系统文件,请务必小心!由此产生的风险和损失 NFC Spy 开发者也不承担任何责任。

如果你同时安装了其他 HCE 应用,在系统“触碰付款”设置页面中可能会看到多个模拟卡片,使用本程序前请先选中 NFC Spy 卡。

Android HCE 架构使用 HCE Service 来实现卡模拟,每个 Service 需要向系统注册一个 AID 列表,每当外部读卡器开始读卡时会进行应用(AID)选择,系统会根据 AID 注册信息决定启动哪个 Service 接手后续读卡过程。
这样会产生三个问题。首先,主机卡模拟目前只支持符合 ISO14443-A/ISO7816 规范的智能卡,其他诸如M1,Felica,电子标签等都无法模拟;其次 NFC Spy 只能支持有限的 AID 类型;最后, HCE 只接受标准的ISO7816 SELECT NAME/AID 指令作为第一条指令,如果读卡器开始没有发这类指令的 APDU 则无法继续。

第一个问题现在无法解决,除非改用其他方式实现卡片模拟,比如 CyanogenMod 的某些版本;为解决第二个问题,你需要ROOT过的手机,安装 Xposed 框架,激活 NFC Spy 或者 'NFC Card-Emulation Catch-All Routing' 模块,它们都会将所有的 AID 选择都交给特定的 Service 处理;最后那个问题,可以通过修改系统运行库解决。