我正在尝试开发一个在Android上模仿HCE信用卡的应用程序(4.4)。我有一个目标应用程序,可以读取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();
}
我错过了什么?感谢任何建议。
答案 0 :(得分:4)
您缺少信用卡不是简单的内存标签。相反,它们使用相当复杂的协议进行通信(根据ISO 7816-4的文件结构,并使用特定命令指示卡选择应用程序,返回文件数据,执行事务等)。信用卡协议由EMVCo指定,可以找到here。
答案 1 :(得分:0)
作为示例,您可以查看此项目(https://bitbucket.org/tbellenger/hce_mobile_card/commits/52c7081cca5017638d4a74e40cb44a4bd7efb7f6)。尽管新代码破坏了功能,但不要超过此提交。该应用程序能够通过NFC读取paywave或paypass信用卡,并将卡中的信息存储在手机中。然后,如果您在非接触式支付终端上轻触手机,它将发送从手机收到的信息。这里有一个帮助程序库(https://bitbucket.org/tbellenger/card_tools)。祝你好运。