chore: reorganize analysis/ by SDK lineage (linux/win/android) with README index, move legacy notes to history/, refresh root README, ignore .zcode/

This commit is contained in:
ZXCLI
2026-09-10 03:09:13 +08:00
parent 4ba98f62cd
commit e69a97436b
137 changed files with 123 additions and 62 deletions
+3
View File
@@ -33,3 +33,6 @@ Desktop.ini
# Python
__pycache__/
*.pyc
# ZCode 会话目录
.zcode/
+55 -52
View File
@@ -1,64 +1,67 @@
# MAG160C 热像仪逆向工程
# MAG160C 热像仪统一工程
MAG160C 热像仪(160×120USB VID 0x833C)的 USB 协议、官方 SDK 逆向、纯 C SDK
**官方渲染管线逐像素复刻**(demo3 v5)的完整工程。
MAG160C 热像仪(160×12015fpsUSB VID `0x833C`)的逆向工程与双端实现:
**C 参考实现**Linux/Windows,源自官方 PC SDK 逆向)与**安卓统一 App**
Kotlin + Compose,适配 Android 16,整合官方 4 个 App 的功能)。
## 从这里开始
## 从这里开始(新接手者阅读顺序)
新接手者按顺序阅读:
1. `analysis/reverse_20260813_full.md` — 官方管线 Ghidra 全量逆向 + 鬼影根因(最新
2. `analysis/session_state.md` — 当前会话状态与恢复点(心跳锚点
3. `交接_完整逆向工程说明_20260811.md` — 项目总交接(目录/环境/历史/失败路线
4. `analysis/protocol_spec.md` — USB 协议/帧/命令/温度规格
5. `csdk/README.md`**C SDK 完整使用文档**(构建/API/工具/测试)
6. `csdk/tools/mag160c_demo3.c` — 主程序(官方管线复刻)
## 当前状态(2026-08-13
- demo3 v5 已完整复刻官方渲染管线:DDT 校准表加载 → 快门驱动端点选择与
Q12 插值 → ref=FFC 窗口 4×type1 帧均值 → NUC 查表 → 盲元补偿 →
窗口 → LUT1024 重建 → 灰度 → 2x 升采样 → 官方调色板
- 逐像素验证:NUC+盲元 0/19200、插值 0 误差、2x 0/76800、窗口一致
- 同静态场景 gray 直方图与官方相关性 0.92(跨会话)
- 原"鬼影"问题的根因已定位并复刻官方行为(见 reverse_20260813_full.md §7
## 硬件
- 设备:MAG160C 热像仪,分辨率 160×12015 fps
- USB VID`0x833C`,常见 PID`0x0001`
- 帧:19200 个小端 `uint16`;端点:命令 `0x03`/响应 `0x82`/实时帧 `0x81`
## 快速入口
```powershell
# 编译 demo3(官方管线复刻)
gcc -O2 -w -DMAG160C_STATIC -I"csdk\third_party\libusb\win64" -I"csdk\include" -I"csdk\src" `
-o build-artifacts\mag160c_demo3.exe csdk\tools\mag160c_demo3.c `
csdk\src\mag160c_display.c csdk\src\mag160c_error.c `
csdk\third_party\libusb\win64\libusb-1.0.x64.a -lgdi32 -luser32
# 启动
Start-Process "build-artifacts\mag160c_demo3.exe" -WorkingDirectory "build-artifacts"
```
详细用法见 `csdk/README.md`
1. `docs/android_app/HANDOFF_DEVELOPMENT.md` — 安卓 App 总交接(必读)
2. `docs/android_app/session_state.md` — 会话心跳与待办(最新进度)
3. `analysis/README.md` — 逆向工程总目录索引(Linux/Windows/Android 三条线
4. `analysis/magcx_official_flow.md`**权威 USB 协议结论**(官方源码逐行核对版
5. `analysis/protocol_spec.md` — 早期 PC 端协议逆向(硬件验证记录
6. `csdk/README.md` — C SDK 文档(构建/API/工具/测试)
## 仓库结构
| 路径 | 用途 |
|---|---|
| `csdk/` | 纯 C SDK + 工具(见 `csdk/README.md`|
| `analysis/` | 逆向证据:反编译导出(`ida/`)、协议规格、交接文档、抓帧数据 |
| `IR_Camera_SDK-1.0.1/` | 原厂 Windows/Android/Linux SDK |
| `build-artifacts/` | 运行目录(demo3 exe、DDT 表、官方抓帧工具)|
| `docs/` `vendor-docs/` `app/` | 历史资料与模块文档 |
| `tools/resume_rev.ps1` | 会话恢复脚本(心跳配套|
| `android/` | **安卓统一 App**Kotlin + ComposeGradle 工程,package `com.mag160c.thermal`):实时预览、拍照 MDT、录像、媒体库、离线分析、PDF 报告、任务巡检、设置 |
| `csdk/` | 纯 C SDK(官方管线 C 复刻:渲染/温度/IR 会话/FFC 调度,见 `csdk/README.md`|
| `analysis/` | 逆向工程总目录(Linux/Windows/Android 三条 SDK 线的解包产物与结论,见 `analysis/README.md`|
| `IR_Camera_SDK-1.0.1/` | 原厂 Windows/Android/Linux SDK 原始包 |
| `app/` | 官方安卓 APK 存档(普通版/专业版/ThermoScope/demo|
| `build-artifacts/` | 构建产物(安卓 APK、PC demo3、DDT 标定数据|
| `docs/android_app/` | 安卓 App 交接文档(HANDOFF / session_state / 逆向功能总表)|
| `vendor-docs/` | 厂商资料 |
| `tools/` | 会话恢复脚本 |
历史文档(早期 findings/progress/task_plan、根目录抓帧残留)已归档到
`analysis/history/`;早期探索工具源码在 `csdk/tools/legacy/`
## 快速入口
### 安卓 App(构建/测试)
```powershell
cd C:\Project\MAG160C\android
$env:JAVA_HOME = "C:\Tools\jdk-21"
.\gradlew.bat :app:assembleDebug test --no-daemon
# 产物:build-artifacts\mag160c-app-debug.apk
```
### C 管线复刻 demo3
```powershell
gcc -O2 -w -DMAG160C_STATIC -I"csdk\third_party\libusb\win64" -I"csdk\include" -I"csdk\src" `
-o build-artifacts\mag160c_demo3.exe csdk\tools\mag160c_demo3.c `
csdk\src\mag160c_display.c csdk\src\mag160c_error.c `
csdk\third_party\libusb\win64\libusb-1.0.x64.a -lgdi32 -luser32
Start-Process "build-artifacts\mag160c_demo3.exe" -WorkingDirectory "build-artifacts"
```
## 硬件
- 设备:MAG160C 热像仪机芯,160×120 @15fps
- USBVID `0x833C` PID `0x0001`;端点 0x03 命令 / 0x82 响应 / 0x81 图像流 /
0x84 标定文件 / 0x05 标定上传
- 协议细节:`analysis/magcx_official_flow.md`(权威)
## 里程碑
- 2026-08:官方 PC SDKlibmagcore/CoreSDKLib)逆向 + C 管线逐像素复刻(demo3)
- 2026-09-06~09:安卓 App(纯 Kotlin,无 NDK):渲染管线移植(逐字节验证)、
USB 层(官方协议 Java 源码逐行复刻)、相机式 UI、拍照/录像/媒体库/分析/PDF
- 2026-09-10:真机联调打通(根因:USB 命令字节序反转,已修复并用单测锁死);
官方 App 全量解包入库(jadx + Ghidra
## 仓库说明
仓库包含官方 SDK、第三方依赖、二进制样本和抓帧数据。部分内容可能受原厂
许可限制,仅用于本项目的互操作性研究和设备调试。大型文件使用 Git LFS。
仓库包含官方 SDK、反编译产物、二进制样本和抓帧数据。部分内容可能受原厂许可
限制,仅用于本项目的互操作性研究和设备调试。
+55
View File
@@ -0,0 +1,55 @@
# analysis/ — MAG160C 逆向工程总目录
> 本目录汇总了 MAG160C 相关的**全部逆向工程材料**,覆盖三条产品线:
> ① Linux SDKlibmagcore.so)② Windows SDKCoreSDKLib.dll / ThermalSDK.dll
> ③ 官方安卓 AppMAG-Cx 普通版:Java 层 + libcxsdk.so / libcoresdk.so)。
> 阅读顺序建议:先读本 README → `magcx_official_flow.md`(权威协议结论)
> → 按需深入各分目录。
## 顶层文件(结论与工具)
| 文件 | 内容 |
|---|---|
| `magcx_official_flow.md` | **权威协议结论**2026-09-10,官方 Java 源码逐行核对版):命令表、BasePara/CaliInfo 布局、连接序列、标定文件下载、FFC 逻辑 |
| `protocol_spec.md` | 早期 PC 端逆向协议(libmagcore/CoreSDKLib2026-08-10 硬件验证),历史参考 |
| `gen_kotlin_tables.py` | 生成 `OfficialTables.kt`palette256/T2E/E2T)的脚本 |
| `render_offline.c` | PC 端参考渲染管线(gcc 编译),Kotlin 移植的逐字节差分基准 |
| `official_render_frame.rgb` / `official_t2e_table.txt` / `t2e_table.json` / `test_ref_stats.txt` | PC 差分验证数据 |
| `revtools.py` / `reverse_tools/` | 逆向辅助脚本 |
## sdk_re/ — 按 SDK 产品线归档
### `sdk_re/linux_libmagcore/` — Linux SDKlibmagcore.so.2.1.1x86-64
- `magcore_disasm.txt`(全量反汇编)+ `magcore_defined.txt` / `magcore_dynsyms.txt` / `magcore_relocs.txt`
- `disasm_*.txt`:关键函数级反汇编(LinkCameraEx / StartProcessImage / Raw2Temperature /
ConvertResponse2Temp / ReviseTemperature / ffc / frameParse / AccumulatorPushFrame 等)
- `all_functions_decomp_libmagcore.so_00100000.txt`Ghidra 全量伪代码
### `sdk_re/windows_sdk/` — Windows SDKCoreSDKLib.dll / ThermalSDK.dll
- `refs_CoreSDKLib.dll.txt` / `exports_decomp_CoreSDKLib.dll.txt` / `keyfuncs_decomp_CoreSDKLib.dll.txt`
/ `callers_decomp_CoreSDKLib.dll.txt` / `coresdk_keyfuncs_disasm.txt` / `coresdk_windows_disasm.txt`
- `exports_decomp_ThermalSDK.dll.txt` + `thermalsdk_dll/` + `thermalsdk_so/`ThermalSDK 包装层)
### `sdk_re/android_app/` — 官方安卓 App(普通版 MAG-Cx,本管线上真机跑通的代码)
- `jadx_magcx/`**全量 Java 源码**jadx 1.5.1)。核心:`cn/com/magnity/magnitycx/sdk/UsbCommunication.java`
USB 协议真身)、`P2DCmd.java`/`D2PCmd.java`(命令表)、`DeviceController.java`JNI 封装)
- `libcxsdk_decomp.txt`Ghidra 全量伪代码(libcxsdk.so1290 函数;Controller::StartProcess /
PushFrame / LoadCalibrationTable 已核对)
- `all_functions_decomp_libcoresdk_arm64.so_00100000.txt`libcoresdk(arm64) 全量伪代码
(专业版/网络路径,CNetComm 命令层)
- `coresdk_arm64_defined.txt`ARM64 库符号表
## history/ — 过程记录(按时间)
`task_plan_20260714``findings_20260810` / `progress_20260810` / `handoff_20260810..13` /
`交接_完整逆向工程说明_20260811`PC SDK 全流程报告)→ `reverse_20260813_full` /
`progress_reverse`。历史参考,协议细节以 `magcx_official_flow.md` 为准。
## preview/ — 渲染验证截图
demo2_v3..v7 系列(管线复刻过程对照)、preview_*.png(安卓 UI 验证)。
## 与代码库的关系
- `csdk/src/`:依据 Linux SDK 逆向写出的 C 参考实现(渲染/温度/IR 会话/FFC 调度),
Kotlin 管线(android/app)与其逐字节差分验证一致。
- `android/app/src/main/java/com/mag160c/thermal/usb/IrSession.kt`:官方
UsbCommunication.java 的 Kotlin 等价实现(含小端命令、800ms 超时、0x84 标定下载)。
- `docs/android_app/HANDOFF_DEVELOPMENT.md` §4.2 指向本目录。
+4 -4
View File
@@ -1,10 +1,10 @@
# MAG160C 官方 MAG-Cx 完整逆向结论(2026-09-10jadx + Ghidra 全量解包)
> 产物来源:
> - Java 层:`analysis/jadx_magcx/`jadx 1.5.1 反编译官方普通版 MAG-Cx.apk 全量源码)
> - Native 层:`analysis/ida/export/ghidra_dump/libcxsdk_decomp.txt`
> - Java 层:`analysis/sdk_re/android_app/jadx_magcx/`jadx 1.5.1 反编译官方普通版 MAG-Cx.apk 全量源码)
> - Native 层:`analysis/sdk_re/android_app/libcxsdk_decomp.txt`
> Ghidra 11.3.2 headless 全量反编译 lib/armeabi/libcxsdk.so1290 函数)
> - libcoresdk(arm64) 反编译已在 `analysis/ida/export/ghidra_dump/`(专业版/网络路径)
> - libcoresdk(arm64) 反编译已在 `analysis/sdk_re/android_app/`(专业版/网络路径)
> - 本文结论全部来自以上反编译源码,与真机日志交叉验证(vivo V2509A, Android 16)。
## 1. USB 协议权威版(以官方 Java UsbCommunication.java 为准)
@@ -96,7 +96,7 @@ fpaTemp 在尾 +8devType0/5/6/3),camTemp=fpaTemp-500。
## 3. 工具与环境(2026-09-10 本机)
- jadx 1.5.1C:\Tools\jadx-1.5.1(反编译产物 C:\Tools\jadx-out,已拷贝入库
analysis/jadx_magcx/
analysis/sdk_re/android_app/jadx_magcx/
- Ghidra 11.3.2C:\Tools\ghidra_11.3.2_PUBLIC;工程 C:\Tools\ghidra_proj\MagCX
全量反编译脚本 C:\Tools\ghidra_scripts_user\DumpAllDecomp.java
- 重跑命令(PowerShell/cmd):

Some files were not shown because too many files have changed in this diff Show More