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

资讯详情

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

Unleashed 固件 SubGHz 计数器实验模式(CounterMode)完全指南:协议支持、.sub 配置与源码原理

Unleashed 固件 SubGHz 计数器实验模式(CounterMode)完全指南:协议支持、.sub 配置与源码原理 Unleashed 固件 SubGHz 计数器实验模式CounterMode完全指南协议支持、.sub 配置与源码原理【免费下载链接】unleashed-firmwareFlipper Zero Unleashed Firmware项目地址: https://gitcode.com/GitHub_Trending/un/unleashed-firmware导读SubGHz Counter Experimental Mode 是 Unleashed 固件为 Flipper Zero 提供的一项高级实验特性它允许你自定义 SubGHz 滚动码信号发射时计数器的递增方式。其核心目标是让克隆的遥控器与原装遥控器在滚动码rolling code系统中同时使用而不互相冲突、不失步desync——不同品牌的接收器对计数器序列的校验规则不同通过切换不同的 CounterMode可以让 Flipper 发送的计数器序列与特定接收器型号的预期行为对齐。读完本文你将掌握如何手工编辑.sub文件启用 CounterMode、五个支持协议的完整模式对照表含源码级验证以及模式选择背后的实现原理与风险边界。⚠️重要警告原文保留不要对你没有访问权限的设备做实验。如果你不确定哪种模式适合你的系统、且无法对接收器重新编程不要使用这些模式如果你有接收器访问权限并能进行测试可以在这些模式中尝试并到 GitHub issues 或社区反馈结果。一、什么是 CounterMode实验模式的设计动机滚动码rolling code协议每次按键都会改变发射数据中的计数器counter字段接收器只接受预期范围内的下一个计数值以此防止重放攻击。Flipper 克隆了信号后如果每次发送都简单地把计数器 1当原装遥控器也同时被使用时两边会互相抢占计数器序列导致接收器判定失步desync最终双方都失效。Experimental Counter Mode 的思路是改变 Flipper 发送时计数器的步进序列sequence pattern使其与特定接收器固件/型号实际校验的序列保持一致从而让 Flipper 与原装遥控器可以在同一套滚动码系统里井水不犯河水地共存。从源码看这是纯粹在编码器encoder侧实现的特性lib/subghz/protocols/下每个支持该特性的协议文件中都有一个静态全局变量保存当前模式例如nice_flors_counter_modenice_flor_s.c、keeloq_counter_modekeeloq.c、came_atomo_counter_modecame_atomo.c、alutech_at4n_counter_modealutech_at_4n.c、v2_phoenix_counter_modephoenix_v2.c。该变量在反序列化.sub文件时通过flipper_format_read_uint32(flipper_format, CounterMode, ...)读取缺失时置 0随后在生成发射波形时决定计数器如何递增。二、如何启用 CounterMode手工编辑 .sub 文件启用某个计数器模式需要手工编辑你的.sub文件并添加一行CounterMode配置。操作步骤在 Flipper Zero 的 SD 卡上找到你的.sub文件位于/ext/subghz/目录用文本编辑器打开该文件在文件末尾添加如下一行CounterMode: X其中X是模式编号0、1、2……具体取值范围取决于协议详见下文模式对照表。完整示例 .sub 文件Filetype: Flipper SubGhz Key File Version: 1 Frequency: 433920000 Preset: FuriHalSubGhzPresetOok650Async Protocol: Nice FloR-S Bit: 52 Key: AA AA AA AA AA AA AA CounterMode: 1源码层面的读取逻辑在固件源码中这一行的解析路径是编码器/解码器的*_deserialize()函数调用flipper_format_read_uint32()读取CounterMode读取失败则回退到模式 0标准模式。以 KeeLoq 为例keeloq.cuint32_t tmp_counter_mode; if(flipper_format_read_uint32(flipper_format, CounterMode, tmp_counter_mode, 1)) { keeloq_counter_mode (uint8_t)tmp_counter_mode; } else { keeloq_counter_mode 0; }因此语法上要求CounterMode:后紧跟空格再写数字且模式号必须在该协议支持范围内。如果你使用无效的模式号根据 SubGHzCounterMode.md 的 FAQ最后一个模式会被采用——从源码看这正是各协议if/else链末端兜底分支的行为例如 KeeLoq 中keeloq_counter_mode 7之外的任何值都会落入else的 Mode 7 分支。三、无需手动编辑文件Signal Settings 菜单中的 CounterMode 选项除了手工编辑.sub固件还在 SubGHz 应用的信号设置场景中提供了图形化配置入口。场景代码 subghz_scene_signal_settings.c 中定义了 8 个可选项System 即模式 0以及 Mode 1~Mode 7并根据协议动态限制可选数量协议名源码中的字符串可用模式数Nice FloR-S3模式 0~2CAME Atomo4模式 0~3Alutech AT-4N3模式 0~2KeeLoq8模式 0~7Phoenix_V23模式 0~2该场景通过flipper_format_insert_or_update_uint32()把所选模式写回.sub文件如果文件中的协议不在上表内该项会被锁定并提示 Not available for this protocol对应源码中counter_mode 0xff的状态。四、支持协议与计数器模式对照表附源码验证以下所有模式均已在对应协议源码的计数器递增逻辑中逐一确认。五种协议的模式 0默认行为完全一致模式 0默认 / 标准模式行为与普通遥控器一致使用全局设置中的滚动计数器乘数rolling counter multiplier默认 1递增计数器溢出 0xFFFF时归零重置。该乘数由 HAL 层维护furi_hal_subghz.c中rolling_counter_mult默认值为 1furi_hal_subghz_get_rolling_counter_mult()返回当前值furi_hal_subghz.c。标准模式下的递增逻辑形如以 Nice Flor-S 为例nice_flor_s.cif((instance-generic.cnt furi_hal_subghz_get_rolling_counter_mult()) 0xFFFF) { instance-generic.cnt 0; } else { instance-generic.cnt furi_hal_subghz_get_rolling_counter_mult(); }此外五种协议还共享一个隐藏分支当全局滚动计数器乘数被设置为-0x7FFFFFFF即 OFEX / overflow experimental 溢出实验模式时模式 0 会退化为0x0001 / 0xFFFE交替序列。1. Nice Flor-S源码lib/subghz/protocols/nice_flor_s.c模式计数器序列适用场景0默认标准递增乘数溢出归零普通遥控器模拟1floxi2r0x0001 / 0xFFFE交替适用于 floxi2r 型号接收器2ox20x0000 / 0x0001交替适用于 ox2 型号接收器源码实现位于 nice_flor_s.cMode 1 在计数器为0xFFFE时置回0x0001否则强制置为0xFFFEMode 2 在计数器 ≥ 1 时归零否则 1。2. Came Atomo源码lib/subghz/protocols/came_atomo.c模式计数器序列适用场景0默认标准递增乘数溢出归零普通遥控器模拟10x0000 / 0x0001 / 0xFFFE / 0xFFFF循环兼容外置 CAME RE432 接收器可能兼容其他接收器20x807B / 0x807C / 0x007B / 0x007C循环兼容外置 CAME RE432 接收器可能兼容其他接收器3计数器冻结不递增固定计数值发送源码实现位于 came_atomo.c。需要说明的是CAME Atomo 的发射报文里还包含一个独立的按键按住周期计数器8-bit0~0x7F这与我们讨论的 16-bit 滚动计数器是两回事详见源码注释 came_atomo.c。3. Alutech AT-4N源码lib/subghz/protocols/alutech_at_4n.c模式计数器序列适用场景0默认标准递增乘数溢出归零普通遥控器模拟10x0000 / 0x0001 / 0xFFFE / 0xFFFF循环适用于 MCSW-3.3M 接收器20x0000 / 0x0001 / 0x0002 / 0x0003 / 0x0004 / 0x0005循环适用于其他接收器板源码实现位于 alutech_at_4n.cMode 2 在计数器 ≥ 0x0005 时归零否则 1实现 0~5 循环。4. KeeLoq源码lib/subghz/protocols/keeloq.c模式计数器序列适用场景0默认标准递增乘数溢出归零普通遥控器模拟10x0000 / 0x0001 / 0xFFFE / 0xFFFF循环可能兼容某些系统欢迎反馈2增量模式每次发射 0x3333十进制 13107溢出归零可能兼容 Doorhan常见于某些万能遥控器30x8006 / 0x8007 / 0x0006 / 0x0007循环可能兼容 Hormann EcoStar 等系统40x807B / 0x807C / 0x007B / 0x007C循环可能兼容 Nice Smilo 等系统50x0000 / 0xFFFF交替在 0 与最大值 65535 之间跳变可能兼容某些系统欢迎反馈6计数器冻结不递增固定计数值发送7对当前计数器连续做 5 次 0x3333然后恢复原值依次 1 两次一包共 7 条信号可能兼容 Doorhan常见于某些万能遥控器KeeLoq 的 Mode 2 实现位于 keeloq.c(cnt 0x3333) 0xFFFF时归零否则cnt 0x3333。Mode 7 则是一个多信号序列在 keeloq.c 中可以看到它循环 7 次生成上传序列——前 4 次以计数器 0x3333 递增counter_up true第 3 次固定为0x0000最后两次分别用原计数器和原计数器 1 各发射一帧。文档特别提示Mode 7 下在 Flipper 上单击一次 Send 按钮即可发射整包 7 条信号可能绕过接收器的计数器校验窗口请等待完整传输结束。5. V2 PhoenixPhox源码lib/subghz/protocols/phoenix_v2.c模式计数器序列适用场景0默认标准递增乘数溢出归零普通遥控器模拟1类 ofex0x0000 / 0x0001 / 0xFFFE / 0xFFFF循环已验证可用20~40x0000 / 0x0001 / 0x0002 / 0x0003 / 0x0004循环可能可用欢迎反馈源码实现位于 phoenix_v2.cMode 1 与 OFEX 序列一致Mode 2 在计数器 ≥ 0x0004 时归零否则 1。与 KeeLoq 类似Phoenix V2 的计数器在写入波形前还会经过subghz_protocol_phoenix_v2_encrypt_counter()加密处理。五、重要注意事项与故障排查关键考量默认行为如果.sub文件中未指定CounterMode固件默认使用普通遥控器模拟计数器 1这是标准模式在大多数场景下都能正常工作协议兼容性并非所有协议都支持所有计数器模式。使用不支持的编号可能导致意外行为如落入最后一个模式的兜底分支务必先测试在依赖某个配置之前始终先验证其行为。故障排查如果你的文件在添加CounterMode后不工作复查语法CounterMode: X冒号后必须有空格确认该模式编号对当前协议是有效的对照上文模式表。安全与合规边界根据原文档 FAQ该功能可能会损坏你的遥控器或接收器——取决于接收器实现它可能导致你的原装遥控器失步不要对你没有访问权限的设备做实验不确定该用哪个模式时不要使用这些模式CounterMode不是必须逐文件添加的只有需要非默认行为时才需要加未指定时自动使用模式 0SubGHzCounterMode.md。一个值得注意的源码细节bypass 机制在所有五个协议实现中都存在一个bypass标志当你在 Signal Settings 菜单中通过界面直接修改了 Counter 或 Button 时固件会置位bypass从而跳过 CounterMode 序列逻辑按你手动指定的计数值直接生成信号例如 nice_flor_s.c 注释if we change counter/button in SignalSettings menu then we must bypass counter_modes, just gen and save signal file。这意味着界面手动改计数与 CounterMode 序列是互斥的两条路径理解这一点有助于解释为什么我改了计数但 CounterMode 好像没生效。六、完整配置示例示例 1Nice Flor-S 使用模式 1floxi2rFiletype: Flipper SubGhz Key File Version: 1 Frequency: 433920000 Preset: FuriHalSubGhzPresetOok650Async Protocol: Nice FloR-S Bit: 52 Key: 01 23 45 67 89 AB CD CounterMode: 1示例 2KeeLoq 使用模式 20x3333DoorhanFiletype: Flipper SubGhz Key File Version: 1 Frequency: 433920000 Preset: FuriHalSubGhzPresetOok650Async Protocol: KeeLoq Bit: 64 Key: DE AD BE EF CA FE BA BE Manufacture: Doorhan CounterMode: 2提示KeeLoq 协议的.sub文件通常还包含Manufacture厂商字段编码器会根据厂商名选择不同的学习方式与加密密钥keeloq.cCounterMode 与该字段相互独立、可组合使用。七、FAQ 速查Q: 这会损坏我的遥控器或接收器吗A: 可能会。取决于接收器实现它可能导致你的遥控器失步。请注意风险不要对你没有访问权限的设备做实验。Q: 我应该用哪个模式A: 如果你不确定就不要使用这些模式。Q: 如果我用了无效的模式编号会怎样A: 会采用列表中的最后一个模式源码中即if/else链的兜底分支。Q: 我需要给每个 .sub 文件都加 CounterMode 吗A: 不需要。只有需要非默认行为时才加未指定时自动使用模式 0。本文基于 Unleashed 固件仓库中的 SubGHzCounterMode.md 撰写并结合 lib/subghz/protocols/ 下五个协议的编码器实现、furi_hal_subghz.c 的全局计数器乘数实现以及 subghz_scene_signal_settings.c 的界面配置逻辑进行了源码级验证。引用时请注明出处。【免费下载链接】unleashed-firmwareFlipper Zero Unleashed Firmware项目地址: https://gitcode.com/GitHub_Trending/un/unleashed-firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表