Flipper Zero 餐厅寻呼机 Sub-GHz 信号实战指南:频率边界、固件扩展与信号库全解析
【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper
餐厅寻呼机(Restaurant Pager)通过 Sub-GHz 频段发射寻呼信号,是 Flipper Zero 用户经常接触的一类射频目标。本指南以 Sub-GHz/Restaurant_Pagers/ReadMe.md 为核心骨架,系统梳理 Flipper Zero 官方与非官方 Sub-GHz 频率边界、CC1101 芯片的硬件约束、RogueMaster/Unleashed 固件的频率解锁方案、以及手工修改固件源码的全过程,并带你逐一认识仓库中收录的 Retekess、iBells、LRS 等寻呼机信号样本与暴力破解资源。读完本文,你将掌握寻呼机信号的频率定位、固件级频率扩展方法,以及如何在 Flipper Zero 上正确配置和播放这些 .sub 信号文件。
一、寻呼机信号的频率世界:官方边界与非官方边界
餐厅寻呼系统通常工作在 433 MHz 或 467 MHz 附近(如 LRS 寻呼机使用 467.75 MHz),但它们并不都落在 Flipper Zero 的官方支持频段内。理解这一点的关键在于 Flipper Zero 的 Sub-GHz 射频前端使用了TI CC1101芯片,而社区常见的 YARD Stick One 则使用同系列 CC1111。
仓库文档明确给出了两组频率范围:
| 频率类型 | 范围(MHz) | 依据来源 |
|---|---|---|
| 官方支持 | 300–348、387–464、779–928 | CC1101 芯片文档 |
| 非官方支持 | 281–361、378–481、749–962 | YARD Stick One(CC1111)文档 |
可以看到,非官方范围比官方范围在低频端多出约 19 MHz、高频端多出约 34 MHz 的余量。像 467.75 MHz 这样的 LRS 寻呼机频率,恰好落在非官方范围(378–481 MHz)之内,却超出了官方上限 464 MHz——这正是「改频」需求产生的原因。
二、CC1101 芯片厂商的正式警告:越界的真实代价
在使用 Flipper Zero 在官方频率之外收发信号之前,请理解你正在做什么。超出官方支持频率可能会损坏 Flipper 的功放(AMP)。
这条警告并非社区臆测。仓库文档完整引用了 CC1101 芯片厂商(TI)工程师对「超出数据手册频率工作」的官方答复:
The frequency range of the chip is always tested in the verification tests and there is always some design margin included before the VCO and/or PLL has problems operating for a specified frequency range. Working outside the frequency range can cause issues with the VCO and/or PLL and/or divider not operating correctly. If the VCO is operating outside it's standard frequency range, there are risks of unwanted emissions and no oscillation. The PLL can also fail to lock if operating outside it's standard frequency range and will still apply power to the antenna. Risks with antenna mismatch are increased harmonics, reduced output power and increased current consumption. Generally, the antenna mismatch can be large and the output stage will not be damaged when presented with a large mismatch for short periods of time. However, if the antenna mismatch is very poor for long periods of time, then this can effect the longevity of the chip especially if further stressed with maximum voltage and maximum temperature. Recommend keeping VSWR better than 5:1 for worst case scenarios.这段答复的核心技术要点值得逐条拆解:
- VCO/PLL 失锁风险:芯片在出厂验证时只保证官方频率范围内 VCO/PLL 正常。超出范围后,可能出现 VCO 不起振、PLL 无法锁定(但天线仍会被施加功率)等异常。
- 杂散发射风险:VCO 工作在标称范围之外时,会产生不期望的杂散辐射(unwanted emissions),这是射频合规层面的隐患。
- 天线失配累积损伤:天线失配会带来谐波增加、输出功率下降、电流消耗上升。短时间的大失配通常不致命,但长时间工作在极差失配下会降低芯片寿命,尤其在最大电压、最大温度叠加时。
- 工程建议:最坏情况下保持 VSWR 优于 5:1。
结论很明确:频率扩展是「存在硬件风险的操作」,只应在理解后果的前提下进行。
三、固件层面的解锁途径:三种路线对比
默认情况下,官方固件不允许任何超出 CC1101 官方规格的频率设置。想要突破,仓库文档给出了三条路线:
1. RogueMaster / Unleashed(CodeGrabber)固件
这两类第三方固件内置了频率扩展支持,无需重新编译。文档明确说明:
- RogueMaster:通过
extend_range与dangerous_settings文件启用非官方频率; - Unleashed(CodeGrabber):同样通过
extend_range与dangerous_settings文件启用。
从源码结构看,这两类固件在 HAL 层对furi_hal_subghz_is_frequency_valid的判定逻辑做了放宽处理,并提供了开关文件供用户在设置目录中按需启用。
2. 手工修改官方固件源码并重新编译
如果你坚持使用官方固件(或其它不支持扩展的固件),则需要按仓库内的 SubGHz_changes.md 指引修改两处核心函数并重刷固件。具体方案见下一节。
3. 不修改固件的替代方案
若不想承担改固件的风险,可以优先使用官方支持范围内的寻呼机信号(如 433.92 MHz 频段的 Retekess、iBells 系列),或使用支持该频段的专用硬件(如文档中提到的 HackRF 方案,见 RAW/ReadMe.md)。
四、源码级修改实战:修改 furi_hal_subghz 两处函数
SubGHz_changes.md 给出了完整的修改指引。官方固件中,频率校验与射频通路选择位于targets/f7/furi_hal/furi_hal_subghz.c,需要修改的函数有两个:
furi_hal_subghz_is_frequency_valid(uint32_t value):判定某个频率是否合法;furi_hal_subghz_set_frequency_and_path(uint32_t value):设置频率并选择对应的射频通路(RF Path)。
4.1 修改频率校验函数
把原本限制在官方范围内的条件,替换为如下非官方范围(注意范围为 281–361 MHz、378–481 MHz、749–962 MHz,换算为 Hz 即281000000–361000000等):
bool furi_hal_subghz_is_frequency_valid(uint32_t value) { if(!(value >= 281000000 && value <= 361000000) && !(value >= 378000000 && value <= 481000000) && !(value >= 749000000 && value <= 962000000)) { return false; } // ... 其余返回 true 的逻辑保持不变 }4.2 修改频率与通路设置函数
第二处修改决定「在某个频率上使用哪条射频通路」。Flipper Zero 硬件上有针对不同频段的通路开关(对应源码中的FuriHalSubGhzPath315、FuriHalSubGhzPath433、FuriHalSubGhzPath868),修改后的逻辑如下:
uint32_t furi_hal_subghz_set_frequency_and_path(uint32_t value) { value = furi_hal_subghz_set_frequency(value); if(value >= 281000000 && value <= 361000000) { furi_hal_subghz_set_path(FuriHalSubGhzPath315); } else if(value >= 378000000 && value <= 481000000) { furi_hal_subghz_set_path(FuriHalSubGhzPath433); } else if(value >= 749000000 && value <= 962000000) { furi_hal_subghz_set_path(FuriHalSubGhzPath868); } else { furi_crash("SubGhz: Incorrect frequency during set."); } return value; }注意最后的分支:如果频率落在非官方范围之外,固件会直接调用furi_crash让系统崩溃——这是 Flipper 固件对非法频率设置的兜底保护,也侧面说明改频后必须严格遵守上述三段范围。
4.3 别忘了更新用户设置文件
仅改 HAL 层还不够。文档特别提醒:「Don't forget to add your new freq to the user settings file」。Flipper 的 Sub-GHz 应用会从setting_user文件读取可用频率列表,如果频率不在列表中,即使 HAL 层校验通过,应用层依然无法选择或保存该频率。
仓库在 Sub-GHz/Settings 目录以及 LRS_Pagers/setting_user 中都给出了可直接参考的用户设置文件。以setting_user为例,其结构如下(节选):
Filetype: Flipper SubGhz Setting File Version: 1 # Add All Standard frequencies Add_standard_frequencies: false # Default Frequency: used as default for "Read" and "Read Raw" Default_frequency: 433920000 # Frequencies used for "Read", "Read Raw" and "Frequency Analyzer" Frequency: 300000000 Frequency: 302757000 ... Frequency: 433920000 Frequency: 434176948 ... Frequency: 464000000 Frequency: 467750000 Frequency: 779000000 ... Frequency: 928000000 # Frequencies used for hopping mode (keep this list small or flipper will miss signal) Hopper_frequency: 310000000 Hopper_frequency: 315000000 Hopper_frequency: 433920000 Hopper_frequency: 868350000要点解读:
Add_standard_frequencies: false表示不自动加载官方标准频率列表,完全以自定义列表为准;Frequency:行可重复多条,构成「Read / Read Raw / 频率分析仪」可用的完整频率表;- 上述示例中已经包含了
467750000(LRS 寻呼机常用频率)这样的非官方频率; Hopper_frequency:用于跳频扫描模式,文档提醒列表要保持精简,否则 Flipper 会错过信号;- 文件头部注释说明:如需手动管理设置并防止升级时被覆盖,应把
*_user.example改名为*_user。
4.4 固件刷写后的验证思路
改频完成后,可以先在「频率分析仪」或「Read Raw」模式下确认新频率可被识别,再尝试用Read模式接收已知寻呼信号(如 Retekess_T111 目录内的样本)做回放验证。若 HAL 层路径设置错误(例如 467 MHz 走错了通路),接收灵敏度会显著下降,此时应回到set_frequency_and_path检查通路分支。
五、仓库寻呼机信号资源地图
围绕「餐厅寻呼机」这一主题,仓库在 Sub-GHz/Restaurant_Pagers 下收录了多品牌、多型号的实测信号,覆盖单次呼叫、全量寻呼与暴力破解等不同场景:
1. Retekess 系列(型号最全)
Retekess_Pagers 目录收录了多个型号:
- T111:Pager1.sub、Pager2.sub 以及
Retekess_T111_RestID1_Pager0-99.sub(单个餐厅 ID 下的 0–99 号寻呼机样本); - T119:Retekess_T119_Bruteforce.sub、
Retekess_T119_Bruteforce_Extended.sub与更新版的t119bruteforcerupdated.sub。T119 目录的 README 说明:更新版t119bruteforcerupdated.sub为推荐版本,旧版 sub 来自早期研究、部分编码不正确但依然可用; - TD157:
P0.sub–P5.sub,实测于餐厅使用现场(README 注明 "Collected at a restaurant while in use"); - TD165:
900.sub、901.sub、A00.sub、A01.sub、E00.sub、E01.sub与Raw.sub,实测于咖啡店("Collected at a coffee shop using Flipper Zero")。
这些实测样本的捕获来源本身就是「在真实营业场所用 Flipper Zero 采集」的过程,说明 Flipper 的 Sub-GHz 接收能力足以完成这类信号的采集与回放。
2. iBells ZJ-68:256 编码批量生成
iBells_ZJ-68 目录记录了这样一个案例:作者在德国北部一家加油站发现了 iBells ZJ-68 餐厅寻呼系统(存在 20 机固定版与最多 999 机两种版本),捕获到三个仅最后一字节不同的信号后,编写了 create_zj68_pager_files.py 批量生成 256 个不同编码的信号文件(ZJ-68-pager_00.sub至ZJ-68-pager_FF.sub),并同步生成播放列表 ibells-pager_zj-68_playlist.txt。该脚本展示了「捕获规律 → 脚本化批量生成 → 播放列表驱动」的完整工作流,是研究寻呼机编码规律的绝佳范例。
3. LRS Pager:完整暴力破解方案
LRS_Pagers 目录提供了针对 LRS 寻呼系统的暴力破解文件,README 说明:
- 已移除被证实无效的 433 MHz 版本("Removed the 433 version as it was confirmed to not work for any pagers"),并提示EU 版本频率为 467 MHz;
- 标准 467 MHz 版本需要修改固件才能使用(见前文改频章节);
- 破解思路:遍历所有餐厅 ID 与寻呼机 ID,让每个寻呼机响铃 30 秒("should brute force all resturaunt IDs and pager ids and alert/beep each one for 30s"),作者注明已在 Chilis 餐厅实测验证。
目录内的具体资源包括:
- Brute_first_12_loop.sub 与
jimilinuxguy_brutefrce.sub两个循环/暴力破解信号; - thanks_tony-tiger/RAW 下 89 个
pager_restid_1.raw–pager_restid_89.raw原始信号文件——每个文件对应一个餐厅 ID,用于在指定 ID 下唤醒全部寻呼机; - lrs_pager.py:Tony Tiger 编写的Manchester 编码数据包生成器,用于生成 LRS 寻呼机数据包并配合 GNU Radio 使用(代码中先构造 50 组
1 0前导码唤醒寻呼机,再对数据位做 Manchester 编码); - RAW/ReadMe.md:给出了使用 HackRF 播放这些 .raw 文件、呼叫指定餐厅 ID 下所有寻呼机的参考命令:
/usr/bin/hackrf_transfer -s 2000000 -t pager_restid_1.raw -f 467750000 -x 40该命令以 2 MS/s 采样率发射pager_restid_1.raw,中心频率 467.75 MHz,增益 40 dB——正好对应 LRS 寻呼机的 467 MHz 工作频段,印证了前文「467.75 MHz 超出官方 464 MHz 上限、需要改频」的判断。
4. 单店实测样本
- Alvoko:
Add212.sub、Annuler212.sub、Call212.sub——「呼叫 212」与「取消 212」等针对具体桌号/寻呼机编号的操作信号; - Eboxer:
Eboxer_pager_bjscafe.sub——单一咖啡馆场景的寻呼机信号。
六、Sub-GHz 信号文件格式解析
以 ZJ-68-pager_00.sub 为例,可以看到 Flipper SubGhz Key File(编码信号文件)的标准结构:
Filetype: Flipper SubGhz Key File Version: 1 Frequency: 433920000 Preset: FuriHalSubGhzPresetOok650Async Protocol: Princeton Bit: 24 Key: 00 00 00 00 00 E9 C4 00 TE: 325各字段含义:
| 字段 | 含义 | 示例值 |
|---|---|---|
Filetype | 文件类型标识 | Flipper SubGhz Key File(编码信号) |
Frequency | 发射频率(Hz) | 433920000(433.92 MHz,官方支持范围内) |
Preset | CC1101 预设参数 | FuriHalSubGhzPresetOok650Async(650 µs OOK 异步模式) |
Protocol | 解码协议 | Princeton(普林斯顿编码) |
Bit | 数据位宽 | 24 |
Key | 编码键值(十六进制) | 00 00 00 00 00 E9 C4 00 |
TE | 时间基准(µs) | 325 |
而像 Retekess T111 的 Pager1.sub 则使用了Filetype: Flipper SubGhz RAW File与RAW_Data:逐段记录高低电平时长的原始格式(每段形如56972 -100 1733 -66 ...,正数表示高电平持续时间、负数表示低电平)。RAW 格式不依赖协议解码,适合协议未知或无法自动解码的寻呼机信号,代价是文件体积更大、播放时占用更多资源。
从 create_zj68_pager_files.py 的模板可以推断:ZJ-68 的 256 个编码仅在Key字段的最后一字节({:02X}对应位)上递增,前 7 字节保持不变——这正是作者「三个信号仅最后一字节不同」观察结果的工程化体现。
七、播放列表与批量发射
对于需要顺序播放大量信号的场景(如 ZJ-68 的 256 编码、LRS 的 ID 遍历),仓库提供了播放列表(playlist)方案。以 ibells-pager_zj-68_playlist.txt 为例,其内容为逐行指向 sub 文件的路径:
sub: /ext/subghz/Restaurant_Pagers/iBells_ZJ-68/ZJ-68-pager_00.sub sub: /ext/subghz/Restaurant_Pagers/iBells_ZJ-68/ZJ-68-pager_01.sub sub: /ext/subghz/Restaurant_Pagers/iBells_ZJ-68/ZJ-68-pager_02.sub sub: /ext/subghz/Restaurant_Pagers/iBells_ZJ-68/ZJ-68-pager_03.sub sub: /ext/subghz/Restaurant_Pagers/iBells_ZJ-68/ZJ-68-pager_04.sub使用要点:
- 将整个
iBells_ZJ-68目录复制到 Flipper Zero SD 卡的/ext/subghz/Restaurant_Pagers/下,保持播放列表中的路径与实际存放路径一致; - 在 Flipper 的 Sub-GHz 应用中打开播放列表文件,即可按顺序自动发射列表内所有信号;
- 播放列表中的路径是设备上的绝对路径(
/ext/为 SD 卡挂载点),改动文件位置时必须同步更新列表内容。
八、安全与合规注意事项
最后再次强调文档反复出现的核心警告:
- 硬件风险:超出官方频率(300–348、387–464、779–928 MHz)工作可能损坏 Flipper 的功放电路,CC1101 厂商明确提示 VCO/PLL 失锁、杂散辐射与天线失配累积损伤等风险;
- 固件风险:手工改频需要修改
furi_hal_subghz.c并重新编译固件,非官方频率设置不在官方支持范围内,任何异常(如路径选择错误导致furi_crash)需自行负责; - 合规风险:超出官方规格的频率发射可能产生不合规的杂散辐射,且对营业场所寻呼设备进行干扰性测试应限于法律允许的射频实验范畴,请勿用于干扰他人设备或业务系统。
建议的操作原则:优先使用官方频率范围内的信号(如 433.92 MHz 的 Retekess、iBells 样本);确有 467 MHz 等非官方频率需求时,优先选择 RogueMaster / Unleashed 固件的extend_range与dangerous_settings开关;仅在前两者不可行时,才按本文第四节流程手工改频,并务必把新增频率同步到setting_user设置文件中。
【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考