字节自动由Android发送 - NFC到模拟卡

时间:2014-01-14 18:28:36

标签: android nfc apdu hce contactless-smartcard

我通过带有日志控制台的计算机在Card Emulation模式下运行SpringCard。

只要我在Android手机(API 4.1.2)上使用NFC检查(没有app runnig), 我的手机将这些数据发送到模拟卡:

1st set -> 90:60:00:00:00
2nd set -> 00:A4:04:00:07:D2:76:00:00:85:1:1:0

这些命令究竟是什么?它们与我的Android有关,它试图发现什么 科技是否使用模拟卡?

修改

实际上我已经理解第二组是什么(APDU SELECT)。

但似乎第一套是来自Android的专有APDU命令。 这可能与NPP(NDEF推送协议)有关吗?

1 个答案:

答案 0 :(得分:6)

这些命令是什么?

第一个命令(90 60 00 00 00)是MIFARE DESFire GetVersion命令(包装命令集)。这似乎是特定于基于恩智浦的NFC NFC堆栈,并不属于典型的NFC标签检测程序。

第二个命令(00 A4 04 00 07 D2 76 00 00 85 01 01 00)是一个SELECT APDU,它试图通过AID选择NFC论坛类型4标签应用程序(版本2.0)。这是基于ISO 14443-4(ISO-DEP)的标签/智能卡的典型标签检测程序的一部分。

为什么在应用程序收到有关标记存在的通知之前发送这些命令,即使没有应用程序处于活动状态?

典型的NFC设备将自动发现包含NDEF消息的NFC标签的存在。通常这样的NDEF消息然后触发设备上的动作(例如,启动app)。由于您的标签似乎是符合ISO 14443-4(ISO-DEP)标签/智能卡,因此启动了NFC论坛类型4标签的NDEF发现程序。此过程通常包含以下步骤:

  1. 选择NFC论坛类型4标签应用程序(版本2.0)

    00 A4 04 00 07 D2 76 00 00 85 01 01 00
    
  2. 如果应用程序选择成功,请继续阅读功能容器文件和NDEF数据文件。

  3. 如果应用程序选择失败,请继续选择NFC论坛类型4标签应用程序(版本1.0)

    00 A4 04 00 07 D2 76 00 00 85 01 00 00
    
  4. 如果应用程序选择成功,请继续阅读功能容器文件和NDEF数据文件。

  5. 如果应用程序选择失败,则标记不是NFC论坛类型4标记。

  6. 此时通常会重置与标记的连接,以便在重新激活标记后立即启动应用与标记执行的任何通信。

  7. 步骤1之前的附加命令表明恩智浦的NFC堆栈还试图找出Type 4标签是否是NXP产品(NXP的MIFARE DESFire或DESFIRE EV1)。 与点对点模式协议无关。

    备注Broadcom NFC堆栈: Android 4.4上似乎仍然存在一个已知问题:即使将标签传递到应用程序并且应用程序启动了IsoDep通信,NFC堆栈也是任意的发送与应用程序通信交错的READ BINARY命令。由于无效的命令序列,这经常导致协议错误。对于NXP的NFC堆栈,会发生这种情况。

    我可以阻止对代码进行初始处理吗?

    是的,但仅限Android 4.4。在该平台上,您可以使用NfcAdapter的enableReaderMode方法将设备置于读取器模式而无需NDEF发现。