CliffVale/sony-a6000-firmware-research

GitHub: CliffVale/sony-a6000-firmware-research

该项目对索尼 A6000 相机固件进行逆向工程研究,实现了官方固件解包、原始 NAND 提取、分区逐字节校验,并发现该相机内部运行 Android 系统。

Stars: 0 | Forks: 0

# 索尼 ILCE-6000 (A6000) 固件研究 **对消费级相机固件的全面逆向工程:从索尼官方 更新程序到逐字节验证的原始 NAND dump —— 包括对相机 内部 Android 运行时的发现。**
## 概要 | | 结果 | |---|---| | **相机** | 索尼 ILCE-6000 (A6000),固件 **3.21**,USB ID `054c:07c4` | | **SoC** | Qualcomm **CXD90014** — *未进行*加密签名(这就是该方法可行的原因) | | **阶段 1** | 官方更新程序 (EXE/DMG) → `.dat` → 解密的固件树 ✅ | | **阶段 2** | `pmca-console updatershell` → `pull /dev/nflasha` → **483 MB 原始 NAND dump** ✅ | | **验证** | 所有 5 个已发布的分区在 dump 中均**逐字节完全一致** ✅ | | **最大发现** | A6000 在**内部运行 Android** —— 该 dump 包含一个活动的 FAT16 `/data` 文件系统,其中包含 **5 个已安装的 app**、Wi-Fi 配置和设置备份 | 本仓库是**整理成文的方法论和发现**。此处**不**分发原始二进制文件和个人 相机数据(索尼固件是专有的; 相机 dump 包含个人数据)。请参阅 [docs/01-overview.md](docs/01-overview.md) 了解哪些内容是公开的,哪些是私下保留的。 ## 仓库内容 ``` docs/ ├── 01-overview.md What this project is, scope, safety ├── 02-phase1-unpacking.md Download + decrypt the official firmware ├── 03-phase2-raw-dump.md Dump the camera's NAND via updatershell ├── 04-verification.md Byte-identical partition verification ├── 05-region-map.md Full layout of the 483 MB raw dump └── 06-android-userdata.md The camera's Android runtime, discovered scripts/ ├── verify_partitions.py Re-check published partitions in a dump ├── carve_fat16.py Carve the Android FAT16 /data out of nflasha └── map_regions.py Map non-erased regions of a raw dump ACKNOWLEDGEMENTS.md Full credits for every tool & app referenced KNOWN_ISSUES.md Known bugs, caveats, and future work LICENSE ``` ## 主要结果 ### 1. 官方固件解包(无需相机) - `Update_ILCE6000V321.dmg` → `FirmwareData_ILCE6000V321.dat` (203 MB) - `fwtool.py unpack` (crypter **CXD90014**) → 完整的固件树: config、backup 区域、`0700_part_image` (nflasha3/5/7/15/16)、`0800_appli` (Android + 镜头 + 设置)、updater.img (VMLINUX.BIN / INITRD.IMG / busybox) ### 2. 从相机提取原始 NAND dump(非破坏性) - `pmca-console updatershell -m ILCE-6000` → `pull /dev/nflasha` → 483 MB - ⚠️ **已记录的陷阱**:相机要求物理**按下 OK 按钮** ("reset device OK") 才能进入更新程序模式 —— 否则 dump 会卡住。 ### 3. 验证:dump 与发布的固件完全匹配 | 分区 | dump 中的偏移量 | 大小 | 匹配 | |---|---|---|---| | nflasha3 | `0x01340000` | 10.96 MB | ✅ `diff_bytes = 0` | | nflasha5 | `0x03b40000` | 40.30 MB | ✅ `diff_bytes = 0` | | nflasha7 | `0x07c40000` | 3.17 MB | ✅ `diff_bytes = 0` | | nflasha15 | `0x08b40000` | 80.15 MB | ✅ `diff_bytes = 0` | | nflasha16 | `0x0ef40000` | 56.28 MB | ✅ `diff_bytes = 0` | 基本事实:相机固件 3.21 == 已发布的 3.21。 ### 4. 相机运行 Android —— 并且我们获取了它的 `/data` 在 dump 的 `0x14200000` 位置存在一个约 100 MB 的 **FAT16 文件系统** —— 即相机的 Android userdata。内部包含: - **已安装的 app(恢复了 APK):** - `com.github.ma1fo.openmemories.tweak` — **OpenMemories: Tweak**(开源越狱工具) - OpenMemories: AppStore、FocusBracket、BetterManual、TimeLapse (Jonas Juffinger) - **设置备份** `BK1.BAK` / `BK2.BAK`(每个 1.3 MB) - **Wi-Fi supplicant 配置**(WPS/Wi-Fi Direct,`device_name=ILCE-6000_*`) - **电池校准**文件、Dalvik 缓存、Sony 系统服务 ## 为什么这很重要 - A6000 是一款**完全由 Android 驱动的相机** —— 证实了现代 Sony ILC 在内部运行 Android,并在其上层附加了一个 scalar/launcher 层。 - **updatershell 路由**是一种干净、非破坏性的方式来 dump 这些设备, 无需电烙铁 —— 此处记录了物理按下 OK 按钮的陷阱,以便 其他人不会遇到同样的 5 分钟卡顿。 - 逐字节相同的验证证明了已发布的固件和刷入的 固件是相同的,并为区域映射奠定了基础。 ## 适用人群 - **Sony Alpha 相机所有者** —— 准确了解相机的 flash 上有什么,如何 以只读方式 dump 它,以及为什么需要物理按下 OK 按钮。 - **OpenMemories / 相机自制(homebrew)开发者** —— 一个关于 updatershell 路由的完整实例,以及用于开发的已记录 NAND 区域映射。 - **固件 / 嵌入式 Linux 研究人员** —— 一个关于 Qualcomm CXD90014 设备、更新程序提取和 NAND dump 取证的干净案例研究。 - **Android 取证人员** —— 一台直接从原始 NAND 中提取出 Android userdata 分区的消费级设备,并包含恢复脚本。 ## 自行复现 ``` # 阶段 1 — 解包官方固件(需要:python3、fwtool.py、7z) # (docs/02-phase1-unpacking.md 中的 URL — Sony 的支持网站在 curl 时返回 403; # 真实的 CDN URL 是从 Wayback Machine 快照中恢复的) # 阶段 2 — dump 你自己的相机(需要:Sony-PMCA-RE,相机处于 updater 模式) pip install git+https://github.com/ma1co/Sony-PMCA-RE pmca-console updatershell -m ILCE-6000 # press OK on the camera screen! # 然后,在 shell 内: # pull /dev/nflasha nflasha # pull /dev/bootloader boot1 # quit # 与已发布的固件进行验证 python3 scripts/verify_partitions.py nflasha /0700_part_image/dev/ ``` ## 许可证 本仓库中的文档和脚本:**MIT**(见 [LICENSE](LICENSE))。 此处引用的 Sony 固件和第三方 app 仍归其 各自所有者所有。**本仓库不分发任何受版权保护的固件二进制文件。**
标签:NAND闪存, Python, 固件逆向, 嵌入式系统, 无后门, 硬件研究, 逆向工具