Android NFC卡仿真试图模拟一张卡

时间:2017-02-17 15:59:34

标签: android nfc apdu contactless-smartcard hce

我正在尝试使用NFC模拟卡片。

我的期望是,当我在NFC阅读器上通过手机时,阅读器会读取数据(这些数据将在未来修改)。

将电话传递到阅读器上,根据我的理解,入口点应该在Java类CardService.java中。但是方法processCommandApdu永远不会被调用(我试图在那里插入断点,甚至是吐司,但是从不调用该代码)。

所以目前我无法理解的主要问题是:我做错了什么吗?这件事可以做到吗?

1 个答案:

答案 0 :(得分:3)

为了为传入的APDU命令调用方法processCommandApdu(),读者需要首先选择您的应用程序。根据ISO / IEC 8716-4:

使用SELECT(通过AID / DF名称)命令完成选择
00 A4 04 00  <Lc>  <AID>  00

其中<Lc><AID>的长度,<AID>是为您的应用注册的应用标识符。

ISO / IEC 8716-4应用程序结构(即通过SELECT(通过AID)命令选择应用程序)是唯一的方式 Android允许通过HCE开始与应用程序的交互。因此,可以模拟使用不同机制的卡(卡应用程序)。 (至少没有修改Android系统本身;例如,通过自定义ROM或通过Xposed。)

CardEmulation示例应用程序的AID通过示例项目中名为res/xml/aid_list.xml的文件进行注册。在此文件中,您注册AID组,而AID组又包含AID过滤器条目:

<aid-group android:description="@string/card_title" android:category="other">
    <aid-filter android:name="F222222222"/>
</aid-group>

因此,示例应用中注册的默认AID为F222222222。因此,您可以使用以下SELECT(字节AID)命令来选择应用程序:

00 A4 04 00  05  F2 22 22 22 22  00