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. codevs 1291 火车线路

    http://codevs.cn/problem/1291/ 题目描述 Description 某列火车行使在C个城市之间(出发的城市编号为1,结束达到的城市的编号为C),假设该列火车有S个座位,现在 ...

  2. 面试必问---HashMap原理分析

    一.HashMap的原理 众所周知,HashMap是用来存储Key-Value键值对的一种集合,这个键值对也叫做Entry,而每个Entry都是存储在数组当中,因此这个数组就是HashMap的主干.H ...

  3. JS中的 map, filter, some, every, forEach, for...in, for...of 用法总结

    1.map 有返回值,返回一个新的数组,每个元素为调用func的结果. let list = [1, 2, 3, 4, 5]; let other = list.map((d, i) => { ...

  4. js定时刷新页面.

    //页面定时刷新.2017.09.27 $(document).ready(function () { self.setInterval(function () { var d = new Date( ...

  5. 微信开发之SVN提交代码与FTP同步到apache的根目录

    SVN是协同开发的,版本控制器,就是几个人同时开发,可以提交代码到SVN服务器,这样就可以协同开发,一般是早上上班首先更新下代码,然后自己修改代码 工作一天之后,修改代码之后,下班之前,更新代码,然后 ...

  6. linux下的Shell编程(5)循环

    Shell Script中的循环有下面几种格式: while [ cond1 ] && { || } [ cond2 ] -; do - done for var in -; do - ...

  7. 【52ABP实战教程】0.3-- 从github推送代码回vsts实现双向同步

    需求 在之前的文章中"[DevOps]如何用VSTS持续集成到Github仓库" 我们有讲述如何将vsts中的代码编译推送到github中,这一篇我们来完善,如果有人给你开源项目推 ...

  8. 判断一个字符串是不是一个合法的IP地址

    最近在笔试的时候遇到碰一道算法题, 要求判断一个字符串是不是合法的ip地址. 将我的思路发出来分享一下,不一定正确,也不一定是最优的方法.希望能分享一些交流 要求用java或者c来实现,我的java代 ...

  9. POJ1236【Tarjan+缩点】

    题目大意:有向关系体现在电脑可以通过网络单向的传输文件,并规定一旦有电脑存在该文件,那么所有它能传输的电脑就能在第一时间得到这个文件,题目有两个问题,第一个是最少向网络中的几台电脑投放文件,能使得整个 ...

  10. centos系统升级PHP版本程序

    鉴于Centos 默认yum源的php版本太低了,手动编译安装又有点一些麻烦,那么如何采用Yum安装的方案安装最新版呢.那么,今天我们就来学习下如何用yum安装php最新版. 1.检查当前安装的PHP ...