资讯动态

Proxmark3(Iceman Fork)Ubuntu 22.04 Docker 测试环境:镜像构建与完整构建-测试矩阵

发布时间:2026/9/17 20:47:52 来源:尧图企业网站定制
Proxmark3Iceman ForkUbuntu 22.04 Docker 测试环境镜像构建与完整构建-测试矩阵【免费下载链接】proxmark3Iceman Fork - Proxmark3项目地址: https://gitcode.com/GitHub_Trending/pr/proxmark3本文基于仓库docker/ubuntu-22.04/目录下的 README 及其配套文件讲解如何在 Ubuntu 22.04 Docker 环境中构建 proxmark3 的官方开发镜像并运行覆盖 Make/CMake、RDV4/GENERIC/BTADDON 平台组合的完整测试矩阵run_tests.sh→release_tests.sh→pm3_tests.sh。读完后可独立完成镜像构建与启动、单机构建测试、全量回归测试并理解每一类测试背后的验证目标。一、Ubuntu 22.04 测试镜像的定位docker/目录下为每个受支持的发行版提供一套独立的构建与测试环境Ubuntu 22.04 是其中的 LTS 基线之一。该目录包含 4 个文件Dockerfile镜像定义安装完整构建工具链与测试依赖docker_conf.inc本发行版的容器配置镜像名、可选项run_tests.sh一键全量测试入口本文核心README.md脚本用途与两种运行方式的说明。docker_conf.inc内容很简洁DOCKER_IMAGEpm3-ubuntu-22.04:1.0 #SKIPQT1镜像名固定为pm3-ubuntu-22.04:1.0SKIPQT1为可选构建参数用于跳过 Qt 相关依赖以加快镜像构建见下文 Dockerfile 中的SKIPQTARG。同目录还有若干发行版兄弟目录如 ubuntu-24.04、debian-13-trixie、kali结构完全一致可对照参考。二、Dockerfile镜像里装了什么镜像以官方ubuntu:22.04为基础Dockerfile核心内容分五块基础工具链L6-L10git、build-essential、cmake、pkg-config以及客户端/固件编译依赖apt-get install -y --no-install-recommends git ca-certificates build-essential \ cmake pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev \ liblz4-dev zlib1g-dev libbluetooth-dev libpython3-dev libssl-dev libgd-dev sudo其中gcc-arm-none-eabilibnewlib-dev用于编译 ARM 固件armsrc/bootromlibbluetooth-dev对应 BTADDON蓝牙模组构建libpython3-dev与libgd-dev分别支撑 Python 脚本支持与图片处理。OpenCL 头文件L12-L13单独安装opencl-dev供 Hitag2 的 OpenCL 破解工具ht2crack5opencl编译是否真正运行 OpenCL 测试由--opencl参数控制。可选 Qt 依赖L15-L19构建参数SKIPQT默认为false即默认安装qt6-base-dev构建时传--build-arg SKIPQT1可跳过与docker_conf.inc中被注释的#SKIPQT1呼应。uv 运行时与用户环境L21-L33从ghcr.io/astral-sh/uv镜像拷入/uv与/uvx这样tools/pm3_tests.sh中的 Python 脚本会自动走uv run --script若系统存在 uv保证 Python 环境一致创建免密用户rrg并写入rrg ALL(ALL) ALL的 sudoers测试脚本需要sudo apt update支持构建参数UART_GID若传入则按宿主机dialout组的 GID 创建mydialout组并把rrg加入其中——这是为了让容器内用户能访问宿主机串口设备注释明确说明“dialout 组在宿主机上的数字 ID 可能不同”。收尾以rrg用户运行工作目录/home/rrg默认CMD /bin/bash。三、构建镜像、启动容器与清理镜像构建统一由 docker/build.sh 完成在发行版子目录内执行自动加载docker_conf.inc# 在 docker/ubuntu-22.04/ 目录下 ./build.sh # 实际执行docker build $DOCKER_PLATFORM $BUILDARG -t pm3-ubuntu-22.04:1.0 .构建完成后用 docker/run.sh 交互式进入容器其关键逻辑L8-L14调用宿主机上的../../pm3 --list探测已连接 Proxmark3 的 UART 串口如/dev/ttyUSB0若探测到串口则把/dev/tty0与该串口设备一并--device挂载进容器否则只挂/dev/tty0执行docker run $DEV $DOCKER_PLATFORM \ --volume$(pwd)/../..:/home/rrg/proxmark3 \ -w /home/rrg/proxmark3 --nethost --rm -it pm3-ubuntu-22.04:1.0即把仓库根目录挂载到容器内/home/rrg/proxmark3并设为工作目录--nethost便于与设备/网络调试通信--rm保证退出后不残留容器。这正是 README 强调“脚本要在容器内、proxmark 根目录下运行”的前提。不再需要时docker/rm.sh 负责清理删除基于该镜像的容器、docker image rm $DOCKER_IMAGE并docker builder prune --force清理构建缓存。四、全量测试run_tests.sh 与它背后的构建矩阵README 的第一段说明概括了run_tests.sh的职责它把 make 与 cmake 混合起来跑 RDV4、GENERIC、BTADDON 各种组合的一整套构建若全部通过脚本以PASS收尾。在容器内仓库根目录下运行docker/ubuntu-22.04/run_tests.shrun_tests.sh 本体只有 3 行有效逻辑sudo apt update sudo apt upgrade -y tools/release_tests.sh # beeps for ((i0; i10;i)) do echo -e \a;sleep 0.3; done先升级系统包保证依赖库为最新避免发行版小版本间的编译差异再委托给 tools/release_tests.sh最后用 10 声蜂鸣提示跑完长时间任务的人工感知信号。真正的“矩阵”在 release_tests.sh 中共 8 步任何一步失败|| exit 1即中止且不输出 PASS#构建方式平台/组合说明1makePLATFORMPM3GENERIC STANDALONELF_SAMYRUN通用 PM3 硬件 一个 standalone 固件LF SAMYRUN见 armsrc/Standalone/2makePLATFORMPM3RDV4 STANDALONEHF_ST25_TEAROFFRDV4 硬件 standaloneHF ST25 Tearing-off3makePLATFORMPM3RDV4 PLATFORM_EXTRASBTADDON STANDALONEHF_REBLAYRDV4 蓝牙模组 standalone4makemake install/uninstall同组合 3额外验证安装后proxmark3 -c data load -f lf_EM4x05.pm3;lf search -1能输出Valid FDX-B ID found需 sudo仅在sudo true成功时执行5cmakeclient 子项目PM3GENERIC组合独立构建客户端并跑pm3_tests.sh --clientbin验证该二进制6cmakePM3RDV4组合验证 CMake 路线下 RDV4 平台可编译7cmakePM3RDV4 BTADDON组合同上含蓝牙8make hitag2crack—构建 Hitag2 破解工具集并跑pm3_tests.sh hitag2crack注意脚本开头L4-L9会对Makefile.platform做防御性检查若用户本地的平台配置里含SKIP_*指令脚本会直接报错退出因为这些跳过项会破坏测试完整性。所有构建均以make clean make -j保证从零开始、并行编译因此全量跑完需要较长时间这也是 README 把“单条命令测试”作为轻量替代手段的原因。五、轻量替代单机构建 定向测试README 的第二种运行方式适合只关心当前平台、当前构建能否通过的场景sudo apt update sudo apt upgrade -y make clean; make -j tools/pm3_tests.sh --long即在容器内升级系统包、干净地全量构建当前默认平台Make 构建同时产出客户端client/proxmark3、ARM 固件armsrc/obj/fullimage.elf、bootrom/obj/bootrom.elf、recovery/recovery.bin等工件然后带--long运行 tools/pm3_tests.sh。pm3_tests.sh的完整用法源自脚本内--helpUsage: pm3_tests.sh [--long] [--opencl] [--clientbin /path/to/proxmark3] [mfkey|nonce2key|mf_nonce_brute|staticnested|mfd_aes_brute |mfulc_des_brute|cryptorf|fpga_compress|bootrom|armsrc |client|recovery|common] --long: Enable slow tests --opencl: Enable tests requiring OpenCL (preferably a Nvidia GPU) --clientbin ...: Specify path to proxmark3 binary to test If no target given, all targets will be tested参数与目标含义--long启用标记为slow的慢速测试脚本注释定义 slow 耗时超过约 5 秒不带则这些测试显示SKIPPED (slow)--opencl启用需要 OpenCL 的测试如ht2crack5opencl通常建议配合 GPU--clientbin path指定要测试的 proxmark3 二进制release_tests.sh第 5 步就是用 CMake 构建出的客户端路径 client目标来定向验证位置参数目标不传则测试全部目标传单个目标如mfkey、client、hitag2crack、armsrc只跑对应区块。六、pm3_tests.sh 的测试机制与覆盖范围从 pm3_tests.sh 的实现看所有测试由两个函数驱动CheckFileExist校验构建工件/资源文件存在可用opencl前缀标记为 OpenCL 依赖项CheckExecute执行命令并用正则匹配输出支持 4 个前缀标记——slow慢速、opencl需 OpenCL、retry失败重试最多 3 次、ignore失败不计为致命。单项超过 2 秒会附带耗时信息失败时打印FAIL与完整执行轨迹。覆盖的测试区块TESTALL模式下包括common资源文件检查hardnested 表、client/resources/sim020.bin、client/dictionaries/下的 iCLASS/MFC/MFDES/MFP/MFULC/T55XX/HITAG2 词典 工具自测xorcheck.py、findbits.py、pm3_eml_mfd_test.py、recover_pk.py、mkversion.shbootrom / armsrc / recovery确认三类固件工件已生成bootrom/obj/bootrom.elf、armsrc/obj/fullimage.elf、recovery/recovery.binfpga_compress确认tools/fpga_compress/fpga_compress已构建mfkey / staticnested / nonce2key / mf_nonce_brute / mfd_aes_brute / mfulc_des_bruteMifare 系密钥恢复工具的已知答案测试如mfkey32v2给定 6 组 nonce 应恢复出[a0a1a2a3a4a5]nonce2key应恢复fc00018778f7等断言值直接写死在脚本中见 tools/pm3_tests.shcryptorfsma_multi已知密钥恢复测试hitag2crackcrack2 快速自检、crack3/crack4/crack5 已知密钥AABBCCDDEEFF恢复测试其中 crack4 标记为slow retry ignore概率性成功、crack5opencl 标记为slow openclclient客户端二进制行为测试涵盖 help 文本、-c多命令/标准输入执行、cmdscript/luascript 运行script run example.cmd、data_hex_crc、Python 脚本支持检测、CRC 库reveng、QR 编码边界条件、trace 加载与 14a/7816 解析、wiegand encode/decode各类回环、大量 LF 协议解码EM410x、AWID、HID、Indala、KERI、NexWatch 等与 T55xx 模拟迹线解码、以及 HF 侧hf mf、hf iclass loclass、emv test、hf cipurse/mfdes/gst/saflok test、mad test等离线自检命令。全部通过后输出Tests [ OK ]并以 0 退出任一致命项失败即输出FAIL并退出 1——这层退出码正是release_tests.sh中|| exit 1与最终PASS判定L21echo PASS的可靠基础。七、实践建议与适用前提完整回归镜像构建后用run.sh进入容器执行docker/ubuntu-22.04/run_tests.sh预期耗时较长多次 clean 全量构建 慢速测试适合发版前或环境验证以结尾的PASS及蜂鸣声为完成标志。日常开发直接make clean make -jtools/pm3_tests.sh需要慢速用例时加--long或只跑与改动相关的目标如tools/pm3_tests.sh client、tools/pm3_tests.sh mfkey。需要连接真机run.sh会自动探测并挂载串口设备容器内可执行proxmark3连接设备纯软件测试本文涉及的绝大多数项不需要硬件。适用限制opencl测试默认跳过需显式--opencl且通常需 GPUmake install那一步依赖 sudoDockerfile 中已为rrg用户配置免密 sudoSKIP_*平台的Makefile.platform会与release_tests.sh冲突并被脚本主动拒绝这是有意的设计而非缺陷。清理不再使用本发行版镜像时在docker/ubuntu-22.04/下执行../rm.sh即 docker/rm.sh移除容器、镜像与构建缓存。以上所有命令与路径均可在当前仓库中直接核对镜像定义见 docker/ubuntu-22.04/Dockerfile测试入口链为 docker/ubuntu-22.04/run_tests.sh → tools/release_tests.sh → tools/pm3_tests.sh容器启停为 docker/run.sh 与 docker/rm.sh。【免费下载链接】proxmark3Iceman Fork - Proxmark3项目地址: https://gitcode.com/GitHub_Trending/pr/proxmark3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价