2

我正在尝试开发一个在 Android(4.4)上通过 HCE 模拟信用卡的应用程序。我有一个可以从 NFC 贴纸读取的目标应用程序,现在我希望通过在我的设备上模拟 NFC 来实现相同的结果。该应用程序支持读取 ISO 14443-4 Type A/IsoDep,这很好,因为这是我正在模拟的。据我了解,应用程序读取的格式是:“B5105105105105100^CARDDATA^121222200000181000000,5105105105105100=121222200000181000000”(在此示例中,我使用 MC 测试卡编号)。目标是让目标应用程序接收我以正确格式发送的数据,但我还没有实现这一点。我试图检查其他示例,但很难找到它们,而且我的知识在这一点上有些有限。

我已经在我的 apduservice.xml 中设置了目标应用程序所需的 AID

现在的问题是如何将正确的数据发送到目标应用程序?我想同时发送 track1 "B5105105105105100^CARDDATA^121222200000181000000" 和 track2 "5105105105105100=121222200000181000000" 我是否需要通过 AID/PPSE 验证 apdu 部分而不是通过 apduservice 文件?

我试过以下没有成功:

代码:

public static String pan = "B5105105105105100^CARDDATA^121222200000181000000,5105105105105100=121222200000181000000";

@Override
public byte[] processCommandApdu(byte[] apdu, Bundle extras) {
    byte[] response = new byte[] {};

    return response = pan.getBytes();
}

我错过了什么?感谢您的任何建议。

4

2 回答 2

5

你错过了信用卡不是简单的记忆标签。相反,它们使用相当复杂的协议进行通信(由符合 ISO 7816-4 的文件结构组成,并使用特定命令来指示卡选择应用程序、返回文件数据、执行交易等)。信用卡协议由 EMVCo 指定,可在此处找到。

于 2014-02-12T10:24:32.600 回答
1

例如,您可以查看这个项目(https://bitbucket.org/tbellenger/hce_mobile_card/commits/52c7081cca5017638d4a74e40cb44a4bd7efb7f6)。不过不要跳过这个提交,因为新代码会破坏功能。该应用程序能够通过 NFC 读取 paywave 或 paypass 信用卡,并将卡中的信息存储在手机中。然后,如果您将手机轻触非接触式支付终端,它将发送从手机收到的信息。这里有一个帮助程序库(https://bitbucket.org/tbellenger/card_tools)。祝你好运。

于 2014-04-29T23:50:13.327 回答