ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Flipper Zero Unleashed Firmware LF RFID 钥匙文件格式(.rfid)完全指南:结构与协议详解

Flipper Zero Unleashed Firmware LF RFID 钥匙文件格式(.rfid)完全指南:结构与协议详解 Flipper Zero Unleashed Firmware LF RFID 钥匙文件格式.rfid完全指南结构与协议详解【免费下载链接】unleashed-firmwareFlipper Zero Unleashed Firmware项目地址: https://gitcode.com/GitHub_Trending/un/unleashed-firmware本文以 Unleashed Firmware 仓库中的 LfRfidFileFormat.md 为骨架结合 lib/lfrfid 目录下的实际读写实现与各协议源码系统讲解 LF RFID 钥匙文件.rfid的字段含义、版本约束、支持的钥匙类型以及文件在固件内部从解析到加载的完整流程。读完本文你将能够读懂、手工创建与校验任意一个.rfid文件并理解固件读取该文件时的校验规则与兼容策略。文件格式总览LF RFID 钥匙文件是 Flipper Zero及 Unleashed Firmware中低频 RFID 应用lfrfid用于持久化单张钥匙数据的存储载体。它基于固件通用的flipper_format序列化框架采用纯文本的键: 值结构扩展名为.rfid。一个典型的 EM4100 钥匙文件内容如下Filetype: Flipper RFID key Version: 1 Key type: EM4100 Data: 01 23 45 67 89文件的核心语义是每个文件仅保存一张钥匙single RFID key其协议类型由Key type字段决定具体数据由Data字段以十六进制字节序列给出。这一行为在源码中也有直接印证——lfrfid_dict_file.c 中的保存函数lfrfid_dict_file_save()对单个协议字典执行一次写出不包含多钥匙容器逻辑。格式字段详解名称描述取值说明Filetype文件类型标识固定为Flipper RFID key由源码常量LFRFID_DICT_FILETYPE定义见 lfrfid_dict_file.cVersion文件格式版本当前为1保存时写死加载时强制校验Key type钥匙协议类型必须匹配固件已注册的协议名称见下文支持类型表Data钥匙数据十六进制字节序列字节数由所选协议的DECODED_DATA_SIZE决定各协议不同Filetype 与 Version加载时的强校验在读取侧固件并非简单地按行解析而是对头部做了严格校验。lfrfid_dict_file.c 中的lfrfid_dict_file_load()依次执行flipper_format_read_header()读出Filetype与Version将Filetype与字符串常量Flipper RFID key比对不一致即中止将Version与1比对不等于 1 即中止。这意味着任何手工编辑文件时若改动Filetype或Version行固件将直接判定加载失败而不会尝试尽力解析。保存侧同样在 lfrfid_dict_file.c 固定写入Version: 1。Data长度随协议而变Data字段不是定长的。固件先通过Key type查找到协议对象再用protocol_dict_get_data_size()获取该协议的期望数据长度最后以该长度读取十六进制字节。因此同一格式、不同协议的文件Data行的字节数可以不同这是新手编辑文件时最容易出错的地方——多一个或少一个字节都会导致解析失败。支持的钥匙类型原文档给出了 17 种受支持类型。对照 lfrfid_protocols.h 的协议枚举与 lfrfid_protocols.c 的注册表可以确认固件实际注册的协议比文档表格更丰富共 23 个条目。以下是完整对照标注为文档既有条目与源码注册的额外协议文档中的类型全称对应源码模块数据长度字节EM4100EM-Micro EM4100protocol_em4100.c5H10301HID H10301protocol_h10301.c3IdteckIDTECKprotocol_idteck.c8Indala26Motorola Indala26protocol_indala26.c4IOProxXSFKantech IOProxXSFprotocol_io_prox_xsf.c4AWIDAWIDprotocol_awid.c9FDX-AFECAVA FDX-Aprotocol_fdx_a.c5FDX-BISO FDX-Bprotocol_fdx_b.c11HIDProxGeneric HIDProxprotocol_hid_generic.c6HIDExtGeneric HIDExtprotocol_hid_ex_generic.c12PyramidFarpointe Pyramidprotocol_pyramid.c4VikingVikingprotocol_viking.c4JablotronJablotronprotocol_jablotron.c5ParadoxParadoxprotocol_paradox.c6PAC/StanleyPAC/Stanleyprotocol_pac_stanley.c4KeriKeriprotocol_keri.c4GallagherGallagherprotocol_gallagher.c8GProxIIGuardall GProx IIprotocol_gproxii.c—此外源码注册表还包含文档表格未列出的协议变体可作为扩展参考EM4100_32、EM4100_16EM4100 的 32/16 时钟位率变体protocol_em4100.c 中的protocol_em4100_16_alloc与protocol_em4100_32_alloc分别设置clock_per_bit为 16 与 32Electraprotocol_electra.cIndala224protocol_indala224.c数据长度 28 字节Nexwatchprotocol_nexwatch.c8 字节Securakeyprotocol_securakey.c48 位即 6 字节Noralsyprotocol_noralsy.c。各协议的数据长度常量均以*_DECODED_DATA_SIZE形式定义在对应协议源文件中读者可自行对照确认。版本历史版本变更说明1初始版本当前版本当前固件仅支持版本 1加载逻辑在读到其他版本时直接失败见上文强校验流程。源码级读写流程解析保存流程保存由lfrfid_dict_file_save()lfrfid_dict_file.c完成步骤为通过flipper_format_file_open_always()以覆盖方式打开目标文件flipper_format_write_header_cstr()写入Filetype: Flipper RFID key与Version: 1flipper_format_write_string_cstr()写入Key type值为protocol_dict_get_name()返回的协议名称调用protocol_dict_get_data()取出协议数据再以flipper_format_write_hex()写入Data。源码中保留了两处 TODO 注释FL-3517计划未来在文件中补充协议类型与协议长度的注释说明这意味着当前格式的Data长度需要读者依据协议表自行判断。加载流程加载由lfrfid_dict_file_load()lfrfid_dict_file.c完成除头部强校验外其关键步骤为读取Key type字符串调用protocol_dict_get_protocol_by_name()在注册表中按名称精确匹配若匹配成功则按该协议的数据长度读取Data并写入协议字典若名称未匹配到任何协议则进入兼容回退逻辑见下文。兼容回退I40134 到 Indala26加载函数中存在一个向后兼容分支lfrfid_dict_protocol_fallback()lfrfid_dict_file.c当Key type为历史名称I40134时固件会按 Indala26 协议读取 3 字节数据再通过lfrfid_dict_protocol_indala_data()完成位重排并计算 Indala 校验和与 Wiegand 奇偶位最终映射为LFRFIDProtocolIndala26。这一设计保证了旧版固件导出的 Indala26 文件仍可在当前版本中加载属于格式演进中的兼容性细节。与 lfrfid 应用的联动.rfid文件的读写被应用层封装为两个接口位于 lfrfid.clfrfid_load_key_data()调用lfrfid_dict_file_load()加载文件若返回PROTOCOL_NO则判定失败并在show_dialog为真时弹出 Cannot load key file 错误对话框lfrfid_save_key_data()调用lfrfid_dict_file_save()保存失败时弹出 Cannot save key file 错误对话框。因此应用界面中读取钥匙/保存钥匙的操作最终都汇聚到本文描述的这套FiletypeVersionKey typeData格式上文件路径通常位于 SD 卡上的lfrfid应用目录中lfrfid_make_app_folder()会确保目录存在见 lfrfid.c。实用操作指引手动创建.rfid文件以创建一张 EM4100 钥匙为例新建文本文件并写入Filetype: Flipper RFID key Version: 1 Key type: EM4100 Data: 01 23 45 67 89保存为xxx.rfid放入 SD 卡的 lfrfid 应用目录后即可在设备上加载。需要注意结尾换行符不会影响解析flipper_format 按行读取Data的字节数与所选协议必须匹配EM4100 为 5 字节即 10 个十六进制字符每两个十六进制字符对应一个字节空格作为分隔符。常见加载失败原因排查现象可能原因报 Cannot load key fileFiletype或Version被改动Data长度与协议不匹配协议名合法但数据解析错误手工输入了协议不支持的字节数或数据来自其他格式文件旧版 Indala26 文件无法识别属兼容分支覆盖范围之外的非标准命名需手动改为Indala26总结.rfid文件格式虽然简单却承载了 20 余种低频 RFID 协议的读写兼容任务。其核心设计可概括为三点Filetype/Version双头部强校验保证格式演进可控Key type驱动协议查找、Data长度随协议动态变化I40134兼容分支体现对历史文件的迁移关怀。理解这套格式后无论是手工编辑钥匙文件、排查加载故障还是基于 lib/lfrfid 开发新的协议支持都能有的放矢。【免费下载链接】unleashed-firmwareFlipper Zero Unleashed Firmware项目地址: https://gitcode.com/GitHub_Trending/un/unleashed-firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表