NFC Spy 用来查看读卡器和智能卡之间的指令、数据的交互传输过程,以便 NFC/HCE 开发者分析研究底层通讯协议,定位错误指令。

本程序要使用两部带有 NFC 硬件的 Android 手机,并且要求其中至少一部运行4.4或更高版本的系统(因为需要支持 HCE)。

两部手机中一部处于主机卡模拟(HCE)模式,另一部处于一般的 NFC 读卡器模式,他们之间通过 WLAN 直连(WiFi-P2P)互相连接。

当第一部模拟卡片的手机靠近一个真实读卡器(POS机,柜员机,公交地铁站点闸机等)时,会接收读卡器发来的 APDU,并通过 WLAN 直连的 Socket 链路一并发给第二部手机,第二部手机事先已经靠近一张智能卡处于 NFC 读卡状态,它将转发过来的 APDU 发给智能卡,并将智能卡的响应 APDU 再发回第一部手机,进而由第一部手机发给真实的读卡器。

最终的效果是真实读卡器会认为自己在直接读卡,而本程序会记录下所有的往来 APDU。以上是本程序的工作方式,也是叫做“NFC Spy”的原因。

NFC Spy 是开源软件,可以在 https://github.com/sinpolib/nfcspy/ 下载最新代码。

注意:

请不要用于非法途径,否则一切后果由当事者本人独自承担。另外有些情况下需要ROOT或修改系统文件,请务必小心!由此产生的风险和损失 NFC Spy 开发者也不承担任何责任。

如果你同时安装了其他 HCE 应用,在系统“触碰付款”设置页面中可能会看到多个模拟卡片,使用本程序前请先选中 NFC Spy 卡。

Android HCE 架构使用 HCE Service 来实现卡模拟,每个 Service 需要向系统注册一个 AID 列表,每当外部读卡器开始读卡时会进行应用(AID)选择,系统会根据 AID 注册信息决定启动哪个 Service 接手后续读卡过程。
这样会产生三个问题。首先,主机卡模拟目前只支持符合 ISO14443-A/ISO7816 规范的智能卡,其他诸如M1,Felica,电子标签等都无法模拟;其次 NFC Spy 只能支持有限的 AID 类型;最后, HCE 只接受标准的ISO7816 SELECT NAME/AID 指令作为第一条指令,如果读卡器开始没有发这类指令的 APDU 则无法继续。

第一个问题现在无法解决,除非改用其他方式实现卡片模拟,比如 CyanogenMod 的某些版本;为解决第二个问题,你需要ROOT过的手机,安装 Xposed 框架,激活 NFC Spy 或者 'NFC Card-Emulation Catch-All Routing' 模块,它们都会将所有的 AID 选择都交给特定的 Service 处理;最后那个问题,可以通过修改系统运行库解决。

NFC Spy:基于Android 4.4及以上手机的非接智能卡跟踪仪的更多相关文章

  1. 基于android平台的斗地主AI

    本软件是基于android平台的斗地主AI,我们在源代码的基础之上,旨在改进AI的算法,使玩家具有更丰富的体验感,让NPC可以更为智能. (一)玩法解析: (1)发牌和叫牌:一副扑克54张,先为每个人 ...

  2. NFC(13)使用Android Beam技术传输文件

    注意 Android Beam技术传输文件时nfc只负责连接两个手机,而传输文件实际是用蓝牙模块.且目前接收文件功能只是系统完成,不用自写个接收程序. 传输文件相关的重要api 从Android4.1 ...

  3. NFC(12)使用Android Beam技术传输文本数据及它是什么

    Android Beam技术是什么 Android Beam的基本理念就是两部(只能是1对1,不可像蓝牙那样1对多)NFC设备靠近时(一般是背靠背),通过触摸一部NFC设备的屏幕,将数据推向另外一部N ...

  4. NFC(7)向NFC硬件写入数据的两个示例(nfc硬件启动android应用,nfc硬件打开uri)

    向NFC标签写入数据基本步骤 1,获取Tag对象 Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 2,判断NFC标签的数据类型(通 ...

  5. 基于Android Studio搭建hello world工程

    基于Android Studio搭建hello world工程 版本:ANDROID STUDIO V0.4.6 This download includes: ·        Android St ...

  6. 基于Android 平台简易即时通讯的研究与设计[转]

    摘要:论文简单介绍Android 平台的特性,主要阐述了基于Android 平台简易即时通讯(IM)的作用和功能以及实现方法.(复杂的通讯如引入视频音频等可以考虑AnyChat SDK~)关键词:An ...

  7. 基于Android 4.4 开发的多窗体系统 开放源代码

    Hi, 这是我基于Android 4.4开发的多窗体系统,还有非常多不足,还请多多不吝赐教啊,代码已经所有开源. 视频地址 源代码地址 Done: 1. APP以窗体化显示 在 PhoneWindow ...

  8. 【转】基于 Android NDK 的学习之旅-----数据传输(引用数据类型)

    原文网址:http://www.cnblogs.com/luxiaofeng54/archive/2011/08/20/2147086.html 基于 Android NDK 的学习之旅-----数据 ...

  9. 基于Android Volley的网络请求工具

    基于Android Volley的网络请求工具. 一.说明 AndroidVolley,Android Volley核心库及扩展工程.AndroidVolleySample,网络请求工具示例工程.Re ...

随机推荐

  1. visualVM使用jstatd和jmx连接远程jvm及遇到的问题解决

    visualVM使用jstatd和jmx连接远程jvm及遇到的问题解决 JMX方式: 编辑Tomact里bin目录的catalina.sh . 在其头部加入 JAVA_OPTS=" -Dco ...

  2. php的格式化数字函数

    php格式化数字:位数不足前面加0补足 php格式化数字:位数不足前面加0补足 感谢:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/12 ...

  3. 在Vim按了ctrl+s后

    在windows我们码代码的时候习惯ctrl+s保存: 但在vim中使用ctrl+s之后终端就没反应了... vim: ctrl+s终止屏幕输出,敲的东西都有效,就是看不见. ctrl+q恢复:

  4. Linux系统把/home重新挂载到其他硬盘或分区

    一开始没有做好规划,导致/home空间不足,再加上分区表不是GPT,导致无法扩展超过2T,因此需要重新划分一块更大的硬盘给/home. 1.把新挂载的4T硬盘进行分区和格式化 2.创建目录 sudo ...

  5. An invalid character [32] was present in the Cookie value 错误

    今天在做cookie部分的demo的时候出现了一个错误Servlet部分的代码如下 Date data=new Date(); SimpleDateFormat format=new SimpleDa ...

  6. 记录项目中用的laypage分页代码

    最终才觉得,好记性不如烂笔头,毕竟已经不是刚毕业时候的巅峰了,精力有所下降,很多时候记不住东西. 参考url:http://www.layui.com/laypage/ 直接上代码了 <scri ...

  7. python—-模块与包1

    模块与包 1 什么是模块? 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀 2 为何要使用模块? 如果你对出python解释器然后重新进入,那么你之前定义的函数 ...

  8. Linux:nohub启动后台永久进程

    nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号.在注销后使用 nohup 命令运行后台中的程序.要运行后台中的 nohup 命令,添加 ...

  9. Linux:日期用法,及格式定义

    在shell脚本中经常会需要获取当前日期的地方,linux的系统时间在shell里是可以直接调用系统变量: 获取今天时期---`date +%Y%m%d` 或 `date +%F` 或 $(date ...

  10. Spark测试代码

    测试代码: import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.sql.hive.HiveContext ...