brnomt/FiioDcomp

GitHub: brnomt/FiioDcomp

对 FiiO Echo Mini 数字音频播放器固件的逆向工程项目,提供固件格式文档、Ghidra 分析配置以及解包与修补工具。

Stars: 0 | Forks: 0

# Fiio Echo Mini — 固件逆向分析 对 **Fiio Echo Mini** 固件的逆向工程,这是一款基于 **Rockchip RKnanoC** SoC(ARM Cortex-M3, Thumb-2)的数字音频播放器(DAP)。 ## 免责声明 本项目是一项独立的逆向工程成果。 本项目与 FiiO、SNOWSKY 或其任何子公司均无关联,也未得到他们的认可或支持。 此处提供的软件、文档和工具仅供研究、教育和互操作性目的使用。 刷入修改后的固件始终存在丢失数据或导致设备无法使用(“变砖”)的风险。使用本仓库中的任何工具或信息,风险由您自行承担。对于因使用这些工具或信息而造成的任何损坏、数据丢失或其他后果,作者不承担任何责任。 本仓库不提供固件镜像的下载。用户应从官方渠道获取固件。 ## 项目目标 - 记录 Echo Mini 的固件格式。 - 分析启动过程和内存布局。 - 开源分析与修补工具。 - 实现可复现的固件研究。 - 探索安全的固件修改与自定义功能。 ## 仓库结构 ``` firmware/ # Rockbox-style modular C project (decompiled) ├── firmware.h # Address space, ROM calls, segment defines ├── firmware/ │ ├── os/ # Event system, delays, OS primitives │ ├── filesystem/ # HifiFile I/O, FAT wrapper, media library │ ├── dsp/ # GOODE DSP chip, EQ processing │ ├── media/ # ID3v2/APEv2/Vorbis tags, format list │ ├── usb/ # USB DAC mode, mass storage │ └── power/ # Battery, charging, sleep timer ├── codecs/ # Audio codec interfaces (MP3/WMA/AAC/FLAC/APE/WAV/OGG/DSD) ├── apps/ │ ├── audio/ # MusicInit, MusicService, playback engine │ ├── ui/ # Display, themes, menu system │ ├── recorder/ # RecordWinSvc │ └── bluetooth/ # BT audio handler ├── drivers/ # LCD, keypad, DAC IC, flash, SD card └── resource/ # ROCK26IMAGERES table, bitmaps, fonts docs/ # Documentation ├── symbol-index.md # Labeled function reference (31 functions) ├── memory-map.md # Complete memory map + SoC pinout └── plans/echo-mini-decomp.md # Decompilation plan stock/ # Reference firmware (not distributed) ├── ECHO MINI V3.7.0/ # Firmware version 3.7.0 └── ECHO MINI 512M/ # 512 MB variant tools/ # Analysis and patching scripts Makefile # Build system (arm-none-eabi-gcc target) ``` ## 芯片:RKnano Echo Mini 运行在 **Rockchip RKnano** SoC 上,具有以下特征: - **CPU**: ARM Cortex-M(Thumb-2 ISA,小端序) - **SDK**: RKnano SDK 1.0 - **加载地址**: `0x0301E794`(主固件 RAM 基址) - **固件容器**: 包含 `RKnanoFW` magic 的多镜像格式 ## HIFIEC37.IMG 容器格式 固件镜像是一个带有 CRC 校验的多段容器: | 偏移量 | 大小 | 内容 | |--------|------|---------| | `0x000000` | 504 B | 外部头部:日期、芯片 ID、magic `0x06222026`、哨兵值 `0x76543210` | | `0x0001F8` | 358 KB | 段 1 — 重定位表(约 200 个段条目) | | `0x057820` | 173 KB | 段 2 — Bootloader:校验固件签名("fw1 Sign error!", "fw1 compare error!") | | `0x081A14` | 31.25 MB | **段 3 — 主固件**(可执行的 ARM Thumb-2 代码) | | `0x1FC41F8` | 245 KB | 段 4 — 填充(全零) | | `0x200000` | 4 B | CRC: `0x1EA1C309` | ## 段 3 — 主固件 这是在设备上运行的代码数据块。它以 `RKnanoFW` 头部开始,紧接着是 ARM Thumb 指令: ``` RKnanoFW → container magic 0x0301E794 → load address 0x00000052 → count/flags 10 B5 → PUSH {R4, LR} ← code entry point 04 46 → MOV R4, R0 00 F0 61 F8 → BL sub_xxx ``` `section_1` 中的段表描述了不同模块如何映射到内存中。它包括代码区域、数据、栈以及可能的按需加载覆盖层。 ## 设备功能(源自更新日志) 固件实现了以下功能: - **音频**: MP3, FLAC, M4A, OGG, DSD (DFF/DSF), WAV/RIFF 播放 - **DAC**: USB DAC 模式(48 kHz,免驱) - **均衡器**: 自定义 EQ + 预设(包括 "Retro EQ") - **蓝牙**: 播放与自动重连 - **显示**: UI 主题、专辑封面、同步歌词、屏保 - **控制**: 3 种按键模式(A/B/C),具有不同的音量/曲目切换配置 - **存储**: 带有 ID3 标签的媒体库、收藏夹、文件夹/艺术家/专辑/流派浏览 - **额外功能**: 可调增益、声道平衡、可配置的 DAC 滤波器 ## 如何使用提取的文件 ### 加载到 Ghidra 需要分析的主要文件是 `section_3_0x00081A14.bin`: 1. 打开 Ghidra,创建一个新项目 2. 导入二进制文件,配置如下: - **语言**: ARM → Cortex → little-endian → Thumb - **基地址**: `0x0301E794`(固件加载地址) 3. Ghidra 将自动反汇编 Thumb-2 指令 4. 使用 `section_1` 中的段表来区分代码和数据区域 ### 字符串搜索 二进制文件中包含可读的字符串,揭示了: - RKnano SDK 模块和函数名 - 支持的音频格式 - 错误和调试信息 - UI 文本字符串 ## 备注 - 固件**未加密** — 所有字符串和代码在二进制文件中均直接可见 - 该镜像是标准的 RKnano SDK 容器,而非 Fiio 专有格式 - 存在两种硬件变体:标准版和 512 MB 版(`MINIV370.IMG`) - Bootloader(段 2)实现了签名校验,但在正常启动过程中并未强制执行 ## 实用工具 - [Ghidra](https://ghidra-sre.org/) — 反汇编器/反编译器(原生支持 ARM Thumb) - `arm-none-eabi-objdump` — 快速命令行反汇编 - `strings` — 从二进制文件中提取所有可读字符串
标签:ARM架构, Ghidra, 云资产清单, 固件分析, 客户端加密, 嵌入式系统, 逆向工程, 音频播放器