【问题标题】:Android NFC Card Emulation try to emulate a cardAndroid NFC Card Emulation 尝试模拟卡片
【发布时间】:2017-03-14 15:14:17
【问题描述】:

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

我期望的是,当我通过 NFC 阅读器传递手机时,阅读器会读取数据(这些数据我会在以后修改)。

在阅读器上传递电话,据我了解,入口点应该在Java类CardService.java中。但是方法 processCommandApdu 从未被调用(我曾尝试在此处插入断点,甚至是 toast,但从未调用过该代码)。

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

【问题讨论】:

  • 你在读卡器端做了什么来与模拟卡交互?
  • 关于阅读器我刚刚安装了驱动程序以使其正常工作
  • 那么,如果您不对其进行编程,您为什么希望读者阅读任何内容呢?
  • 因为我认为使用示例项目“CardEmulation”能够模拟设备,就好像它是一张卡一样。至少我认为它应该调用该方法
  • 没错。该示例项目将使手机模拟非接触式智能卡。但是您还需要一些软件来使用读卡器硬件来实际读取该模拟卡。如果没有这样的软件,阅读器将不知道如何与卡片交互,因此 CardEmulator 应用程序将不会被调用。

标签: android nfc apdu contactless-smartcard hce


【解决方案1】:

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

00 A4 04 00 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-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

【讨论】:

    猜你喜欢
    • 2014-04-27
    • 2015-07-06
    • 2011-09-30
    • 2014-06-12
    • 2022-01-08
    • 2023-04-11
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多