如何使用IsoDep读取NFC卡?

时间:2014-04-15 14:12:30

标签: android nfc rfid apdu contactless-smartcard

我想通过NFC读取RFID卡,该卡来自哥伦比亚波哥大的当地交通系统。我知道这是可能的,因为我已经下载了一个可以做到这一点的Android应用程序!

到目前为止我的进展...当我将手机放在卡上时,我的应用程序已启动,其中包含ACTION_TECH_DISCOVERED意图,我可以读取卡片UID等内容,但我不知道如何阅读我想要的信息,特别是卡上的钱。

我在这里阅读stackoverflow,我需要做的是找到我想要访问的应用程序并发送ADPU命令,但看起来我的卡没有任何应用程序,因为使用任何Android应用程序探索卡,它总是说找到0应用程序。所以,我不知道我必须在哪里获得这些信息。

我卡上的技术信息是:

  • 标签ID:08 8B E2 D1 RF
  • 技术:A型(ISO / IEC 14443 A型)
  • 标签类型:ISO / IEC 14443-4智能卡
  • ATQA:0004
  • SAK:20
  • HISTORICAL BYT:01112003
  • 技术课程:android.nfc.tech.IsoDep,android.nfc.tech.NfcA

谢谢!

1 个答案:

答案 0 :(得分:2)

  

我在stackoverflow中[读取]我需要做的是找到我想访问的应用程序并发送ADPU命令。

正确,这正是你需要做的。获得此信息(即卡的通信协议规范)后,您将执行以下操作:

Tag tag = ... // TODO: get tag handle from intent
IsoDep isoDep = IsoDep.get(tag);
if (isoDep != null) {
    isoDep.connect();

    byte[] response = isoDep.transceive(SELECT_APDU); // SELECT_APDU = 00 A4 0400 <Lc> <APPLICATION ID>

    // TODO: send further APDU commands according to the protocol specification
    //response = isoDep.transceive(APDU);

    isoDep.close();
}
  

[...]但看起来我的卡没有任何应用程序,因为使用任何Android应用程序探索卡,它总是说找到0应用程序。

这通常只意味着扫描仪应用程序*已知的卡**上没有应用程序。许多ISO-DEP卡没有卡上可用的公共可读应用程序目录。 (虽然有些卡可能有EF.DIR或类似的东西。)

  

所以,我不知道在哪里必须得到这个信息。

对,这通常是棘手的部分。有几种方法:

  1. 向运输系统运营商询问规格。
  2. 检查该卡是否有EF.DIR(或类似),并在那里列出一些内容(虽然这只会给你一个起点,因为它仍然没有显示卡的协议)。
  3. 检查卡是否有GlobalPlatform安全域/卡管理器,以及是否可以使用默认密钥访问该卡管理器(Google将帮助您进一步阅读)。如果是,GP提供列出已安装应用程序的命令。关于协议,与2.适用相同。
  4. 对您知道可以访问该卡的应用进行反向工程。 (请注意,这可能在您所在的国家/地区是非法的和/或应用程序的许可协议禁止。)
相关问题