ARTICLE DETAIL

资讯详情

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

Momentum-Firmware LF RFID 密钥文件格式(.rfid)完全指南

Momentum-Firmware LF RFID 密钥文件格式(.rfid)完全指南 Momentum-Firmware LF RFID 密钥文件格式.rfid完全指南【免费下载链接】Momentum-Firmware Feature-rich, stable and customizable Flipper Firmware项目地址: https://gitcode.com/GitHub_Trending/mo/Momentum-FirmwareLF RFID低频射频识别模块是 Momentum-Firmware 中用于读取、保存、模拟和写入 125 kHz 低频 RFID 卡的核心功能。本指南以 LfRfidFileFormat.md 为骨架完整解析其.rfid密钥文件的格式规范、全部受支持的关键类型并结合仓库源码保存/加载实现、协议注册表、EM4100 协议实现深入讲解字段含义与底层原理。读完本文你将能够读懂、手工编写、校验任何.rfid密钥文件并理解固件读取与写入它的完整链路。文件格式总览LF RFID 密钥文件是一种纯文本格式基于项目的通用flipper_format序列化框架编写。每个文件恰好存储一把由Key type参数指定类型的 RFID 密钥文件扩展名固定为.rfid。标准示例一个典型的 EM4100 密钥文件内容如下Filetype: Flipper RFID key Version: 1 Key type: EM4100 Data: 01 23 45 67 89版本历史版本说明1初始版本Initial version当前固件只识别Version: 1。读取文件时若版本号不是1加载会直接失败——该校验位于 lib/lfrfid/lfrfid_dict_file.c 的lfrfid_dict_file_load()中if(!flipper_format_read_header(file, str_result, version)) break; if(furi_string_cmp_str(str_result, LFRFID_DICT_FILETYPE) ! 0) break; if(version ! 1) break;即文件头必须严格匹配Flipper RFID key源码中定义为LFRFID_DICT_FILETYPE宏且版本必须为1两者任一不满足即判定文件无效。格式字段说明名称说明Key type密钥协议类型即下表所列的协议名称Data密钥数据HEX 十六进制字节序列两个字段的详细规则如下Filetype固定为Flipper RFID key由 lib/lfrfid/lfrfid_dict_file.c 中的宏LFRFID_DICT_FILETYPE Flipper RFID key定义保存时写入、加载时校验。Version当前唯一合法值为1。Key type必须是下表 Type 列中的协议名称保存时通过protocol_dict_get_name()从协议注册表取协议名写入加载时通过protocol_dict_get_protocol_by_name()反向映射回协议 ID见 lib/lfrfid/lfrfid_dict_file.c。Data由flipper_format_write_hex/flipper_format_read_hex处理前者把内存中的字节数组按每字节两位十六进制、以空格分隔写出后者按同样规则读回实现见 lib/flipper_format/flipper_format.c。Data 的字节长度由协议类型决定不是任意的——加载时固件会按该协议在注册表中的data_size读取固定数量的字节见下文Data 长度与协议绑定小节。支持的密钥类型原文档给出了 18 种受支持的关键类型完整继承如下TypeFull nameEM4100EM-Micro EM4100H10301HID H10301IdteckIDTECKIndala26Motorola Indala26IOProxXSFKantech IOProxXSFAWIDAWIDFDX-AFECAVA FDX-AFDX-BISO FDX-BHIDProxGeneric HIDProxHIDExtGeneric HIDExtPyramidFarpointe PyramidVikingVikingJablotronJablotronParadoxParadoxPAC/StanleyPAC/StanleyKeriKeriGallagherGallagherGProxIIGuardall GProx II需要特别说明的是lib/lfrfid/protocols/lfrfid_protocols.h 中定义的LFRFIDProtocol枚举实际包含更多协议如EM4100/32、EM4100/16、Electra、Indala224、Nexwatch、Securakey、Noralsy、InstaFob等协议注册表lfrfid_protocols[]中也有对应实现。上表是原文档明确收录的类型清单在最新固件中你实际能保存/加载的类型以协议注册表为准可在 lib/lfrfid/protocols/ 目录下看到每个协议独立的.c/.h实现文件如protocol_em4100.c、protocol_h10301.c、protocol_fdx_a.c等。文件存放位置与命名规则默认目录/ext/lfrfidSD 卡根目录下的lfrfid文件夹定义于 applications/main/lfrfid/lfrfid_i.h 的宏LFRFID_APP_FOLDER。扩展名.rfid由宏LFRFID_APP_FILENAME_EXTENSION .rfid定义applications/main/lfrfid/lfrfid_i.h。自动命名保存新卡时固件会用协议名做前缀替换其中的/和空格为_并截断到 11 个字符再调用name_generator_make_auto()自动生成完整文件名见 applications/main/lfrfid/scenes/lfrfid_scene_save_name.c。文件校验保存场景使用validator_is_file校验器强制目标文件以.rfid结尾避免误存为其他扩展名。影子文件与.rfid相伴的还有.shdshadow文件用于记录原始读卡信息与密钥文件本身相互独立。在文件浏览器lfrfid.c中的browser_options中固件会把基础路径指向LFRFID_APP_FOLDER并将扩展名过滤器设置为.rfid见 applications/main/lfrfid/lfrfid.c因此你只能从该目录选择.rfid文件进行加载。保存与加载的底层实现.rfid文件的读写逻辑集中在 lib/lfrfid/lfrfid_dict_file.c 中对外只暴露两个接口声明见 lib/lfrfid/lfrfid_dict_file.hbool lfrfid_dict_file_save(ProtocolDict* dict, ProtocolId protocol, const char* filename); ProtocolId lfrfid_dict_file_load(ProtocolDict* dict, const char* filename);保存流程lfrfid_dict_file_save打开目标文件flipper_format_file_open_always覆盖写入写入文件头Filetype: Flipper RFID key与Version: 1通过protocol_dict_get_name()取得协议名写入Key type通过protocol_dict_get_data_size()取得该协议的数据长度分配对应大小的缓冲区再经protocol_dict_get_data()取出密钥原始字节调用flipper_format_write_hex以十六进制文本写入Data。可见Data 字段写入的字节数严格等于该协议注册的data_size保存与加载是对称的。加载流程lfrfid_dict_file_load打开文件并读取头部校验Filetype与Version必须是1读取Key type字符串调用protocol_dict_get_protocol_by_name()反查协议 ID若协议名无法识别返回PROTOCOL_NO则尝试兼容回退映射见下节仍失败则整体加载失败否则按该协议的data_size调用flipper_format_read_hex读回固定长度的密钥字节写入协议字典返回协议 ID。Data 长度与协议绑定不同协议的data_size各不相同。以 EM4100 为例其解码数据固定为 5 字节EM4100_DECODED_DATA_SIZE (5)见 lib/lfrfid/protocols/protocol_em4100.c所以示例文件Data: 01 23 45 67 89正好是 5 字节。手工编辑文件时务必保证 Data 字节数与协议匹配否则flipper_format_read_hex在严格模式下会读取失败。兼容性回退机制I40134 → Indala26源码中实现了一个有趣的兼容层当Key type写的是旧名称I40134时加载器不会直接报错而是通过lfrfid_dict_protocol_fallback()将其映射为LFRFIDProtocolIndala26见 lib/lfrfid/lfrfid_dict_file.c。该回退不仅改名还做了数据格式转换读取 3 字节原始数据后通过lfrfid_dict_protocol_indala_data()把 Indala 的位序重排为内部 29 位布局同时计算并写入 Indala 校验和indala checksum与 Wiegand 奇偶校验位even/odd parity再调用protocol_dict_set_data()写入字典。这保证了老版本固件创建的旧格式文件在新固件中仍可无缝加载。以 EM4100 为例从文件到协议实现结合 lib/lfrfid/protocols/protocol_em4100.c 可以看清.rfid文件中的数据在固件内部如何被使用协议注册const ProtocolBase protocol_em4100 { .name EM4100, .manufacturer EM-Micro, .data_size 5, ... }定义了协议名EM4100与 5 字节数据尺寸这正是文件中Key type与Data的来源protocol_em4100.c。编码与解码EM4100 使用 Manchester 编码。em4100_decode()从 64 位编码帧中解析出 9 位引导头 10 行数据每行 4 数据位 1 奇偶校验位最终还原为 5 字节em4100_can_be_decoded()会校验行奇偶与列奇偶任一校验失败即拒绝解码。显示渲染protocol_em4100_render_data()会把 5 字节数据格式化输出为FC: xxx Card: xxxxx、8 位十进制与 10 位十进制三种视图protocol_em4100.c方便在界面上直接核对卡号。写入支持protocol_em4100_write_data()同时支持 T5577 与 EM4305 两种可写标签把 5 字节数据重新编码为 64 位帧并拆分为块/字写入protocol_em4100.c这是模拟/写入功能的底层来源。实操要点速查手工创建密钥文件在 SD 卡/ext/lfrfid/下新建文本文件命名以.rfid结尾按上述格式填入Filetype、Version、Key type、Data四行即可注意每行用\n换行Data 为空格分隔的十六进制字节。修改现有密钥优先通过固件编辑流程lfrfid.c的lfrfid_scene_save_name_on_event会先删除旧文件再保存避免手工改动导致校验失败。Data 长度对齐Data 字节数必须等于对应协议的data_size如 EM4100 为 5 字节否则加载时报错。协议名大小写敏感Key type必须与协议注册名完全一致如EM4100、H10301、IOProxXSF、PAC/Stanley唯一例外是旧名I40134会通过回退机制自动转换为 Indala26。延伸阅读同目录下的其他文件格式文档NfcFileFormats.md、iButtonFileFormat.md、SubGhzFileFormats.md、InfraredFileFormats.md协议实现源码lib/lfrfid/protocols/ 目录下的protocol_*.c文件文件读写核心lib/lfrfid/lfrfid_dict_file.c通用序列化框架lib/flipper_format/flipper_format.h应用入口与常量定义applications/main/lfrfid/lfrfid.c 与 applications/main/lfrfid/lfrfid_i.h低频标签写入工具T5577 / EM4305 相关实现见 lib/lfrfid/tools/【免费下载链接】Momentum-Firmware Feature-rich, stable and customizable Flipper Firmware项目地址: https://gitcode.com/GitHub_Trending/mo/Momentum-Firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表