ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Proxmark3(Iceman 分支)iOS 编译与安装指南:依赖、工具链补丁、固件与串口打通全流程

2026/9/17 20:13:57 拓冰建站 浏览量
Proxmark3(Iceman 分支)iOS 编译与安装指南:依赖、工具链补丁、固件与串口打通全流程 Proxmark3Iceman 分支iOS 编译与安装指南依赖、工具链补丁、固件与串口打通全流程【免费下载链接】proxmark3Iceman Fork - Proxmark3项目地址: https://gitcode.com/GitHub_Trending/pr/proxmark3本指南面向希望在 iPhone/iPad越狱环境上直接编译 Iceman 分支 Proxmark3 客户端并连接硬件的开发者完整覆盖 iOS 下依赖安装Bingner / Procursus 两种 bootstrap、缺失 SDK 与补丁的处理、交叉编译产物迁移、make install工作区绕过技巧以及通过 usbselfserial 在 iOS 上建立 Proxmark3 串口通信的完整流程。读完本文你将掌握在 iOS 上从零搭建 Proxmark3 编译环境、产出客户端可执行文件并让pm3自动识别设备的整套实战方案。来源文档iOS-Installation-Instructions.md。本文以该文档为骨架并结合仓库内 pm3 启动脚本、Makefile、bootrom/Makefile、common_arm/usb/usb_cdc_desc.c 等源码进行深化说明。背景与核心难点Proxmark3 是一个软硬件紧耦合的 RFID 研究平台Iceman 分支将固件bootrom、fullimage、recovery与 PC 端客户端client/proxmark3放在同一个仓库统一构建。常规 Linux/macOS 编译流程见 0_Compilation-Instructions.md其核心命令是make clean make -j但在 iOS 上构建会遇到三个根本性障碍iOS 没有完整的 GNU 工具链仓库固件构建依赖arm-none-eabi-gcc与arm-none-eabi-objcopy交叉编译器与二进制工具iOS 的 Cydia/Procursus 软件源中并没有这两个包iOS 系统 SDK 缺头文件与框架编译客户端需要stdlib.h、OpenSSL 头、以及 macOS 的 OpenCL/OpenGL 框架iOS 不支持 USB-CDC ACM 串口即使编译成功系统也不提供/dev/tty.*式的虚拟串口节点需要第三方内核驱动usbselfserial来桥接。下文按原文档顺序逐项展开。安装所需依赖原文明确提醒若使用 unc0ver 或 checkra1n 越狱请走 “On Bingner bootstrap” 一节否则走 “On Procursus bootstrap” 一节。同时原文也给出警告——在 Procursus bootstrap 或 rootless无根越狱上编译尚未被实际验证compilation has not yet been attempted... Attempt at your own peril这一点至今仍是先决条件请自行评估风险。On Bingner bootstrapBingner 系越狱unc0ver / checkra1n 默认环境默认没有安装sudo因此需要以root身份执行安装命令默认 root 密码为alpineapt install git make clang odcctools gawk sudo pkg-config python3.7 libpython3.7-dev逐项说明各依赖的用途包名用途git克隆 Iceman 仓库、拉取最新提交make驱动整个 Makefile 构建体系见 Makefile其中TARGETS : bootrom armsrc recovery client ...clangiOS 本地 C 编译器用于编译客户端odcctools移植到 iOS 的 binutils/otool 等工具链接、归档所需gawkPOSIX awk 的 GNU 实现pm3脚本的设备枚举依赖awk文本处理sudo后续sudo make install所需pkg-config编译客户端时定位依赖库python3.7/libpython3.7-dev客户端构建需要 Python 3 开发头仓库中tools/mkversion.sh等构建脚本也依赖 Python此外如果是从 git 而非发布包构建还需要 SWIG——它用于为 Lua 生成客户端绑定client/experimental_lib、client/experimental_client_with_swig。原文给出的获取方式是The-SamminAter 的软件源该源同时提供下述 usbselfserial 的编译产物。On Procursus bootstrapProcursus 系如 Odyssey、Taurine 等新式越狱目前只能靠自己摸索大多数包名与 Bingner 类似可以直接用apt install git make clang ...尝试但Procursus 打包组件的方式与 bingner 不同例如工具链拆分、头文件位置差异某些依赖可能装不上或路径不对如果使用的是rootless 越狱且要从 git 构建很可能需要自己移植 SWIG。换句话说原文档对 Procursus 的态度是自担风险on your own本小节没有任何可照抄的命令只建议先按 Bingner 的命令清单逐包检查再根据报错自行调整。Patched SDK 与附加补丁iOS 的 SDK 本身不完整无法直接编译客户端需要按以下 4 步手工补齐原文以 iOS 13.7 SDK 实测其他版本理论上可用克隆 theos 的 SDK 仓库把目标版本 SDK原文测试于 13.7通过符号链接或移动的方式放到系统 SDK 路径git clone theos/sdks 仓库 ln -s 下载的 iPhoneOS 版本 SDK /usr/share/SDKs/iPhoneOS.sdk删除stdlib.h中第 188 行的__IOS_PROHIBITED宏# 编辑 iPhoneOS.sdk/usr/include/stdlib.h删除第 188 行 # __IOS_PROHIBITED 会把 posix_memalign 等函数标记为 iOS 禁止调用该宏会让客户端代码中合法的内存分配调用在 iOS 目标下直接编译失败是 iOS 编译最常见的坑之一。克隆 theos 的 headers 仓库把其中的headers/openssl目录复制进 SDKgit clone theos/headers 仓库 cp -r headers/openssl iPhoneOS.sdk/usr/include/仓库客户端client/src下的 EMV、mifare 等模块依赖 OpenSSL 的 EVP/HMAC 接口iOS SDK 本身不带 OpenSSL 头。下载最新的 macOS SDK原文测试于 11.3把其中两个框架复制进 iOS SDK# 从 phracker/MacOSX-SDKs 下载 macOS SDK cp -r MacOSX.sdk/System/Library/Frameworks/OpenCL.framework iPhoneOS.sdk/System/Library/Frameworks/ cp -r MacOSX.sdk/System/Library/Frameworks/OpenGL.framework iPhoneOS.sdk/System/Library/Frameworks/这两个框架服务于tools/hitag2crack/crack5opencl基于 OpenCL 的 hitag2 暴力破解工具。编译 OpenCL 工具时的预期告警原文特别指出编译hitag2crack/crack5opencl时下面这条ld告警是预期行为可以忽略ld: warning: building for iOS, but linking in .tbd file (/usr/share/SDKs/iPhoneOS.sdk/System/Library/Frameworks//OpenCL.framework/OpenCL.tbd) built for macOS原因是 OpenCL.tbd 这个链接描述文件本身是为 macOS 构建的借用到 iOS SDK 后 ld 会发出警告但链接仍能成功。克隆 Iceman 仓库依赖与 SDK 就绪后克隆仓库git clone https://github.com/RfidResearchGroup/proxmark3.git cd proxmark3本文所分析的仓库即该 Iceman 分支的当前快照。若想保持最新可参考 0_Compilation-Instructions.md 中Get the latest commits一节的git pull流程。编译并使用项目依赖齐备后大部分编译步骤可以沿用仓库通用编译文档 0_Compilation-Instructions.md原文原话now youre ready to (mostly) follow the compilation instructions但有三处 iOS 特有问题需要单独处理下面分节说明。bootrom、fullimage 与 recovery 必须跨平台预构建Proxmark3 固件由三部分组成bootrom引导加载程序负责 USB 启动与刷写入口fullimagearmsrc主固件镜像实现全部射频功能HF/LF 协议栈在 armsrc 目录recovery恢复模式固件用于变砖救援。由于 iOS 上没有arm-none-eabi-gcc也没有arm-none-eabi-objcopy这三部分无法在 iOS 上构建必须在一台桌面系统Linux/macOS上先构建好再把以下产物复制到 iOS 端需要复制的文件/目录说明armsrc/fpga_version_info.carmsrc 构建时生成的 FPGA 版本信息源文件armsrc/obj/armsrc 的编译产物目录fullimage.elf 等bootrom/version_pm3.cbootrom 构建时生成的版本文件由 bootrom/Makefile 通过version_pm3.c: default_version_pm3.c .FORCE规则每次编译强制重新生成bootrom/obj/bootrom 的编译产物目录bootrom.elf 等recovery/整个恢复固件目录这些产物在仓库根 Makefile 中对应TARGETS : bootrom armsrc recovery client mfc_card_only ...中的固件目标。缺少它们时客户端其余部分仍能编译成功但make all和make install会失败——这正是下一步要做工作区绕过的原因。make install用占位脚本骗过构建系统由于固件目标依赖交叉工具链而 iOS 上无法安装原文给出一个巧妙的 workaround在/usr/local/bin/下创建两个只打印参数、不真正干活的脚本冒充交叉工具链让make all/make install流程顺利跑完/usr/local/bin/arm-none-eabi-gcc#!/bin/bash #This exists just to trick proxmark3 into making the fullimage, bootrom, and recovery #Dont worry about it cc --version echo Arguments: $/usr/local/bin/arm-none-eabi-objcopy内容完全相同。#!/bin/bash cc --version echo Arguments: $创建后需赋予执行权限chmod x /usr/local/bin/arm-none-eabi-gcc /usr/local/bin/arm-none-eabi-objcopy。由于固件 ELF 已经在桌面端交叉编译好并复制进armsrc/obj/、bootrom/obj/、recovery/iOS 端的 Makefile 只是看到工具存在即认为构建成功因此这两个占位脚本能让make all与make install顺利通过。原文原话With those in place,make allandmake installwill run flawlessly.说明这两条命令位于仓库之外的系统路径/usr/local/bin/属于文档指示的安装/配置动作与仓库内容无关。usbselfserial打通 iOS 上的 USB 串口iOS 内核不支持 USB-CDC ACM 类设备这正是 Proxmark3 在 USB 上呈现的接口类见 common_arm/usb/usb_cdc_desc.c 中设备描述符Device Class: Communication Device Class、Subclass: ACM因此需要第三方内核扩展usbselfserial。其编译好的二进制可从The-SamminAter 的软件源获取与上文 SWIG 同一源。设备插入后用如下命令把 Proxmark3 虚拟串口导出到指定路径usbselfserial -v 0x9ac4 -p 0x4b8f --driver cdcacm -o /tmp/tty.usbmodemiceman1参数说明参数含义-v 0x9ac4USB Vendor ID。仓库源码 common_arm/usb/usb_cdc_desc.c 中写得很清楚0x9ac4 J. WesthuesProxmark3 作者-p 0x4b8fUSB Product ID同一文件注释为0x4b8f Proxmark-3 RFID Instrument--driver cdcacm使用 CDC-ACM 驱动类-o /tmp/tty.usbmodemiceman1输出模拟串口设备路径这两组 VID:PID 在仓库中多处印证driver/77-pm3-usb-device-blacklist-dialout.rules、driver/77-pm3-usb-device-blacklist-uucp.rules中均有ATTRS{idVendor}9ac4, ATTRS{idProduct}4b8f的匹配规则pm3 脚本在 Windows 分支也使用VID_9AC4PID_4B8F匹配设备。对于 PM3 Easy 之外的设备请按实际 VID/PID 调整参数PM3 Easy 是当前 Iceman 固件默认描述符的目标硬件之一。若 proxmark3 客户端无法与设备通信原文给出两个排障手段尝试把端口作为参数显式传给客户端例如client/proxmark3 /tmp/tty.usbmodemiceman1运行sudo killall usbmuxd——usbmuxd是 iOS 的 USB 复用守护进程可能抢占了对 USB 设备的访问。修改 pm3 脚本自动选择端口最后为了让仓库自带的 pm3 启动脚本在 iOS 上自动选择串口原文建议在脚本的get_pm3_list_macOS函数中硬编码端口。该函数在仓库 pm3 中的原始实现如下通过ioreg遍历IOUSBHostDevice筛选 USB 厂商名为proxmark.org的设备取其IODialinDevice串口function get_pm3_list_macOS { N$1 PM3LIST() for DEV in $(ioreg -r -c IOUSBHostDevice -l | awk -F $2USB Vendor Name{b($4proxmark.org)} b1 $2IODialinDevice{print $4}); do PM3LIST($DEV) if [ ${#PM3LIST[*]} -ge $N ]; then return fi done }iOS 设备上不存在ioreg因此需要按原文给出的方式改造——把PM3LIST直接初始化为 usbselfserial 导出的串口路径function get_pm3_list_macOS { N$1 #PM3LIST() PM3LIST(/tmp/tty.usbmodemiceman1) #-- our addition for DEV in $(ioreg -r -c IOUSBHostDevice -l | awk -F $2USB Vendor Name{b($4proxmark.org)} b1 $2IODialinDevice{print $4}); do PM3LIST($DEV) if [ ${#PM3LIST[*]} -ge $N ]; then return fi done }这样pm3脚本启动时脚本尾部$GETPM3LIST 9→CMD ${PM3LIST[$((N-1))]} $的调用链会优先使用/tmp/tty.usbmodemiceman1从而免去每次手动指定端口。此后即可像桌面端一样通过./pm3进入交互式客户端或直接调用client/proxmark3 /tmp/tty.usbmodemiceman1。完整流程速查以 root默认密码alpine安装 Bingner 系依赖或按 Procursus 方式自行适配自担风险按 4 步补丁法补齐 iPhoneOS SDK符号链接 SDK、删除stdlib.h第 188 行__IOS_PROHIBITED、复制 OpenSSL 头、复制 macOS 的 OpenCL/OpenGL 框架在桌面系统构建固件将armsrc/fpga_version_info.c、armsrc/obj/、bootrom/version_pm3.c、bootrom/obj/、recovery/复制到 iOS 端在/usr/local/bin/放置arm-none-eabi-gcc与arm-none-eabi-objcopy占位脚本使make all/make install通过安装 usbselfserial用-v 0x9ac4 -p 0x4b8f --driver cdcacm导出/tmp/tty.usbmodemiceman1必要时sudo killall usbmuxd按上文改造 pm3 的get_pm3_list_macOS之后即可自动连接设备使用。局限性与注意事项Procursus / rootless 越狱上编译尚未被社区验证这是原文档明确标注的前提请勿盲目照搬 Bingner 命令固件与客户端版本必须匹配仓库编译文档 0_Compilation-Instructions.md 强调client and firmware should always be in sync刷写时若出现版本不匹配告警需使用--force参数强制刷写pm3-flash-all --forcehitag2crack/crack5opencl编译时的 OpenCL.tbd告警属预期现象不影响结果本指南只解决在 iOS 上编译并连接客户端的问题固件刷写pm3-flash-all仍需在桌面环境完成文章中涉及的第三方软件源与外部工具The-SamminAter 源、usbselfserial、theos 的 sdks/headers、phracker/MacOSX-SDKs均为原文档指向的外部资源请自行评估其可信度与时效性。【免费下载链接】proxmark3Iceman Fork - Proxmark3项目地址: https://gitcode.com/GitHub_Trending/pr/proxmark3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考