← 返回固件与二进制分析台

固件与二进制分析台

用于 OTA 前后核对文件、检查长度和校验、定位数据差异、提取报文或资源。所有处理在本机完成,原文件只读。

文件校验

选择 A,按需再选择 B,点击载入分析。每份最多 128 MiB;支持空文件。摘要显示大小与 CRC32/ISO-HDLC,展开文件信息可见 SHA-256、全文件字节熵及 00/FF 字节数。熵高低仅是统计,不能据此确认压缩、加密或固件是否损坏。Web Crypto 的 SHA-256 需要整份文件缓冲,因此设定明确大小限制,不用于任意大文件。

也可把文件拖到本页面任意位置:单文件载入 A,拖到文件 B 框则载入 B;两份文件按拖入顺序分配 A/B。拖入后自动载入,扩展名为 FW / UFW 时自动进入杰理结构分析,格式仍按文件内容判断。已有结果时可直接拖入新文件,旧任务会取消;文件夹、超过两份或超过大小限制的批次会拒绝,并保留当前文件。分析台尚未就绪时会阻止浏览器打开文件并提示重新拖入。

查看和解释

Hex 每页 256 字节,每行 8 字节。手机默认单文件视图,切换来源可看 A / B;启用并排 B 可对照。ASCII 列在手机上隐藏,给字节内容留出空间。偏移输入支持十进制、0x 十六进制,禁止负数、小数和尾随杂字符。可以并排显示 B,黄色表示同一绝对偏移字节不同,短文件末尾显示空位。点击字节查看最多 8 字节的有符号 / 无符号整数和浮点解释;可切换大小端。64 位整数用字符串显示以保留精度,NaN/Infinity 作为原始浮点解释显示。

杰理 FW / UFW 专项分析

载入文件后点击「杰理 FW 结构」。按内容识别容器,不靠扩展名判断。已用 AC701N / JL701N、AC707N(含双 Flash 和 FindMy 包)、AC791N、AC792N、AD14N、AD15N、AD24N,以及 SDK 附带的 AC700N、BD19 / AC632N、AC630N、AC636N、AC695X、AC696X、AD697N、AD698N 样本和公开 AC692X / AC695X 固件验证。SDK 来源包括 AC63 v0.9.2、v2.0.0、v2.4.0 与 AD24N v1.2.0 发布标签及本地其他版本;部分发布标签附带同一份固件,不代表不同构建,包内芯片标识与 SDK 目录名也可能不同。支持芯片名、容器头和目录 CRC、有效长度与对齐长度、内部文件列表、版本文本预览、New Flash 的 PID / VID、程序入口地址及应用 / 资源目录。

顶层目录和应用目录逐项验证头 CRC。取得经校验确认的 SFC 参数后,可解码并提取 app.bin 和资源文件。部分 UFW 外层辅助文件也使用 SFC 编码:以整个容器起点为基准,每 32 字节重置,CRC 对解码后的有效长度计算。对已支持的辅助类型,只有解码 CRC 匹配才提供解码文件下载;未匹配仍保留警告、原始字节和计算值。普通升级包条目及 Flash 压缩块保留原始存储形式。按钮与条目说明会标记下载形式。外层容器条目下载按有效长度去除存储对齐;内部文件按目录声明长度提取,该范围可能已经包含厂商打包时添加的填充;「原始位置 Hex」始终显示原 FW 的字节。

内部文件按固件与二进制、音频、图片与字库、配置、版本说明、授权证书和区域定义分组,默认折叠。组头显示条目数、长度合计和需检查数量;展开后查看完整路径、偏移与 CRC,并可选择文件提取或跳转 Hex。分类依据文件名后缀及目录区域标志,不代表识别了实际文件内容;长度合计可能包含嵌套范围,不能作为固件占用大小。可全部展开或折叠;搜索会自动展开匹配分组,清除搜索后恢复此前的展开状态。

杰理 WTG 提示音、tone 目录中的 SIN 与 IDX 索引归入音频资源;cfg 目录中的配置 BIN、cfg_tool.bin 和 params_flash.bin 归入配置。UI 升级资源、LOGOPACKRES、持久存储数据另行分组,启动 BOOT 文件归入固件。目录区域标志优先,不将区域定义当作可提取文件。

FindMy 包中类型 0xEC 的 file--authrun 授权辅助项归入授权与证书,支持经 CRC 验证后的 SFC 解码下载。目录可能出现截短后同名的成员,列表保留每项的独立偏移与选择身份,不按名称合并。校验或提取授权文件不等于验证其厂商授权有效性。

AD14N 包中类型 0x35 的 key2021.bin 同样归入授权与证书,经确认的 SFC 参数和解码有效长度 CRC 均满足时可下载解码字节;这不代表已验证其授权或与另一份 LKEY 文件等价。AC791N 等包可能含只有 32 字节头部的空目录,列表将其归为「空目录」,不提供文件下载,后续配置目录仍继续解析。头部不足或非空目录内容越界仍报错。

区域定义只显示条目数和地址/保留范围,不累计成文件大小;条目内的起点与声明长度用于解释目录字段,可能超出 FW 实际大小。实际文件长度和提取边界单独核对。

搜索可用空格组合条件,例如「flash2.bin tone_zh 0.wtg」同时限定 Flash、语言和文件名;完整文件名按路径中的同名项匹配,0.wtg 不会混入 10.wtg;「.bin」只筛文件后缀,不因父容器叫 flash.bin 而匹配所有文件。查看原始位置 Hex 时会选中起点,区间提取可直接使用该偏移。切回杰理结构保留原来的筛选、折叠与选中项;切换 A/B 来源或文件时不会复用另一份文件的结构。

容器数据 CRC 保留原始有效长度、含对齐填充范围的计算值;支持 SFC 容器解码时再列出解码有效长度和解码含填充值。SFC 辅助文件仅以解码有效长度判定通过,不将填充纳入其校验范围。参数必须来自经 CRC 验证的 Flash 配置;双 Flash 参数不一致或起点未对齐时不会猜测。未匹配可能来自数据损坏、其他编码或校验规则,不能仅凭容器结构通过认定所有数据通过。头 CRC、目录 CRC、越界和重叠单独展示;非法范围禁止提取。未知格式、缺少可验证参数或达到解析限制时会明确说明,已确认的信息仍可导出。

核对提取是否完整时,请使用同次打包的原始 app.bin:下载结构列表中的 app.bin,再将下载文件与原始输入分别载入 A/B,点击「比较 A 与 B」,确认不同字节数为 0,并核对长度和 SHA-256。同一目录里的同名文件可能来自不同构建,CRC 通过也不说明它与另一份 app.bin 相同。例如已核对的 AC792N 脚本生成 jl_isd.ufw,升级脚本复制到 upgrade/update.ufw,不会更新 tools/update.ufw;比较前应确认脚本实际输出路径与同批输入。

部分项目的「仅打包」流程可能复制了新 app.bin,却跳过基础 FW 生成,继续把已有 jl_isd.fw 转成 UFW。AC701N 的一份实际交付包出现过七字节编译日期/时间差异:留存 FW 与 UFW 的应用一致,独立提取及逆编码也一致,但旁边的原始 app 不配套;旧应用的独立原件仍未找到。即使差异仅在日期,也应保留并核对构建记录,不能据此认定同批。清单记录各文件哈希,不能单独保证它们来自同次构建。

还需核对原厂打包参数。例如官方 AD24N AEC 示例将 328,044 字节的原始 app.bin 按「-app app.bin 0x58000」补到 360,448 字节,目录中的 app.bin 因此多出 32,404 字节 FF。已与同批原始输入逐字节核对前缀,并验证全部新增字节及打包脚本。分析台会统计应用末尾至少 32 字节连续 00 / FF 的长度和文件内偏移;这是字节统计,不能单独证明它们属于填充,也不能推断原始输入长度。完整下载保留这些字节。如已掌握原始输入或打包规则,需要提取指定范围,请先下载解码文件并将其重新载入 A,再使用区间提取填写已核实的起点和长度。

支持这些样本不代表覆盖全部杰理芯片、SDK 或工具版本。没有验证厂商签名、KEY / LIC 授权或量产适用性,不提供回写、重新打包、烧录和反编译恢复 C 源码。压缩资源暂不自动解压、音频转码或编辑。CRC 通过只说明相应数据符合该校验规则。

搜索与差异

搜索支持 Hex 或 UTF-8 文本,最长 256 字节,跨分块边界匹配,也保留重叠匹配。显示全范围匹配总数,最多存储前 10000 个偏移,每次下拉展示 200 个,可用前后匹配按钮浏览;超限可改变搜索起点继续。

A/B 按绝对偏移逐字节比较,不自动移动内容来对齐。文件尾部多出的字节也计作不同。完整计算不同字节数与连续区间数量;报告最多保留前 10000 段,若超过会明确标记 truncated。下拉显示前 500 段,「下一处差异」继续扫描全部字节,不受该列表上限限制。插入一个字节可能导致后续大段变化,这是绝对偏移比较的定义。

区间提取与报文解析

选择来源 A/B,填写起点与长度,区间为 [起点, 起点+长度)。越界时拒绝生成,避免误以为截断文件完整;下载原始 BIN 不附加行尾或头部。点击「使用当前偏移作起点」可从所选字节提取。

最多 65536 字节可送到编码工作台,并继续配置报文字段、字节序、比例、帧头、长度和校验。本机 sessionStorage 暂存这段数据,进入编码页后即读取删除。不会自动上传到 HTTP/OTA 端点;如需发布固件,须在对应工具中主动选择文件。

报告和取消

报告包含文件校验信息、比较范围、搜索条件与偏移、计数和列表限制,不包含整份固件。取消会立即终止后台线程;所选文件保留,下一次操作会重新建立分析状态。刷新后需重新选择文件。对于未支持的包装格式,只提供通用核对,不解析签名或可执行指令;签名验证必须依据对应格式与公钥。

帮我完善这个工具

用着哪里别扭、想要什么功能、发现了 bug —— 都欢迎告诉我。

想让我回复你?直接邮件我:linsuwei_mic@outlook.com