BroBordd/qmgd

GitHub: BroBordd/qmgd

从零构建的三星 Qmage 专有图像格式解码器,通过逆向工程实现对 .qmg 文件的帧级解码与导出。

Stars: 0 | Forks: 0

# qmgd 这是一个用于三星 Qmage (`.qmg`) 图像和开机动画格式的解码器(最终也会包含编码器)。该项目从零开始构建,通过对该格式进行逆向工程,并与真实的 FFmpeg 解码器补丁进行交叉验证。 Qmage 是一种专有的韩国图像编解码器(由 Quram 开发),三星将其用于开机/关机动画以及部分 UI 资源。目前没有官方的公开规范。本项目的解码器是 [Peter Ross 的 Qmage 解码器补丁](https://ffmpeg.org/pipermail/ffmpeg-devel/2024-November/336379.html)(于 2024 年 11 月提交给 FFmpeg)中格式逻辑的 C 语言移植版本,并已通过包括真实设备开机动画在内的实际样本文件进行了验证。 关于已确认实现与尚未实现的功能,请参阅 [`docs/FORMAT.md`](docs/FORMAT.md)。 ## 状态 - **解码:可用。** 头部解析、两条 `W2_PASS` 编解码路径(纯色、简单调色板),以及两条 `V16_SHORT_INDEX` 编解码路径(关键帧 + 动画帧间)均已实现,并已与真实文件进行了逐像素的验证。 - **编码:尚未开始。** 目标是开发一款工具,能够接收普通图像(如 PNG 等)并生成有效的 `.qmg` 文件。这是下一步的工作。 - 尚未实现:alpha/透明通道,以及少数几种较罕见的头部标志组合。具体列表请参阅 `docs/FORMAT.md`。 ## 构建 使用 CMake(推荐): ``` cmake -B build cmake --build build ./build/qmgd_dump samples/output.qmg out ``` 不使用 CMake: ``` sh build.sh ./qmgd_dump samples/output.qmg out ``` `qmgd_dump` 是一个诊断 CLI 工具:它会解码 `.qmg` 文件中的每一帧,并将每一帧输出为 `.ppm` 图像(`out_0.ppm`、`out_1.ppm`...),同时将每一帧解析出的头部字段打印到 stdout/stderr。PPM 是一种极其简单的未压缩格式——你可以使用 ImageMagick 进行转换(`convert out_0.ppm out_0.png`),或者直接用 GIMP 打开。 ## 仓库结构 ``` include/qmgd/ public headers (decode.h, bitreader.h) src/ library implementation (header parsing, both codec paths) tools/ qmgd_dump: CLI decode/dump tool built on top of the library docs/ format notes samples/ test .qmg files used during development tests/ (reserved for automated tests -- not set up yet) ``` ## 许可证 GPLv3(或更高版本)——详见 [`LICENSE`](LICENSE)。部分编解码逻辑源自 FFmpeg 采用 LGPL-2.1-or-later 许可证的 `qmagedec.c`/`qmagedata.h`,两者在许可证上是兼容的。 ## 致谢 - Peter Ross,感谢其原始的 FFmpeg Qmage 解码器补丁,本项目的编解码逻辑正是基于此构建的。 - Google Project Zero / Mateusz Jurczyk,其 2020 年的 Qmage 安全研究(CVE-2020-8899)首次公开记录了该容器格式的存在,尽管这早于对完整像素编解码器的逆向工程。
标签:Bash脚本, C/C++, 事务性I/O, 云资产清单, 图像处理, 多媒体工具, 客户端加密, 编解码器, 逆向工程