尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Flipper Zero 门禁遥控暴力破解实战:SMC5326、UNILARM 与 PT2260 协议深度解析与 .sub 文件生成指南

Flipper Zero 门禁遥控暴力破解实战:SMC5326、UNILARM 与 PT2260 协议深度解析与 .sub 文件生成指南 Flipper Zero 门禁遥控暴力破解实战SMC5326、UNILARM 与 PT2260 协议深度解析与 .sub 文件生成指南【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper本指南基于本仓库Sub-GHz/Gates/Bruteforcing/SMC5326_UNILARM_PT2260/目录下的完整方案系统讲解如何利用 Flipper Zero 对采用SMC5326、UNILARM、PT2260编码协议及其同源协议的固定码门禁遥控进行 DIP 开关组合爆破。你将掌握这三种协议的位编码与指令结构、DIP 开关的三态映射规律、generate.py生成分层爆破 .sub 文件的底层原理以及先全量后二分的分组缩小爆破实操流程最终学会在自己的设备上复现这一整套 Sub-GHz 门禁测试方案。⚠️ 安全提醒本文所有技术内容仅用于研究、教学以及在你自己拥有或已获明确授权的设备上进行安全测试。未经许可对他人门禁/车库系统进行任何形式的信号发射都是违法行为请务必遵守当地法律法规。一、方案背景与适用设备该爆破方案最初由 Hong5489 在 flipperzero-gate-bruteforce 项目中实现其思路借鉴了新加坡政府科技局GovTech CSG公开发布的 Breaking Protocol 逆向文章以及 tobiabocchi 的 flipperzero-bruteforce 工具。适用范围仅对UNILARM、SMC5326、PT2260以及采用相同协议的其它固定码DIP 开关式遥控器有效。这类遥控器的共同特征是没有滚动码加密编码完全由硬件 DIP 开关的拨码位置决定且地址码空间有限本质上是三进制 8 位拨码因此可以被系统性地穷举。本仓库中的实物示例与协议波形文件如下UNILARM 遥控器示例unilarm.JPGSMC5326 遥控器示例smc5326.JPGPT2260 遥控器正面/内部PT2260_front.jpg、PT2260_inside.jpg二、协议结构16 位 DIP 地址 固定指令段无论哪种协议帧结构都是DIP 开关地址段 按钮指令段的级联形式属于典型的 PT-2262Princeton格式变体。2.1 UNILARM 与 SMC5326[ 16bits of DIP switch combinations ][ 9bits of Instruction base ]即16 位 DIP 开关组合8 个拨码开关每个拨码有上/中/下三种状态每个状态编码为 2 bit9 位指令基段合计 25 位。用 Pulse Plotter 查看的信号波形如下2.2 PT2260[ 16bits of DIP switch combinations ][ 8bits of Instruction base ]PT2260 的指令段为8 位合计 24 位两种协议都近似于 PT-2262 格式Princeton 编码只是脉冲宽度、指令位宽和按钮指令编码不同。三、三协议位编码与按钮指令对照各协议用不同宽度的脉冲对表示0和1正数为高电平持续时间、负数为低电平持续时间单位微秒 μs并定义了各自的按钮指令码UNILARM0150μs 高 650μs 低1550μs 高 250μs 低按钮 1 指令110000000按钮 2 指令001100000SMC53260300μs 高 900μs 低1900μs 高 300μs 低按钮 1 指令111010101按钮 2 指令101110101PT22600300μs 高 850μs 低1850μs 高 300μs 低开open指令00000011锁lock指令00001100停stop指令00110000关close指令11000000以上各按钮的原始录制信号可直接在 raw_sample 目录中查看共 8 个文件覆盖三种协议的全部按钮文件协议频率unilarm_button1.subUNILARM330MHzunilarm_button2.subUNILARM330MHzsmc5326_button1.subSMC5326433.92MHzsmc5326_button2.subSMC5326433.92MHzpt2260_button_open.subPT2260390MHzpt2260_button_lock.subPT2260390MHzpt2260_button_stop.subPT2260390MHzpt2260_button_close.subPT2260390MHz四、DIP 开关三态编码表8 个拨码开关分别处于上、中o、下-三个位置每种协议对这三个位置赋予不同的 2 bit 编码开关位置UNILARMSMC5326PT2260上111111o中101001-下000000注意PT2260 的中位编码与另外两种协议相反01vs10这一点在generate.py中通过不同的查表数组体现后文会详细说明。由于每个拨码有 3 种状态、共 8 个拨码地址空间总数为3⁸ 6561 种组合这就是爆破的目标全集。五、爆破原理与 generate.py 源码解析核心思路固定指令段不变穷举 16 位 DIP 地址段的所有 6561 种组合用 Flipper Zero 逐条发射 RAW 信号直到命中所属门禁匹配的地址码。5.1 .sub 文件格式generate.py生成的每个文件都是标准的 Flipper SubGhz RAW 文件文件头由 generate.py 中的file_header模板生成Filetype: Flipper SubGhz RAW File Version: 1 Frequency: %s ← 由调用频率参数填入如 330000000 Preset: FuriHalSubGhzPresetOok650Async Protocol: RAWPreset: FuriHalSubGhzPresetOok650Async使用OOK 650k 异步调制预设每个组合对应的脉冲序列以RAW_Data:开头正负整数交替表示高低电平的微秒持续时间可由 unilarm_button1.sub 验证单行数据超过 2500 字符时会自动换行另起RAW_Data:续行见key_bin_str_to_sub函数的line_len判断逻辑。5.2 位到脉冲的转置表generate.py为三种协议分别定义了transposition_table把二进制位映射成高低电平序列与上文协议对照完全一致# UNILARM 0: 150 -650 , 1: 550 -250 # 停止位 stop_bit 150 -5600 # SMC5326 0: 300 -900 , 1: 900 -300 # 停止位 stop_bit 900 -7500 # PT2260 0: 300 -850 , 1: 850 -300 # 停止位 stop_bit 300 -8800 每一帧的末尾追加一个停止位stop_bit用于标记帧结束UNILARM 为150 -5600、SMC5326 为900 -7500、PT2260 为300 -8800微秒。5.3 帧组合与重复发送次数以 SMC5326 的生成循环为例generate.pysub_file [] lut [0b00, 0b10, 0b11] # 三态编码下00、中10、上11 gate1 0b111010101 # 按钮 1 指令段 for dip in range(3**8): # 遍历 6561 种拨码组合 total 0 for j in range(8): # 8 个拨码每个占 2 bit total | lut[dip % 3] (2 * j) # 按三进制位展开成 16 bit 地址 dip // 3 total 9 # 地址段左移 9 位 total | gate1 # 拼接按钮 1 指令段 # 整帧重复发送 5 次UNILARM 为 3 次改 3 可提速 sub_file.append(RAW_Data: key_bin_str_to_sub(bin(total)[2:].zfill(total_bits))*5)关键点lut [0b00, 0b10, 0b11]下标 0/1/2 对应三进制位 0/1/2即拨码的下/中/上映射结果符合第四节表格PT2260 中位编码不同其lut [0b00, 0b01, 0b11]将中位置为01total_bitsUNILARM/SMC5326 为 25 位、PT2260 为 24 位用zfill补齐前导零保证 16 位地址段每一位都完整发送重复发送UNILARM 每帧重复 3 次SMC5326 和 PT2260 重复 5 次以提高接收成功率若想加快爆破速度可将 5 改为 3脚本注释中已说明PT2260 段使用button_open、button_lock、button_stop、button_close四个 8 位指令0b11、0b1100、0b110000、0b11000000分别生成四组爆破文件。5.4 分频段与分层拆分脚本按频率生成对应目录generate.pyUNILARMUNILARM_330、UNILARM_433330MHz / 433.92MHzSMC5326SMC5326_330、SMC5326_433PT2260PT2260_315、PT2260_330、PT2260_390、PT2260_433315 / 330 / 390 / 433.92MHz每个频段目录内部再按splits数组分层6561 → 2187 → 729 → 243 → 81 → 27 → 9层数越深、单文件包含的组合越少、文件数量越多6561目录1 个文件包含全部 6561 种 DIP 组合2187目录3 个文件每个文件包含 2187 种组合729目录9 个文件每个包含 729 种组合……依次类推到9目录时共有 729 个文件每个文件只含 9 种组合。文件命名规则为{i}_{j}.sub其中i表示当前层的分组号、j表示文件序号。生成完成后打包的 All_Files.zip 可供直接解压使用。六、实操生成、拷贝与分层爆破6.1 方式一直接使用仓库中已生成的文件仓库已附带generate.py与 All_Files.zip可直接解压获得全部频段、全部分层的 .sub 文件无需本地运行脚本。6.2 方式二本地运行 generate.py 重新生成环境需具备 Python 3仅用到标准库math、os在脚本所在目录执行python3 generate.py运行后会在当前目录生成UNILARM_330/UNILARM_433、SMC5326_330/SMC5326_433、PT2260_315/PT2260_330/PT2260_390/PT2260_433等完整目录树。6.3 拷贝到 Flipper Zero将所需频段的整个文件夹拷贝到 Flipper Zero 的 SD 卡/subghz目录下Flipper Zero 的 Sub-GHz 应用中RAW 文件默认扫描该目录。如果只想爆破单个按钮只需拷贝对应按钮生成的子集目录即可。6.4 分层缩小爆破类似二分查找直接播放6561目录的0_0.sub会穷举全部组合发送时间很长。更实用的做法是逐层缩小地址范围。以文档示例为例确定门禁遥控为SMC5326 协议、330MHz 频率将SMC5326_330文件夹拷贝到 SD 卡subghz目录播放2187/0_0.sub前 2187 种组合门开了进入729层播放文件名以0开头的文件0_0.sub、0_1.sub、0_2.sub找出哪一个能开门假设0_1.sub有效说明正确地址落在该文件覆盖的区间进入243层播放以1开头的文件1_3.sub、1_4.sub、1_5.sub不断重复根据上一层命中的组号进入下一层对应分组的过程直到发送时间缩短到可接受的范围层数越深、单文件组合越少、发送越快。每播放一个文件后都要观察门是否动作命中 → 记录当前组号并进入更细的分层未命中 → 尝试同层其余分组文件。6.5 合法使用边界请务必在你自己拥有的门禁/车库系统上测试或在获得系统所有者明确授权后进行。未经授权对他人系统发射射频信号属于违法行为本方案仅用于协议研究与授权的安全评估。七、延伸仓库中同类的门禁爆破资源本仓库的 Sub-GHz/Gates/Bruteforcing 目录下还收录了其它门禁爆破素材可作对比参考CAME_NICECAME TOP 与 Nice Flow 的 RAW 爆破文件据其 ReadMe 记录完整一轮约 10–20 分钟、开锁约 4–5 分钟Many OOK SUBs/RogueMaster/README.md?utm_sourcegitcode_repo_files)Ansonic、CAME-12bit、Chamberlain-9bit、Holtek、Linear-10bit、NICE-12bit 等多种 OOK 固定码遥控的预生成分层爆破文件目录结构与本文 6561/2187/729… 分层思想一致并附带flipperzero-bruteforce.py生成脚本。结合 Sub-GHz 主目录下的频谱图等资料可以更全面地理解 300–930MHz 频段的 OOK 设备生态。八、总结SMC5326、UNILARM、PT2260 三类门禁遥控基于 PT-2262 类固定码协议16 位 DIP 地址 固定指令段的帧结构使其可以在 Flipper Zero 上被系统性穷举。掌握本文的脉冲转置表、三态 DIP 映射与分层拆分策略再配合generate.py生成的多频段、多层 .sub 文件即可在自己的授权设备上完成快速、可收敛的门禁遥控协议爆破验证。【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表