
Flipper Zero LRS 餐厅寻呼机信号生成与发送全解析Manchester 编码、GNU Radio 与 HackRF 工作流【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipperthanks_tony-tiger目录是 Tony Tiger 针对 LRSLong Range Systems餐厅寻呼系统发布的完整信号研究套件涵盖 Python 信号生成器、GNU Radio 流图、以及可直接发送的 RAW 二进制文件。本篇技术指南将以此为骨架结合仓库内 lrs_pager.py、lrs_pager_grc、RAW 目录 与 Flipper Zero 侧的暴力呼叫文件从数据包结构、编码原理到发射链路逐层展开。读完本文你将掌握 LRS 寻呼数据帧的字段布局、Manchester 编码与校验算法能够自行生成自定义呼叫文件并知道如何在 HackRF 与 Flipper Zero 上实际发送。资源全景这套套件里有什么Tony Tiger 于 2019 年 6 月撰写了这套工具用于配合其用 HackRF 攻击餐厅寻呼机的公开演示。仓库中与其配套的文件包括文件作用lrs_pager.pyPython 源码生成 Manchester 编码的寻呼数据包输出pager.binlrs_pager_grcGNU Radio Companion3.7.9流图工程用于把pager.bin调制成射频信号pager_0.zip预生成的二进制寻呼文件包可同时唤醒/呼叫全部寻呼机RAW 目录89 个按餐厅 ID 划分的.raw文件pager_restid_1.raw至pager_restid_89.raw配合hackrf_transfer即可发射注意pager_0.zip中二进制文件的使用前提是餐厅 ID 必须与寻呼机设置匹配——即基站侧的餐厅 ID 决定了哪些寻呼机会响应。lrs_pager.py 源码级拆解数据包是怎么造出来的整个生成器的核心逻辑都写在 lrs_pager.py 中虽然只有 124 行却完整实现了输入呼叫参数 → 组装数据帧 → CRC 校验 → Manchester 编码 → 落盘的完整流水线。脚本按交互方式依次询问三个参数参数一餐厅 ID0–255rest_idint(raw_input(\nEnter restaurant id 0-255: ))餐厅 ID 用于区分不同餐厅的寻呼基站取值范围 0~255。后续组装帧时它会被格式化为 2 位十六进制format(rest_id, 02x)。参数二寻呼机号码0–1023支持多个pagers(raw_input(Enter one or more pager numbers 0-1023 : )) pager_list map( int, re.split(\s,pagers))脚本支持一次输入多个寻呼机号码用空白分隔每个号码会单独生成一个呼叫帧。寻呼机号在帧中以 3 位十六进制出现format(pager_n, 03x)。参数三告警类型运行时会先打印可选告警类型菜单print 1 Flash 30 Seconds\n2 Flash 5 Minutes\n3 Flash/Beep 5X5\n4 Beep 3 Times\n5 Beep 5 Minutes\n6 Glow 5 Minutes\n7 Glow/Vib 15 Times\n10 Flash/Vib 1 Second\n68 beep 3 times\n各类型取值将直接以 2 位十六进制写入数据帧。例如值行为1闪烁 30 秒2闪烁 5 分钟3闪烁/蜂鸣 5×54蜂鸣 3 次5蜂鸣 5 分钟6常亮 5 分钟7发光/振动 15 次10闪烁/振动 1 秒68蜂鸣 3 次数据帧组装与 CRC 计算calculate_crc函数按固定顺序拼接各字段pre sink_word rest_id station_id pager_n 0000000000 alert_type对应源码调用为crc_out ( calculate_crc( format(11184810, 06x) , format( 64557,04x), format(rest_id, 02x), 0, format(pager_n, 03x), format(alert_type, 02x) ) )逐段拆解preamble唤醒前缀11184810转十六进制为AAAAAA即一串连续的101010…比特用于让处于低功耗监听状态的寻呼机先同步上时钟sink_word同步字64557转十六进制为FC2D标识帧的起始边界rest_id餐厅 ID2 位 HEXstation_id固定为0pager_n寻呼机号码3 位 HEX固定段000000000010 个 0源码注释为固定填充alert_type告警类型2 位 HEX。校验和算法非常简单直观把所有字段逐字节解释为整数后累加取累加和对 255 的余数作为 CRC 字节sum0 for b in bin_array: sum int(b, 2) bin_array.append( format( ( sum % 255), 08b) )即CRC (Σ 各字节值) mod 255随后被追加到帧尾随帧一起发送。Manchester 编码让数据变成可同步的比特流encode_manchester先为每个寻呼机帧额外生成 50 组10共 100 bit的前导码用于唤醒寻呼机pre [] for x in range(0,50): pre.append(1) pre.append(0)随后把整个比特串逐位映射为 Manchester 码if( x 0): m.append(1); m.append(0) if( x 1): m.append(0); m.append(1)Manchester 编码的本质是用跳变携带信息逻辑 0 编码为10逻辑 1 编码为01每个比特中间必有电平跳变。这样接收端无需依赖绝对电平只需检测跳变即可恢复数据抗干扰能力强这正是 LRS 寻呼这类无线协议选它的原因。帧间隔离与落盘每个寻呼机帧编码完成后脚本在其后追加 100 个 0作为帧与帧之间的间隔gap[ data.append(0) for x in range(0,100) ]最后把 Manchester 码逐位写成 4 字节浮点数逻辑 0 写0.0001逻辑 1 写1.0输出到pager.binif d 0: handle.write(struct.pack(f, .0001)) elif d 1: handle.write(struct.pack(f, 1))这里输出的0.0001 / 1.0 浮点采样流正是为了直接喂给 GNU Radio 的File Source作为基带波形数据使用。GNU Radio 流图pager.bin 如何变成射频信号lrs_pager_grc 是使用 GNU Radio Companion 3.7.9 保存的流图工程XML 格式把脚本产出的pager.bin调制成 467.75 MHz 附近的射频信号。从工程参数可以还原出完整的信号链File Sourcefloat读取/home/tony/python/pager.bin并设置repeat: True——即持续循环播放保证寻呼机有足够时间被唤醒Repeat插值 3190将基带采样率从文件速率抬升到约 2 MS/ssamp_rate 2e63190即内插倍数Throttle按samp_rate限制流速防止 CPU 满载后发送速度失控Frequency ModulatorFM灵敏度 6.268把浮点电平转换为调频信号——电平 1.0/0.0001 正是 FM 调制器所需的频偏驱动Complex To Float复数转浮点适配后续链路File Sink同时把调制结果写入/tmp/current便于调试/转存Osmocom Sinkosmosdr发射频率设为4677500004800即 467.7548 MHz467.750 MHz 载波 4.8 kHz 频偏对应调制后的实际发射中心并配置了 IF/BB 增益。这套链路说明pager.bin本质上是未经调制的基带电平序列GNU Radio 流图负责完成 FM 调制与上变频最终由 HackRF 等 SDR 设备把信号辐射出去。HackRF 一键发射RAW 文件直接可用对于不想搭建 GNU Radio 环境的用户仓库直接提供了按餐厅 ID 拆分好的 RAW 文件RAW 目录 内共有 89 个覆盖pager_restid_1.raw到pager_restid_89.raw。这些文件会唤醒指定餐厅 ID 下的所有寻呼机即向该餐厅全部寻呼机广播呼叫。使用hackrf_transfer一行命令即可发射例如唤醒餐厅 ID 为 1 的所有寻呼机/usr/bin/hackrf_transfer -s 2000000 -t pager_restid_1.raw -f 467750000 -x 40参数含义参数值说明-s2000000采样率 2 MS/s与 GNU Radio 流图中的samp_rate一致-tpager_restid_1.raw待发送的 RAW 文件按需替换餐厅 ID-f467750000发射频率 467.750 MHz-x40发射增益dB可结合现场距离调整如需呼叫其它餐厅把文件名中的 ID 换成对应数值如pager_restid_5.raw、pager_restid_23.raw即可。与 Flipper Zero 结合467.750 MHz 的暴力呼叫实践上述 467.750 MHz 正是 LRS 寻呼系统的常用工作频率LRS_Pagers 目录的说明文档 明确给出了该频率在 Flipper Zero 上的落地方式标准版固件官方支持的 Sub-GHz 频段为 300–348 MHz、387–464 MHz 与 779–928 MHz依据 CC1101 芯片规格。而 467.750 MHz 落在 464–779 MHz 之间的官方不支持区域要在 Flipper Zero 上收发该频段需要修改固件RogueMaster、Unleashed 等定制固件通过extend_range与dangerous_settings配置文件放开限制文档同时强调超出官方支持频率工作可能损坏 Flipper 的射频功放AMP务必理解风险后再操作。仓库为此预置了可直接使用的配置文件与呼叫文件setting_userFlipper SubGhz 设置文件包含Frequency: 467750000条目并预置了针对寻呼系统的Pagers自定义预设Custom_preset_name: PagersCC1101 寄存器序列以02 0D 07 04 ...开头。该预设与下面两个.sub文件头部的Custom_preset_data完全一致jimilinuxguy_brutefrce.sub467.750 MHz、Pagers预设的 RAW 序列循环呼叫大量餐厅/寻呼机组合Brute_first_12_loop.sub针对前 12 个组合的循环 RAW 文件便于快速验证配套的thanks_jimilinuxguy/lrs-pager-systems-bruteforce子目录记录了该暴力呼叫方案的来源JimiLinuxGuy 的 flipperzero-lrs-pagers 项目移植。其中两个.sub文件的头部均为Filetype: Flipper SubGhz RAW File Version: 1 Frequency: 467750000 Preset: FuriHalSubGhzPresetCustom Custom_preset_module: CC1101 Custom_preset_data: 02 0D 07 04 08 32 0B 06 10 64 11 93 12 0C 13 02 14 00 15 15 18 18 19 16 1B 07 1C 00 1D 91 20 FB 21 56 22 10 00 00 C0 00 00 00 00 00 00 00RAW_Data 部分包含多段重复的脉冲串正负交替的时长序列正值为高电平持续时间、负值为低电平持续时间单位微秒通过 Sub-GHz 的Read RAW / Custom模式即可回放实现对 LRS 寻呼系统的循环呼叫。工作流总结与实用建议把整套资源串起来可以得到两条完整链路链路 ADIY 生成 GNU Radio适合研究运行 lrs_pager.py输入餐厅 ID、寻呼机号可多个、告警类型得到pager.bin浮点基带流含 Manchester 编码 帧间隙用 lrs_pager_grc 在 GNU Radio 中打开配置 SDR 设备后发射载波 467.750 MHz 附近。链路 B开箱即用适合实战从 RAW 目录 选择目标餐厅 ID 的.raw文件用hackrf_transfer -s 2000000 -t pager_restid_X.raw -f 467750000 -x 40发射或在 Flipper Zero 上配合 setting_user 的Pagers预设与 Brute_first_12_loop.sub、jimilinuxguy_brutefrce.sub 进行循环呼叫。几点实践提醒餐厅 ID 必须与目标寻呼机的基站设置一致否则寻呼机不会响应仓库的 RAW 文件按 ID 1~89 逐一预生成正是为了覆盖不同餐厅的配置467.750 MHz 不在 Flipper Zero 官方频段内使用前必须确认固件已放行并充分了解硬件风险发射前建议先用 RTL-SDR/HackRF 接收侧验证本地频点无其他占用并控制发射功率与时长避免干扰正常的寻呼业务。局限与说明lrs_pager.py为 Python 2 语法raw_input、print语句在 Python 3 环境下运行需先改写脚本中pager.bin的写出路径为当前目录固定文件名重复运行会覆盖告警类型与帧字段的映射来自脚本源码与注释不同批次寻呼机固件可能存在差异实际效果以现场验证为准本文所有结论均基于仓库内代码与配置文件的直接分析未验证的兼容性与效果不作断言。【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考