使用 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 元。

不同的Proxmark3硬件

编译 Iceman 版本的 Proxmark3 软件

Iceman 软件可以在 Linux、Windows、macOS 等系统上编译和运行,本文以 Linux 为例。

首先,将仓库克隆到本地:

1
git clone https://github.com/RfidResearchGroup/proxmark3

然后进入目录,执行编译命令:

1
2
3
cd 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 卡的密钥。如果成功,密钥和卡内数据会自动保存在 binjson 格式的文件中。文件名中包含了 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。软件将会自动读取之前保存的文件,将原版卡的数据复制进去,此时新卡就可以模拟原版卡的行为了。

读写IC卡

对于其他类型复制卡的使用方法,可以参考 doc 目录下的 magic_cards_notes.md 文档。