介绍

热知识:现代智能手机都有卡模拟功能,技术上它和 ChameleonUltra 和 FlipperZero 的卡模拟是类似的。但是手机厂商为了合法合规和保护普通用户,不可能在卡包 APP 内做什么“字典解密”和“转储编辑”,而是只提供极为有限的读取和模拟功能。

本文将记录如何在手机的这种有限环境下,将现有卡片完整导入进手机卡包。

卡包主页,目前还没有任何卡

复制已有卡或创建空数据卡

HCE 硬件支持的关机刷卡

以上图片在努比亚 MyOS 上截取,该系统的卡包 APP 功能纯粹,但是目前版本不支持添加银行卡。其它系统的 IC 卡复制功能应该大同小异。

手机/手环 模拟的卡表现为标准卡( 0 扇区 0 区块不可写 ),而非魔术卡。

手机/手环 通常没有低频天线,不能模拟低频卡。

不解卡直接导入

在购买专用的硬件设备破解卡片之前,可以先试试此方法。
如果遇到了全加密卡或因其它原因此法行不通,就必须解卡后再复制。


仅模拟卡号&无加密卡

无论是否解密,手机通常都支持[仅模拟卡号]。建议先直接测试下对应的读卡器;如果解密了卡发现内部是空数据,那么就能确定仅模拟卡号可行。

更有系统确实使用无加密卡(空密钥),此时手机可直接写入数据并模拟。

以上两种都是少数情况,除了一些不安全的门禁卡系统只识别卡号,现在大多数系统都是不适用的。

手机直接破解半加密卡

受限方案。部分品牌的手机在读取到半加密卡后,能直接尝试使用 Nested 漏洞破解卡片。成功获取密钥后,即可直接读取整张卡片包括加密扇区的数据,复制进手机。

【教程】NFC3.0超级门卡小米手机完美模拟加密IC卡的最优解(门禁卡、电梯卡、饭卡、水卡、校园卡、一卡通)_哔哩哔哩_bilibili

可参考该视频,详细演示了小米手机如何执行该破解。为了规避可能的法律风险以及防止用户瞎造,小米卡包会要求破解过程全程联网。一旦断网,卡包会被直接禁用。以此方便上层进行云控和管理。目前看来服务器管理端采用的是黑名单机制,会主动识别和分析卡数据,并禁止破解某些不应该被复制的卡片。

本人的努比亚手机看起来也是支持的,称为”深度解析”。如图所示,同样有联网云控以规避风险。

给它全加密卡,就不支持 Nested 漏洞破解

识别到半加密卡,准备联网分析和破解

检测IP与地理位置等,禁止在大陆外使用

与专业设备不同的是,所有这些手机厂商提供的解卡操作都是不透明的。厂商既可以随意收集和分析数据,也能随时云控禁用用户卡片。与此同时模拟卡这种基本硬件功能也被限制为只能“在大陆内联网使用”。

所有这些保护对于“具有基础知识”用户就显得滑稽而幽默,因此有条件的话不建议使用该方案。

完整导入原卡 - 自动

常用方案。不依赖手机破解,没有云控,适合大多数手机手环。


目标

目标很简单,写入整张加密卡的数据到手机/手环。

由于要复制加密卡,手机卡包通常不支持已知密钥后字典解密,所以让它创建空卡再写入数据。

流程

首先解密原卡获取到转储文件。

直接用手机读取原卡,不解密,而是选择 “仅模拟UID”(部分设备没有该选项)。

此时手机应该自动创建了一个空数据空密钥的卡型与原卡对应的空卡片,只有 UID 等与原卡相同。

使用手机模拟卡,验证一下。

如果模拟卡的数据符合预期,以 Gen2 模式(无后门指令)写入原卡转储文件到手机,补全数据。

写入完成读取手机模拟卡,保存转储文件并对比,验证数据是否与原卡相同。

有的设备不支持 “仅模拟UID” ,或者不会自己创建一个空卡出来,又或者它自己创建的空卡 数据/卡型 不正确。
这种情况需使用后文的手动方案,自制一个空卡并导入。

完整导入原卡 - 手动

全能方案。不依赖手机破解,没有云控,适合所有手机手环。且过程比自动方案更可靠。


目标

目标一样,写入整张加密卡的数据到手机/手环。

空卡( 又称“中介卡” )是在原卡转储文件的基础上,去除所有密钥和数据,只保留 0 扇区 0 区块基础信息和每扇区控制块控制位数据的空白未加密卡。因此手机/手环能直接复制。

流程

  1. 解密原卡获取到转储文件
  2. 编辑转储文件,得到空卡转储文件
  3. 写空卡转储到魔术卡 或 模拟空卡转储
  4. 手机复制并导入空卡
  5. 手机模拟空卡
  6. 以 Gen2 模式,写入原卡转储文件到手机,补全数据

图文教程

[1-3] 准备空卡

读取原卡并导出为转储文件

抹掉数据(以00覆写)与密钥(以FF覆写),得到空卡

首先解密原卡并保存转储文件,然后抹掉所有 数据块数据 和 A/B密钥 ,使其变成未加密空白卡。该操作可以使用 WinHEX 等16进制编辑器可以手动完成,也可使用 Txt2Dump 可以一键自动完成(该软件建议使用eml格式转储,否则可能无法正确读取数据)。

  • 若有卡模拟设备,可通过转储文件进行模拟空卡
  • 若有魔术卡,可以写入空卡转储文件,得到空卡

[4-6] 写入卡数据

手机卡包读取中介卡,可以直接读取

最后写入原卡数据与密钥

手机/手环 打开卡包,选择复制门禁卡,复制空卡。

由于识别到未加密空白卡,因此不会触发破解和联网验证,可以直接写入全卡数据并模拟。

手机/手环 模拟刚复制的空卡,使用另一部设备的“写入”,使用空密钥写入原卡的转储文件。

写入完成读取手机模拟卡,保存转储文件并对比,验证数据是否与原卡相同。

问题与小知识

刷卡问题

若模拟卡成功、卡数据正常,但刷卡时却出问题,可能是由于以下原因:

  • 位置问题:手机/手环不要距离读头太远。手机务必确保 NFC 线圈位置对齐读头。
  • 金属材质:包含大面积金属材质的 保护壳/腕带/磁贴/卡包 会影响 NFC 正常工作。
  • 读卡器防火墙屏蔽了NFC模拟卡:

虽然数据相同,但 NFC 模拟卡和实体卡在硬件上存在根本区别。对于高级防火墙,读卡器可通过识别卡芯片或配套的硬件标识,以及其它不会公开的针对性检测手段(例如知名品牌的设备特征),检测并拒绝模拟卡。当然,不同的读卡器安全性不同,防火墙也都是人为管理的,严格程度有高有低。不同设备的 模拟/过防火墙 能力也不同,例如有的门禁用 Flipper Zero 模拟卡能过,用手机手环模拟就不行。到底能不能成具体有很多变数,需要自测。

通常来说:实体魔术卡 ≈ Chameleon Ultra ≥ Flipper Zero ≈ Proxmark 3 ≥ 手机手环

厂商码

为了规避法律风险,有些手机手环不支持模拟厂商码,比较数据时会发现厂商码与原卡是不同的。该问题无解,但也可以无视,因为大多数读卡系统不会去检测厂商码来拒绝刷卡。

小米手环从第 7 代开始,支持厂商码模拟。对此建议以手动方案制作空卡导入。

空白卡

文章开头图片中,手机还提供了另一种添加卡的方式:开通数字门禁卡,亦称创建空白卡。

它会直接生成并模拟一张空白1K卡,包含随机UID,空密钥和空数据。作用是在读卡系统后台管理处注册开新卡。手机模拟卡向管理系统中录入UID,管理系统向手机模拟卡写入数据,然后投入使用

这就与本文的“导入已有卡片到手机手环”毫无关系了。

仅模拟 UID

虽然空卡只包含卡号之类的东西,但也不能使用 ChameleonUltra 或 FlipperZero 等设备的 “仅模拟 UID “ 功能让手机读取。这是因为仅模拟卡号功能的模拟逻辑不同,手机读取时会出错。所以在需要时必须得制作空卡。

软件和设备的配合

设备搭配

  • 努比亚(左)中国系统。系统支持内置卡包【M1全卡】和 Google Wallet【国际支付卡】
  • TicWatch Pro 5(中上)Wear OS。仅支持 Google Wallet【国际支付卡】
  • 小米手环10(中下)中国版。系统支持内置卡包【M1全卡】和 支付宝等【国内支付】
  • 一加(右)类原生。可通过NFC卡模拟模拟【UID】和 Google Wallet【国际支付卡】

系统功能

M1卡全扇区模拟通常只能在 智能手机/手环 的中国版系统内实现,它集成在钱包/卡包应用中。这些应用依赖自家系统账户框架,因此难以移植到其它系统环境。

非中国版系统,类原生系统,WearOS 就都是清一色的使用 Google Wallet,主要功能就是刷国际银行卡和美国公交卡。此类系统上模拟 M1卡的唯一选择: NFC卡模拟 ,需要Root,仅能模拟卡号(UID),也就是只能用于最简单的门禁刷卡器。

如果你的手机系统是注定没戏了,还有智能手表/手环这个选择。例如小米手环是可以搭配任意手机系统使用的,装个它的自家 APP 即可,较新型号还支持独立录入卡片信息和厂商码模拟。不知道别家手表的支持情况如何,建议购买前自行多查阅了解。

Android手机中国版系统中国品牌海外系统原生/类原生系统其它知名品牌(例如三星)
GMS ✅Wallet + 卡包WalletWalletWallet + 三星钱包
GMS ❌卡包(无刷卡应用)(无刷卡应用)三星钱包
智能手表/手环中国版系统中国品牌海外系统Google WearOS其它知名品牌(例如佳明)
NFC ✅卡包 + 支付宝等(无刷卡应用)WalletGarmin Pay
  • 卡包:用于刷 M1卡。某些系统中卡包包含在自家“钱包”应用内,还能刷公交卡、银联卡等。
  • Wallet:指 Google Wallet 等,用于刷国际支付卡。本文简称为 Wallet。

表格中的中国版系统和非中国版系统,对各自功能都能稳定支持。而“其它品牌系统”的具体可用性需自行了解,它可能受:国家和地区、IP地址、系统版本等影响。例如三星系统钱包的功能可能受设备地区限制;以及 佳明Pay 的中国版仅支持部分银联卡,国际版支持 Visa 、Master 卡等。

用户服务框架

用户服务框架决定了设备对于刷卡的支持情况。无论是 Google Wallet 还是中国Rom内的卡包,都需要用户登录自家账户后才允许使用。例如:

  • Pixel:含 Google 框架,不含小米框架,只能使用 Wallet。小米钱包安装了也无法使用
  • 努比亚手机:含 Google 框架,含中兴框架。既能使用 Wallet,也能使用中兴卡包

不过用户服务框架不是钉死不可修改的,某些情况下可以手动安装/移植。最常见的就是为部分不自带 Google 框架的中国手机安装 GMS,再通过完整性检测的话即可正常使用 Wallet。

Real Nullptr

该消息中,作者通过模块将 CN 的小米智能卡移植到了欧洲版小米手机内。

如果一个中国设备安装了类原生或其它非中国 Rom ,只要能把设备对应的中国版账户框架移植过来,正常登录并安装卡包,应该就可以正常刷M1卡。笔者尚未实操过,相关内容细节待补充。

快捷切换

NFC 切换指令,可配合 Tasker 、Anywhere 等应用使用。

Google Pay

su -c settings put secure nfc_payment_default_component com.google.android.gms/com.google.android.gms.tapandpay.hce.service.TpHceService

小米钱包

su -c settings put secure nfc_payment_default_component com.android.nfc/com.android.nfc.cardemulation.ESEWalletDummyService

其它待补充