analysis: full official-app reverse artifacts (jadx sources, ghidra libcxsdk decomp, authoritative protocol conclusions) + docs

This commit is contained in:
ZXCLI
2026-09-10 02:51:37 +08:00
parent 623d62b641
commit 4ba98f62cd
68 changed files with 69493 additions and 5 deletions
+26
View File
@@ -350,6 +350,32 @@
- 预期日志:GetParameter1 resp=0x5BB5B55B len=60 → GetParameter2 → GetCaliInfo
cali size=…date=…)→ 下载(首次)或 cache hit → frames 递增。
## 用户反馈修复 第十七轮(2026-09-10,根因确认:命令字节序反转)
- [x] **第 16 轮日志**:官方序列下 GetParameter1 仍唯一有响应(60B BasePara1 完整
解析成功:serial=160043865 devType=3=core160 160x120@15fps),66c/66f/673 全部
800ms 超时 → 与"字节内容"相关而非流程顺序。
- [x] **根因**`MagProtocol.cmd4/cmd8``ByteBuffer.putInt` —— **默认大端**
官方 `GlobalFunc.intToByteArray` 是小端。66b=0x6BB6B66B 是回文数,大小端
字节相同,所以 16 轮调试里它是唯一能被相机识别的命令,完美掩盖了 bug;
其余命令(66c/66f/670/672/673/674)发出去的字节全是反的 → 相机不应答、
收到垃圾触发看门狗重启。PC 的 C 参考(mag160c_ir.c)是手工小端打包,所以
PC 上一直正常。
- [x] **修复**:cmd4 改手工小端打包(与官方 intToByteArray 逐字节一致);
cmd8 = cmd4(magic)+cmd4(param)。新增 MagProtocolTest 锁死
GetParameter2/StartTransferImg/SetShutterState 的线缆字节序。
- [x] 构建+单测全过;APK 已更新。提交 623d62b。
- [x] **按用户要求完成全量解包复核**(产物入库 analysis/):
- `analysis/jadx_magcx/`:官方普通版全量 Java 源码(64 文件);
- `analysis/ida/export/ghidra_dump/libcxsdk_decomp.txt`Ghidra 11.3.2 全量
反编译 libcxsdk.so1290 函数);
- `analysis/magcx_official_flow.md`:权威协议结论(命令表/BasePara/CaliInfo/
连接序列/FFC 逻辑/工具重跑命令)。
- native 复核:`Controller::StartProcess` 必须 `LoadCalibrationTable(caliPath)`
(官方 startProcess 失败会删缓存文件重下)→ 我们的 loadDdt 等价正确;
`Controller::PushFrame` 输入=整帧缓冲(28B头+像素+28B尾),与本管线一致。
- 预期:66b/66c/66f 全部有响应 → cali 下载(首次)→ 流出帧。
## 待办
- 真机USB实测(温度绝对值标定、FFC/录像/MDT保存端到端)——进行中: