使用 Proxmark3 复制 IC 卡
Proxmark3 是一款 RFID 工具,支持多种协议和频段,常用于 IC、ID 卡的研究、破解、仿制和安全测试等场景。Proxmark3 的硬件包括主控板和天线,主控板上有 ARM 架构的处理器和用于调制解调的 FPGA。软件则包含运行在 ARM 处理器上的固件和运行在计算机的客户端软件,两者需要版本匹配才能工作。在淘宝上有许多商家售卖 Proxmark3,且会附送软件。然而,笔者注意到,原版的 Proxmark3 软件是以 GPL 协议开源的,但卖家提供的软件通常只有二进制形式,而没有包含源代码,存在违反开源协议的嫌疑。为了支持开源事业,笔者直接从闲鱼上以较低的价格购买了 Proxmark3 硬件,并尝试自行刷写固件。
现在社区中较为活跃的 Proxmark3 软件是由 RfidResearchGroup 团队维护的,其仓库地址为 https://github.com/RfidResearchGroup/proxmark3。由于 Chris "Iceman" Herrmann 是主要的开发者,因此这一版本通常被称为 Iceman(冰人)版本。
Iceman 软件支持多种不同的 Proxmark3 硬件,包括 RDV4、Easy 等。在编译使用 Proxmark3 之前,需要先确认 Proxmark3 的硬件版本。如果硬件和软件版本不匹配,可能在烧录固件或者在使用时报错,此时重新编译软件并烧录正确的固件即可解决。不同版本的 Proxmark3 外观可参考下图,截取自 Proxmark3 网站。市面上比较常见的是 Proxmark3 Easy 版本。RDV4 版本功能更加强大,但是价格也更高,售价通常超过 1000 元。
编译 Iceman 版本的 Proxmark3 软件
Iceman 软件可以在 Linux、Windows、macOS 等系统上编译和运行,本文以 Linux 为例。
首先,将仓库克隆到本地:1
git clone https://github.com/RfidResearchGroup/proxmark3
然后进入目录,执行编译命令:1
2
3cd proxmark3
make clean
make all PLATFORM=PM3GENERIC
make all
默认的配置是编译兼容 RDV4 硬件版本的软件,然而现在市面上常见的 Proxmark3 都并不是这一硬件版本。因此,需要指定 PLATFORM
参数,将编译目标设置为 PM3GENERIC
,也就是 Generic Proxmark3 platforms。
编译完成后,待烧录的固件将会生成在 recovery
目录下。client
目录下则会出现 proxmark3
可执行文件,这就是客户端软件,是一个命令行工具。仓库根目录下的 pm3
脚本会执行 proxmark3
,本文后续的操作也都是基于这个工具进行的。如果要使用图形界面,需要单独下载额外的 GUI 程序。
烧录固件
在仓库根目录下有 pm3-flash-all
脚本,直接执行即可。如果提示没有权限,可以使用 sudo
:1
sudo ./pm3-flash-all
烧录完成后,Proxmark3 会自动重启,此时可以使用客户端软件连接 Proxmark3。
使用 Proxmark3 读取 IC 卡
执行 sudo ./pm3
,打开 Proxmark3 的命令行客户端软件。首先,使用 hw status
检查硬件状态,如果没有警告信息的话就说明当前软硬件版本匹配。随后,将要复制的 IC 卡放在高频读卡区域内,使用 hf search
命令搜索 IC 卡,Proxmark3 搜索成功后会显示其 UID 等信息。对于加密卡,使用 hf mf autopwn
命令自动破解 IC 卡的密钥。如果成功,密钥和卡内数据会自动保存在 bin
和 json
格式的文件中。文件名中包含了 IC 卡的 UID,例如 11223344
,后续步骤还需要使用,可以记下来。
修改 IC 卡内容
有时候,IC 卡内存储的内容包括了一些权限信息和过期时间等数据。如果需要修改这些信息,可以使用编辑软件修改对应 bin
文件的内容,再通过 Proxmark3 写入到新卡中。不过,在实际情况下,很多卡的数据中存在校验码和滚动码(随着刷卡次数会增加),修改之后如果检查不通过可能会导致新卡无法使用,甚至原卡也会被拉黑。因此,修改 IC 卡内容需要谨慎操作。
复制 IC 卡
在保存或修改了原版卡的数据后,将一张全新的 CUID 卡放置在 Proxmark3 上。随后,执行1
hf mf wipe --gen2
这将会把新卡初始化。然后,执行1
hf mf restore --uid <uid>
将 <uid>
替换为原版卡的 UID,例如 11223344
。软件将会自动读取之前保存的文件,将原版卡的数据复制进去,此时新卡就可以模拟原版卡的行为了。
对于其他类型复制卡的使用方法,可以参考 doc
目录下的 magic_cards_notes.md
文档。