前言

不知道大家有没有遇到这种情况,有些写字楼电梯是需要刷卡才能按电梯的。幸运的是绝大部分安卓手机都是提供卡模拟的功能。正当我满心欢喜使用手机模拟NFC卡的时候,发现仍然不能正常的使用手机刷卡。经过了解发现,大部分手机是自带了模拟门卡功能的,但是这个功能不支持模拟加密卡,而现实生活中的门卡基本都是加密的,所以用手机直接模拟的门禁卡几乎都是无法使用的。

这种情况下我们可以复制加密卡,大致思路是根据已加密的母卡制作一张非加密卡,然后用手机模拟非加密卡,最后将母卡的加密数据写入手机模拟的非加密卡中,以此完成手机对加密母卡的模拟。具体的话可以参照https://www.zhihu.com/question/437748860/answer/2348254953

但是今天我们这里不探讨如何复制一张加密卡。这里我们是探索基于安卓HCE服务的远程刷卡的实现。既然每次破解并复制加密卡流程繁琐,我们何不换一张思路去实现模拟卡呢?

正文开始

基本概念

许多提供 NFC 功能的 Android 设备已支持 NFC 卡模拟。在大多数情况下,卡由设备中的一个单独的芯片(称为安全元件)进行模拟。无线运营商提供的很多 SIM 卡也包含安全元件。

Android 4.4 及更高版本提供了另一种不涉及安全元件的卡模拟方法,名为“基于主机的卡模拟”。这样一来,任何 Android 应用都可以模拟卡并直接与 NFC 读取器通信。

通信流程

主机会向NFC卡片发送指令,然后NFC卡片响应一个指令,一直重复这个步骤,可能是一次,可能是多次,这样就完成了一次读卡通信。但是其中具体会交互几次我们不得而知,每次指令是什么,我们同样不得而知。

最后修改:2025 年 04 月 19 日
如果觉得我的文章对你有用,请随意赞赏