Android NFC 标签读写Demo与历史漏洞概述

news2024/11/24 7:50:00

文章目录

  • 前言
  • NFC基础
    • 1.1 RFID区别
    • 1.2 工作模式
    • 1.3 日常应用
  • NFC标签
    • 2.1 标签应用
    • 2.2 应用实践
    • 2.3 标签预览
    • 2.4 前台调度
  • 读写Demo
  • 历史漏洞
  • 总结

前言

NFC 作为 Android 手机一个重要的短距特性,基本在所有 Android 中高端机型上均有支持,但说实话本人原先却很少了解和使用……为了深入探索 NFC 的安全风险,本文先来记录学习下 Android NFC 的一些基础知识、玩法、标签读写开发,并简述下业界对 NFC 特性发现的相关历史漏洞情况。

NFC基础

近场通信(Near Field Communication,简称 NFC),是一套能让两个电子设备(其中一个通常是移动设备,例如智能手机)在相距几厘米之内进行通信的通信协议。NFC 一般需要 4cm 或者更短的距离来建立初始化连接,其工作频率为 13.65 兆赫兹,通信速率为 106-848 kbit/秒。

NFC 近场通信技术由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体,缩写 NXP)、诺基亚和索尼共同于2004年研制开发,属于一种非接触式识别和互联技术。它通过在单一芯片上集成感应式读卡器、感应式卡片和点对点通信的功能,利用移动终端实现移动支付、电子票务、门禁、移动身份识别、防伪等应用。

1.1 RFID区别

射频识别(RFID)是 Radio Frequency Identification 的缩写,它把数字信息编码到 RFID 标签中,阅读器通过无线电波读取到这些信息。其原理为阅读器与标签之间进行非接触式的数据通信,达到识别目标的目的。

在这里我给大家举几个例子:

  • 第一个是大商场里优衣库、以纯等服装门店,店员会在衣服上会使用 RFID 标签进行防盗,当门禁读取到没有付款的产品的 RFID 信息,就会报警;
  • 第二个是汽车的无钥匙进入系统,当驾驶员身装钥匙进入到汽车的识别范围之内,汽车门把手一拉就打开了,当然,有的汽车为了更加安全,还增加了指纹识别。两个同时具备时,车门才会被打开。这个应用的要点是要有车钥匙和读取车钥匙信息的系统。
  • 第三个是智能仓储系统,现在很多企业都开始了智能仓储的建设。他智能在储存在仓库的每个货物上面都有一个 RFID 标签,仓库内有天线。仓库管理者能清楚的知道每种货物存放的位置及数量。这样就可以实现很多功能了,比如设定货物的最小储存值,当货物低于储存值,系统会自动下单采购,同时还可以节省掉年终盘点库存的工作。这个应用的要点是要有带有 RFID 的标签和读取设备。

以上只说了3种应用场景,如果您想是上网查查,还能查出至少十几种应用场景。归根结底其实射频识别的两大应用场景就是:身份识别、物品供应链运输链管理(严格的说物品供应链管理也属于身份识别)。

【区别】与 RFID 技术一样,NFC 技术的信息也是通过频谱中无线频率部分的电磁感应耦合方式传递,但两者之间还是存在很大的区别。NFC 是一种提供轻松、安全、迅速的通信的无线连接技术,其传输范围比 RFID 小,RFID 的传输范围可以达到几米、甚至几十米,但由于 NFC 采取了独特的信号衰减技术,相对于 RFID 来说 NFC 具有距离近、带宽高、能耗低等特点。此外,NFC 具有与现有非接触智能卡技术兼容的特点,从应用前景看 NFC 目前来看更多的是针对于消费类电子设备相互通讯,有源 RFID 则更擅长在长距离识别。

而 NFC、蓝牙和红外技术之间的差异则可概括如下图:
在这里插入图片描述
简而言之,NFC 功能具有直观性强、操作简单、成本低、建立连接速度更快等优点,同时也存在与蓝牙等常用通信工具相比使用距离短与传输速率低等缺点。目前 NFC 已应用在许多领域之上,如:公交出行、门禁系统、移动支付、设备连接等方面,所以研究 NFC 技术具有一定的实用意义与重要性。

1.2 工作模式

由于 NFC 通信总是由一个发起者和一个接收者组成,发起者会主动发送电磁场,可以为被动接收者提供电源,其基本原理和收音机类似。正是由于被动式接收者可以通过发起者提供电源,因此接收者可以有非常简单的形式。

NFC 技术主要有三种工作模式,分别是:

  1. 仿真卡模式(Card Emulation Mode): 此模式的数据在支持NFC的手机或其它电子设备中,可以简单理解成“刷手机”。其本质为将支持 NFC 功能的电子设备(如NFC 手机),当作借书卡、公交卡、银行卡、门禁卡等 IC 卡使用。其实现的基本原理是将 IC 卡中信息凭证封装成数据包并存储在支持 NFC 的设备中。此外除了支持 NFC 的设备,刷电子设备处还需要 NFC 射频器,通过接收 NFC 射频器发送的信号与一系列验证之后,电子设备将 IC 卡中相应信息传入射频器中,最终从射频器传输到射频器所连接的电脑终端,完成相应处理操作。
  2. 读卡器模式(Reader/writer mode): 数据在 NFC 芯片中,可以简单理解成“刷标签”。该模式的本质为通过支持 NFC 的电子设备从带有 NFC 芯片的标签、物品等媒介中读写信息。NFC 标签工作原理为:其不需要外部供电,当支持 NFC 的设备向标签读写数据时,支持 NFC 的设备会发送某种磁场,该磁场会主动向 NFC 标签供电,从而顺利完成读写工作。
  3. 点对点模式(P2P mode): 该模式与蓝牙、红外差不多,用于不同 NFC 设备之间进行数据交换,不过这个模式已经没有有“刷”的感觉了。该模式用于不同 NFC 设备之间进行数据交换,其有效距离一般不能超过 4 厘米,传输建立速度与传输速率比红外和蓝牙技术快很多。该模式下 NFC 进行传输时,通常还会使用到 Android Beam 技术进行传输数据,当使用 Android Beam 传输数据的两部设备不再限于 4 厘米之内。实际应用:华为手机的 NFC 文件互传功能。

1.3 日常应用

说太多概念性的东西容易让人云里雾里,不如先来介绍下 NFC 在日常生活中的简单应用场景。

华为钱包 APP 以及 小米钱包 APP 均将日常生活中我们常用的 NFC 功能集成到自家 APP 当中,用户使用起来相当方便。比如华为钱包 APP 的 “卡包” 允许添加 门禁卡、银行卡、交通卡、会员卡 等电子卡信息:
在这里插入图片描述
具体教程可参见华为消费者官网指导文档:如何将实体门禁卡添加到华为钱包、使用华为钱包交通卡刷卡的相关说明 等。

通过以上钱包 APP 我们可以很方便地在手机上使用 NFC 的仿真卡模式(Card Emulation Mode) 来完成刷门禁、公交支付、银行卡支付等操作,而不用随时携带钥匙、公交卡、银行卡等实体物件。

NFC标签

上面简单介绍了 NFC 仿真卡模式的应用,下文将对 NFC 的读卡器模式进行重点介绍,在读卡器模式下,NFC 手机可以通过触碰 NFC 标签(Tag),从中读取非接触标签中的内容,采集数据并发送到对应的应用进行处理。

2.1 标签应用

NFC 标签的应用就是把一些信息写入一个 NFC 标签内,用户只需用 NFC 手机在 NFC 标签上挥一挥就可以立即获得相关的信息。读者可在某宝上搜索 “NFC 标签” 或 “NFC 贴纸” 即可很轻松买到。
在这里插入图片描述
知乎上关于 NFC 标签有很多趣味玩法与教程:

链接内容概述
用手机制作NFC标签实现一碰连网让客人通过 NFC 标签实现一碰连接家中网络
通过粘贴NFC标签,让墙壁“智能化”借助 NFC 标签记录墙壁内水管位置、防止装修误伤
华为一碰传 NFC 标签制作使用 NFC 标签让非华为手机与华为的 PC 能碰一碰传文件、多屏协同
【黑科技】NFC模拟门卡门禁借助 NFC 标签复制小区门禁卡(有局限性)
用NFC贴纸实现安卓aTimeLogger自动记录借助 NFC 标签生成一个时间记录器

以上教程中用到的 NFC 标签一键读写的 APP 工具:

  1. NFC 标签读写工具:NFC Tools Pro 下载地址;
  2. NFC Tools的任务辅助工具:NFC Task下载地址(写入 NFC 标签的任务在被读取并执行时部分需要该工具辅助完成);

注意:海外网络在 Google Play 可下载,国内可用以上提供的吾爱网站的链接。

2.2 应用实践

下面来看看如何具体使用 NFC Tools Pro 自动化读写 NFC 标签,我将演示的是创建拨打电话的 NFC 标签。

1、安装并打开 NFC Tools,靠近购买到手的 NFC 标签贴纸,可读取到标签信息(标签内容暂时为空):
在这里插入图片描述
2、切换到 NFC Tools 的 “写” 功能页,选择 “添加记录”:
在这里插入图片描述
此时程序会提供多种 NFC 标签内容供用户选择,比如写入文本(一些重要提示比如上文提到的墙内水管坐标)、写入URL(让他人碰一碰即可访问你的个人网站)、碰一碰自动创建联系人、碰一碰拨打电话、碰一碰启动指定应用、碰一碰连接指定 WIFI 等:
在这里插入图片描述
3、此处先演示写入“碰一碰拨打电话”的标签数据:
在这里插入图片描述
4、填写指定电话号码后返回上层页面,点击“写/xx字节”:
在这里插入图片描述
靠近待写入数据的 NFC 标签贴纸,即可写入:
在这里插入图片描述
在这里插入图片描述
5、然后手机在打开 NFC 功能的情况下再次碰一碰 NFC 标签,手机将自动跳转到拨号界面:
在这里插入图片描述
注意如果是谷歌的手机的话,则是跳转到 NFC 标签预览页面,用户点击拨号预览的标签后会直接拨打电话:
在这里插入图片描述
同理可借助 NFC Tools 很方便地向 NFC 标签写入碰一碰即可创建联系人、连接WIFI等操作的内容,此处不再演示。

2.3 标签预览

但想补充一个能触发 NFC 标签预览的操作:写入地理坐标。
在这里插入图片描述
写入成功后扫描标签并不会自动跳转到地图软件,而是由系统的 NFC 服务捕获到 NFC 标签信息并弹出提示:
在这里插入图片描述
点击后会弹出手机上可显示、响应标签信息的应用列表,此处选择 Android 原生的 com.android.apps.tag 标签预览应用:
在这里插入图片描述
点击后即可看到 NFC 标签的内容:
在这里插入图片描述
此处点击地图标签的话会跳转到高德地图并定位到具体的坐标位置(可用于标识某个位置,比如国外有大学生借助该标签功能定位他们的自行车:NFC贴纸记录GPS地址,帮助车主找自行车);如果点击拨号标签的话则会自动打出电话(注意不再只是跳转到拨号键盘了)。

【对比】国产手机(比如某为)与谷歌原生 Pixel 手机在识别 NFC 标签的时候有以下区别:

  1. 能触发标签预览的标签:对于扫描到的地理位置标签、发送短信标签、拨打电话标签(不完全统计是这3个),谷歌手机都会默认跳转到标签预览页面供用户进一步确认,而国产手机只针对地理位置标签会跳转到预览页面,其它两个标签则是直接跳转到短信发送、拨号页面;
  2. 其它默认不预览的标签:无论谷歌手机还是国产手机,对于打开 URL、启动应用的标签,都是直接响应,而不是跳转到标签预览页面等待用户进一步确认;
  3. 有个很神奇的地方是:对于创建联系人的标签,谷歌手机和国产手机均会在扫描到标签后自动创建并保存联系人,无需用户进一步确认(那么有可能你的手机碰一碰别人的 NFC 标签,发现通讯录多了一堆乱七八糟的联系人……)。

此处特意补充 NFC 的标签预览功能是因为曾经发生过一个 NFC 标签预览导致的漏洞,具体参见看雪译文:NFC 虚假标签 (False Tag) 漏洞 - CVE-2019-9295。

2.4 前台调度

NFC 前台调度机制主要是一种用于在手机当前前台运行的程序中,处理识别到的 NFC tag 的技术,使得当前 Activity 能直接响应 NFC 标签,而不需要用户再手动选择所有能处理该标签数据的 Activity。

在实现当前 Activity 能直接响应 NFC 标签这个功能中使用到了 TAG 分发系统,而 TAG 分发系统又包括了 Intent 发布系统与前台 Activity 发布系统,它们协调帮助正确地识别一个 NFC tag 是否是你的 Activity 想要处理的。具体流程为:

  1. 前台发布系统:允许一个 Activity 覆盖掉 Intent 发布系统而首先处理此 tag Intent,这要求你将要处理 Tag Intent 的 Activity 运行在前台,这样当一个 NFC tag 被扫描到,系统先检测前台的 Activity 是否支持处理此 Intent,如果支持,即将此 Intent 传给此Activity,如果不支持则转到 Intent 发布系统;
  2. Intent 发布系统:检查所有 Activities 的 intent filters,找出那些定义了可以处理此 tag 的 Activity,如果有多个 Activity 都配置了处理同一个 tag Intent,那么将使用 Activity 选择器来让用户选择使用哪个 Activity。用户选择之后,将使用选择的 Activity 来处理此 Intent。

以上关于 NFC 前台调度机制和 Intent 分发流程的理解很简单,比如当你的 NFC Tools 应用置于前台去扫描 “发送短信” 的 NFC 标签时,手机并不会跳转到短信应用,而是由 NFC Tools 自动响应标签数据,即读取内容并显示:
在这里插入图片描述
再比如,如果是华为钱包 APP 目前处于前台的话,扫描到的 NFC 标签也将优先交由华为钱包响应和处理,可快速识别并添加公交卡、银行卡、门禁卡等。

读写Demo

本章节将讲述如何通过代码实现 NFC 标签的读写,掌握简单的 NFC 开发知识。未完待续……

历史漏洞

本章节将讲述 NFC 的历史相关漏洞,未完待续……

总结

本文参考文章:

  1. NFC标签应用的实施;
  2. RFID和NFC有什么区别;
  3. 浅谈Android开发中的NFC功能;
  4. Android Nfc技术解析、使用;
  5. 安卓NFC标签读取快速开发教程(附源代码);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/346641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

存储硬件与协议

存储硬件与协议存储设备的历史轨迹存储介质的进化3D NAND3D XPointIntel Optane存储接口协议的演变NVMeNVMe-oF网络存储技术1)DAS2)NAS3)SAN4)iSCSIiSCSI层次结构存储设备的历史轨迹 1.穿孔卡2.磁带3.硬盘4.磁盘(软盘…

【2023】【standard-products项目】中查找的问题与解决方案 (未完待续)

10、el-table 判断是多选操作还是单选操作 9、判断数组对象中是否包含某个指定值 需求:修改时数据回填el-select下拉数据,发现当前id在原数组里没有找到,就显示了id值,应该显示name名, 处理:当查找到id…

向量与矩阵 导数和偏导数 特征值与特征向量 概率分布 期望方差 相关系数

文章目录向量与矩阵标量、向量、矩阵、张量向量范数和矩阵的范数导数和偏导数特征值和特征向量概率分布伯努利分布正态分布(高斯分布)指数分布期望、⽅差、协⽅差、相关系数期望方差协⽅差相关系数向量与矩阵 标量、向量、矩阵、张量 标量(…

源码系列 之 ThreadLocal

简介 ThreadLocal的作用是做数据隔离,存储的变量只属于当前线程,相当于当前线程的局部变量,多线程环境下,不会被别的线程访问与修改。常用于存储线程私有成员变量、上下文,和用于同一线程,不同层级方法间传…

Jenkins 笔记

Jenkins brew install jenkins-lts brew services restart jenkins-lts brew services stop jenkins-lts b999ff5683464346b6d083f894968121 l 软件构建自动化 :配置完成后,CI系统会依照预先制定的时间表,或者针对某一特定事件,…

进阶C语言第三章-------《字符函数和内存函数》 完整思维导图+基本练习题+深入细节+通俗易懂+知识点+建议收藏

绪论 书接上回,通过进阶指针你已经了解到了更多种指针类型,他们的用法及使用之处相当的关阔需要不断的积累经验来使用,这里我毛遂自荐一下我的指针练习希望对你有帮助,本章是一些关于字符串的函数介绍和自己实现,总体来…

数据结构与算法基础-学习-11-线性表之链栈的初始化、判断非空、压栈、获取栈长度、弹栈、获取栈顶元素

一、个人理解链栈相较于顺序栈不存在上溢(数据满)的情况,除非内存不足,但存储密度会低于顺序栈,因为会多存一个指针域,其他逻辑和顺序表一致。总结如下:头指针指向栈顶。链栈没有头节点直接就是…

智慧校园应用系统建设方案

系统简介 建设“智慧校园”的核心是创新新形势下高校发展理念、推进高校建设转型、变革高校管理行为方式;建设“智慧校园”的目的是推进信息化进入高校、服务管理、惠及师生;建设“智慧”的目标是实现 “信息采集、数据整合、信息促管、信息育人、信息联…

linux之echo使用技巧

参考文章:linux基本功系列-echo命令实战一、echo 命令是什么?作用: echo命令能将指定文本显示在Linux命令行上,或者通过重定向符写入到指定的文件中。语 法:echo [-ne][字符串] / echo [–help][–version]补充说明&am…

VMware安装CentOS7

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。个人爱好: 编程,打篮球,计算机知识个人名言:海不辞水,故能成其大;山不辞石…

Java+Python+HanLP自然语言处理包实现解析文本分词

目录 需要安装 Python部分 Java部分 需要安装 HanLP官网Api教程 https://bbs.hanlp.com/t/hanlp2-1-restful-api/53 首先需要电脑安装Python环境并配置环境变量(网上搜就可以一大堆教程),建议Python版本3 然后根据HanLP官网教程安装hanl…

「JVM 原理使用」 实际开发中的应用

Class 文件格式、执行引擎主要以 Class 文件描述了存储格式、类何时加载、如何连接、VM 如何执行字节码指令,这些动作基本都是 JVM 直接控制,用户代码无法干预和改变; 用户可以干预的只有字节码生成、类加载器两部分,而这两部分的…

Android 面试 基础知识汇总

Android常用的设计模式HTTP和HTTPS的区别TCP/UDP的区别

PendingIntent兼容安卓12 的一个问题

这是我第一次遇到这个问题,反正我也是第一次做完整的安卓app,很多个第一次。我之前做的那个老旧手机做桌面摆件的app,因为原来的“无干预”版本无法使用,所以又用回了“和风版”,但这个版本很久没用了,有些…

实用机器学习-学习笔记

文章目录9.1模型调参9.1.1思考与总结9.1.2 基线baseline9.1.3SGD ADAM9.1.4 训练代价9.1.5 AUTOML9.1.6 要多次调参管理9.1.7复现实验的困难9.1模型调参 9.1.1思考与总结 1了解了baseline和调参基本原则 2了解了adams和sgd的优劣 3了解了训练树和神经网络的基本代价 4了解了a…

【蓝桥杯集训2】差分专题(3 / 4)

目录 差分模板 1、一维差分 2、二维差分 3729. 改变数组元素 - 差分 区间修改 100. 增减序列 - 差分模板 1、一维差分 活动 - AcWing 给a数组 [l,r] 区间的每个数c,只需要给其差分数组b做如下操作即可 b[l]c; b[r1]-c; 差分数组 a[]是b[]的前缀和数组 如果…

倒计时100天 | DBF深圳国际户外运动博览会5月一起狂飙初夏

狂飙初夏的大型户外运动嘉年华即将登场!2023年5月26日至28日,第四届DBF深圳国际户外运动博览会(简称DBF深圳户外展)将于深圳国际会展中心(宝安)举办。本届展会展览面积超过7万平方米,预计将吸引…

保姆级Vue3+Vite项目实战黑白模式切换

写在前面注:本文首发掘金签约专栏,此为文章同步!本文为 Vue3Vite 项目实战系列教程文章第四篇,系列文章建议从头观看效果更佳,大家可关注专栏防走失!点个赞再看有助于全文完整阅读!此系列文章主…

C/C++【内存管理】

✨个人主页: Yohifo 🎉所属专栏: C修行之路 🎊每篇一句: 图片来源 Love is a choice. It is a conscious commitment. It is something you choose to make work every day with a person who has chosen the same thi…

商城系统必备营销工具(五)——积分商城

做商城,流量必不可少,日活跃度也很重要。现在各大APP、网站、小程序和微商城,基本都在为了巩固流量做积分商城,虽然已经随处可见,但很多企业商家却并没有将积分商城运作起来,积分商城也没有人浏览兑换商品。…