使用 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文档。