Flipper Zero Unleashed 固件 FindMy Flipper 应用实战:将 Flipper Zero 模拟为 AirTag / SmartTag 追踪信标 📅 发布时间:2026/9/13 3:31:37 👁 浏览次数: Flipper Zero Unleashed 固件 FindMy Flipper 应用实战将 Flipper Zero 模拟为 AirTag / SmartTag 追踪信标【免费下载链接】unleashed-firmwareFlipper Zero Unleashed Firmware项目地址: https://gitcode.com/GitHub_Trending/un/unleashed-firmwareFindMy Flipper 是 Unleashed 固件内置的一款蓝牙信标模拟应用它利用 Flipper Zero 的 BLE 扩展广播Extra Beacon能力让设备化身 Apple AirTag、Samsung SmartTag、Tile 乃至 Google FindMy Device 追踪标签。本文以应用自带的 README.md 为主体结合本仓库内applications/system/find_my_flipper/下的完整源码实现系统讲解从标签数据获取、固件内配置到后台追踪的完整流程帮助你掌握信标广播的底层机制与可调参数的真实取值范围。应用定位与核心能力该应用由 Matthew KuKanich 开发并合入 Unleashed 固件通过 application.fam 可以确认它的两个组成部分findmyappidfindmy类型为FlipperAppType.EXTERNAL的外部 FAP 应用入口函数findmy_main依赖gui栈大小 2KB属于 Bluetooth 分类图标为location_icon.png版本 3.5findmy_startupappidfindmy_startup类型为FlipperAppType.STARTUP仅面向 f7 目标入口findmy_startup负责在设备开机时自动恢复信标状态。概括而言它扩展了 Flipper Zero 的蓝牙能力提供以下三类核心功能对应 README 的 Features 部分标签模拟Tag Emulation克隆已有的 Apple AirTag / Samsung SmartTag 到 Flipper Zero或在不拥有实体 AirTag 的情况下生成 OpenHaystack 密钥对接入 Apple 的 FindMy 网络高度可定制Customization调节信标广播间隔与发射功率在可见性与续航之间取得平衡高效后台运行Efficient Background Operation针对后台持续广播做了优化低功耗地保持可追踪状态而不影响正常使用。从源码看应用实际上支持四种标签类型见 findmy_state.h 中的FindMyType枚举FindMyTypeApple、FindMyTypeSamsung、FindMyTypeTile、FindMyTypeGoogle主界面会据此显示对应的网络名称Apple / Samsung / Tile / Google Network。安装与固件要求README 明确给出了两种安装途径方案 A直接使用随固件发布/预编译的 FAP 文件findmy.fap方案 B使用fbt或ufbt自行编译。无论哪种方式都必须运行 dev开发版固件因为该功能依赖的额外 BLE 广播接口extra beacon仅在开发构建中开放README 提到当正式版固件开放该接口后此限制会解除。同时当前 main 分支固件已完整支持本应用包括全部图标资源。值得说明的是FAP 类型的findmy应用与 STARTUP 类型的findmy_startup是分离的FAP 提供图形界面供用户配置而 STARTUP 组件在开机阶段静默恢复信标二者共享同一份状态文件因此即使不打开应用只要此前开启了信标重启后依然会自动广播。第一步获取 SmartTag 数据无论采用哪种配置方式都需要先取得标签的身份数据MAC 地址与广播载荷 Payload。README 提供了两种获取途径。方式 A克隆现有标签推荐免额外服务端配置克隆方式的好处是无需 OpenHaystack 等额外服务端即可直接追踪具体步骤配对标签先让 AirTag 或 Samsung SmartTag 与你的手机完成配对进入丢失模式将标签远离其注册设备约 15 分钟使其进入可被发现的状态安装 nRF Connect从 Google Play 安装 nRF Connect 应用README 注明 Apple 版本不暴露所需的 Raw 数据作者仍在寻找替代方案过滤与扫描打开应用进入过滤器只保留目标标签品牌Apple/Samsung排除其余类型将 RSSI 阈值调到最低-40 dBm开始扫描等待 SmartTag 以 FindMy 设备形式出现抓取数据点击Raw或View Raw复制payload并记下标签的MAC 地址。抓取后立即取下标签电池防止密钥/MAC 轮换导致数据失效录入 Flipper Zero将 payload 与 MAC 输入到 FindMy Flipper 应用中。方式 BOpenHaystack 密钥生成无实体标签下载generate_keys.py脚本并在终端执行需要 Python cryptography 库python3 -m pip install cryptography按脚本提示输入最终会得到Private Key私钥、Public Key公钥、Payload载荷与MAC 地址Private Key用于从 Apple 接收位置报告必须妥善保管MAC Address需注册到 Flipper Zero 应用中打开应用进入配置菜单选择 register tag按提示输入 MAC 地址在随后弹出的载荷对话框中输入Payload保存。配置完成后设备即可用于 OpenHaystack 生态之后按 OpenHaystack 或 Macless Haystack 的流程继续。README 特别提示了兼容性限制使用 OpenHaystack 追踪需要 macOS低于 14 的版本MacOS 14 的邮件插件存在兼容性问题。如果你没有 Mac或系统已升级到 14 及以上可选用替代方案Macless HaystackREADME 推荐无需 Mac 的 OpenHaystack 替代实现FindMypython docker 后端一个用 Python 和 Docker 提供位置查询后端服务的项目。上述均为外部项目本文仅作名称引用具体请自行查阅对应项目文档。第二步在 Flipper Zero 上配置标签启动应用后进入配置菜单Config可以看到Import Tag From File从文件导入与Register Tag Manually手动注册两条路径。从文件导入.keys / .txtREADME 建议将生成的.keys文件放到 Flipper Zero SD 卡中导入。克隆方式下则可在 nRF Connect 中点击保存按钮导出.txt文件放到同一目录。从当前仓库源码看导入对话框的默认目录实际由 findmy_state.h 中的FINDMY_STATE_DIR决定即/ext/apps_data/findmyREADME 中描述的 AppsData/FindMyFlipper 目录为较早版本约定当前源码以apps_data/findmy为准导入前代码会通过storage_simply_mkdir自动创建该目录。findmy_scene_config_import.c 实现了两种文件格式的解析可直接反推文件规范nRF Connect (.txt) 格式文件名必须包含 MAC 地址格式形如XX-XX-XX-XX-XX-XX_YYYY-MM-DD HH_MM_SS.txtMAC 从文件名中解析并反转findmy_reverse_mac_addr文件首行形如YYYY-MM-DD HH:MM:SS.ms, XX dBm, 0xXXXXX程序定位 dBm, 0x标记后截取十六进制载荷载荷的十六进制字符长度必须与当前标签类型的数据长度严格匹配如 Apple/Samsung 为 31 字节即 62 个十六进制字符否则报 Wrong payload size。OpenHaystack (.keys) 格式文件内需包含以Public key: 或Advertisement key: 开头的行将该行的 Base64 内容解码为 28 字节公钥前 6 字节作为 MAC 地址第 0 字节置0b11000000高位后反转剩余字节按 Apple FindMy 广播模板填入载荷区data[29]存放公钥首字节的高 2 位版本信息。手动注册标签选择手动注册后应用通过 ByteInput 界面依次引导输入 MAC 地址findmy_scene_config_mac.c与广播载荷findmy_scene_config_packet.c最后保存生效。配置项详解广播间隔与发射功率README 在 Customization 一节概述了两项可调参数而 findmy_scene_config.c 给出了它们的精确取值范围配置项取值范围默认值说明Broadcast Interval广播间隔110 秒5 秒选项列表共 10 档索引 1 即为秒数Google 标签类型下仅 12 秒两档Transmit Power发射功率06 dBm6 dBm7 档可选叠加在 0 dBm 基准上即实际 -1~6 dBm 之外的 06 dBmShow MAC显示 MACYes / NoNo主界面是否明文显示 MAC 地址Tag Type标签类型Apple / Samsung / Tile / GoogleApple决定载荷长度与广告格式关于广播间隔源码注释引用了 Google FMDNFind My Device Network规范Google 要求广播间隔至少每 2 秒一次因此当标签类型为 Google 时间隔选项被收敛为 1s / 2s 两档见findmy_scene_config.c中对FindMyTypeGoogle的分支处理。参数如何真正生效设置项并非只改界面显示findmy.c 中的findmy_change_broadcast_interval会做范围校验110随后调用findmy_state_save_and_apply持久化并立即应用。真正落到硬件层的是 findmy_state.c 的findmy_state_applyGapExtraBeaconConfig config { .min_adv_interval_ms state-broadcast_interval * 1000, // 秒转毫秒 .max_adv_interval_ms (state-broadcast_interval * 1000) 150, .adv_channel_map GapAdvChannelMapAll, // 全信道广播 .adv_power_level GapAdvPowerLevel_0dBm state-transmit_power, .address_type GapAddressTypePublic, // 公共地址 }; memcpy(config.address, state-mac, sizeof(config.address)); furi_check(furi_hal_bt_extra_beacon_set_config(config));即间隔以秒为单位配置后乘以 1000 转为毫秒实际广播窗口为[interval×1000, interval×1000150]ms发射功率为 0 dBm 基准 用户设定值06 dBmMAC 使用公共地址类型。可见 README 所述优化可见性与续航底层正是通过这两个参数的硬件级配置实现的。此外应用还会实时将 Flipper Zero 的电量写入 Apple 广播载荷findmy_state_update_payload_battery读取电池满容量与剩余容量计算百分比超过 80% 置BATTERY_FULL(0x00)50% 以上BATTERY_MEDIUM(0x50)20% 以上BATTERY_LOW(0xA0)否则BATTERY_CRITICAL(0xF0)写入data[6]位置。这样在 FindMy 网络中即可反映设备电量。主界面操作与状态理解应用主视图由 views/findmy_main.c 绘制按键映射清晰按键功能OK切换信标广播开关Broadcast Active / InactiveLeft←进入后台运行模式界面提示 Press - to run in backgroundRight→打开 Config 配置菜单Up / Down直接调整广播间隔Ping IntervalBack退出应用主界面会展示当前网络名称Apple/Samsung/Tile/Google Network带锁形图标表示地址隐私、MAC 地址当 Show MAC 开启时以MAC: XX:XX:...格式显示并执行字节反转以符合实际广播地址、信标开关状态与当前 Ping Interval 秒数。各按钮回调最终汇聚到 findmy.c 中的状态变更函数findmy_toggle_beacon、findmy_change_transmit_power、findmy_set_tag_type、findmy_toggle_show_mac等每次修改都会save_and_apply保证重启后配置不丢失。后台运行与开机自动恢复机制README 强调应用针对后台运行做了优化对电池影响可忽略。这一承诺的实现分两个层面1. 界面层后台化主界面按 Left 键即可退到后台信标由蓝牙控制器独立持续广播不占用 CPU 持续运转2. 开机自动恢复这是最关键的机制。findmy_startup.c 作为 STARTUP 组件order1210在系统启动早期运行首先判断是否为正常启动模式非 DFU/恢复模式打开并关闭 BT 记录以等待蓝牙初始化完成并检查furi_hal_bt_is_gatt_gap_supported()core2 是否支持 GATT/GAP 扩展广播不支持则直接退出调用findmy_state_load读取状态若此前beacon_active为 true 则调用findmy_state_apply自动重启信标同时订阅存储卡挂载事件StorageEventTypeCardMount若开机时 SD 卡尚未就绪会在挂载完成后通过run_parallel再次尝试加载——因为状态文件存放在 SD 卡上。因此只要开启过一次信标之后的每次开机设备都会自动进入可追踪状态无需手动打开应用。状态文件与数据格式所有配置与标签数据持久化在 SD 卡的apps_data/findmy/findmy_state.txt路径定义见 findmy_state.h使用 FlipperFormat 键值格式文件头为FindMy Flipper State、版本 1。字段包括字段类型说明beacon_activebool信标是否启用broadcast_intervaluint32广播间隔秒transmit_poweruint32发射功率tag_typeuint32标签类型0Apple,1Samsung,2Tile,3Googleshow_macbool是否显示 MACmachex6 字节 MAC 地址datahex广播载荷数据findmy_state_load对旧配置做了向后兼容处理文件缺失tag_type或show_mac字段时自动回退默认值Apple / false。文件不存在时则采用默认状态间隔 5s、功率 6、默认 MAC66:55:44:33:22:11并构造一段空的 Apple AirTag 载荷模板——依次为长度0x1E、厂商数据标记0xFF、Apple 公司 ID0x4C 0x00、FindMy 类型0x12、长度0x19、电池状态字节以及 22 字节占位公钥和版本/hint 字节见 findmy_state.c。不同标签类型的载荷长度由findmy_state_data_size决定Apple 与 Samsung 为 31 字节Google 为 29 字节Tile 为 21 字节。导入时对载荷长度的严格校验正是基于这一函数。第三步开始追踪配置完成后根据标签来源选择追踪渠道README 的 Tracking 部分克隆的 Apple AirTag使用苹果 FindMy 应用克隆的 Samsung SmartTag使用 Samsung SmartThings 应用以及支持 SmartTag 追踪的各类浏览器端服务生成的密钥 OpenHaystack在 OHS 应用或 Macless Haystack 设置中追踪链接见上文。Mac 上使用 OpenHaystack 应用的完整配置步骤如果你拥有 MacREADME 给出了在 OpenHaystackOHS应用中导入自生成密钥的详细流程感谢 Wr3nch 提供的帮助创建新设备在 OpenHaystack 应用中创建一个新设备但创建后先不要立即部署deploy导出配置选择EXPORT以 all accessories as file 方式导出。为简化后续操作请确保导出前列表中只有一个条目。导出格式必须是 JSON修改 JSON 文件用文本编辑器打开导出的 JSON做如下替换左侧为 OHS 字段右侧为generate_keys.py脚本输出的值symmetricKey→ 设为Hashed adv key哈希广告密钥privateKey→ 替换为你的Private KeyoldestRelevantSymmetricKey→ 同样使用Hashed adv key另将以下两个属性改为trueisDeployed: trueisActive: true重新导入保存修改后将 JSON 重新导入 OpenHaystack调整 OHS 应用设置在 Mac 端 OpenHaystack 应用的顶栏中将时间设置从1 Day改为30min留出时间让新设置生效。完成上述步骤后设备即完成 OpenHaystack 侧的接入可在 OHS 应用内查看位置报告。兼容性与使用注意事项兼容性CompatibilityApple 设备通过 FindMy 网络进行 AirTag 追踪支持 Samsung SmartTag 追踪的任何设备包括浏览器前身 FindMyMobile。法律与隐私Legal and PrivacyREADME 明确声明本应用仅用于个人与教育用途用户有责任遵守当地关于追踪设备的隐私法律法规克隆与模拟追踪标签应当负责任地进行并尊重原设备的归属权。免责声明Disclaimer本项目与 Apple Inc. 和 Samsung 无任何隶属关系所有产品名称、Logo 与品牌均归其各自所有者。请负责任、合规地使用本应用。最后再次提醒克隆真实标签时抓取到 Raw 数据后应立即拆除标签电池以阻止密钥/MAC 轮换确保录入 Flipper Zero 的数据长期有效而通过generate_keys.py生成的密钥对则不存在此问题可随时重复生成。两者在 FindMy 网络中的追踪体验一致区别仅在于克隆方式无需搭建任何服务端。【免费下载链接】unleashed-firmwareFlipper Zero Unleashed Firmware项目地址: https://gitcode.com/GitHub_Trending/un/unleashed-firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考