Files
MAG160C/analysis/ida/README.md
T
ZXCLI 0bfb926892 完成官方管线全量逆向与 demo3 v5 复刻,清理仓库
- 逆向:Ghidra/IDA 全量反编译 CoreSDKLib.dll/ThermalSDK.dll/libthermalSDK.so/
  libcoresdk.so(ARM64)/libmagcore.so,导出 analysis/ida/export/
- 解码官方渲染管线:DDT 校准表加载->快门端点选择->Q12 插值->ref(4x type1 帧
  均值)->NUC 查表->盲元补偿->窗口->LUT1024 重建->2x 升采样->调色板
- 逐像素验证:NUC+盲元 0/19200、插值 0 误差、2x 0/76800、窗口一致
- demo3 v5:完整复刻官方管线(含 DDT 解析、FFC 状态机、快门温度驱动),
  修复 load_ddt 表错位导致的零像素问题
- 鬼影根因分析写入 analysis/reverse_20260813_full.md
- 心跳/恢复机制:analysis/session_state.md + tools/resume_rev.ps1
- 新增 tsdk_pair3 增强采集工具;历史工具归档 csdk/tools/legacy/;
  根目录抓帧残留删除,历史文档归档 analysis/history/
- csdk/README.md 完整使用文档;.gitignore/.gitattributes 补 LFS 规则
2026-08-13 23:16:12 +08:00

52 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# IDA / Ghidra 逆向工具链(2026-08-13 部署)
## 已安装工具
| 工具 | 位置 | 用途 |
|---|---|---|
| IDA Free 8.4 | `C:\Program Files\IDA Freeware 8.4\ida64.exe` | x86/x64 交互分析,F5 反编译(GUI 内),不支持批处理 |
| Ghidra 12.1.2 | `C:\Tools\ghidra_12.1.2_PUBLIC` | ARM64/任意架构批处理反编译,headless 自动建库 |
| Java | `C:\Program Files\Zulu\zulu-21` | Ghidra 需要,不在 PATH,需设 `JAVA_HOME` |
## 限制说明
- IDA Free 8.4 只支持 x86/x64(官方页面确认),不支持 ARM;不支持批处理模式(`-A` 直接报 "does not support the batch mode")。
- IDA Free 的 IDC 是半残的:`get_func`/`get_first_func`/`decompile()` 文本导出不可用(`decompile` 返回不透明对象,无法转文本)。可用的迭代 API 是 `get_next_func(ea)` / `get_prev_func(ea)`,配 `get_func_attr(ea, FUNCATTR_START/END)`
- IDA Free 反编译器(hexx64/hexarm64)已注册,但只能在 GUI 里按 F5 查看,无法脚本导出伪代码。伪代码批量导出请用 Ghidra。
## 目录内容
- `CoreSDKLib.dll.i64` / `ThermalSDK.dll.i64` / `libthermalSDK.so.i64`IDA 数据库(GUI 打开 .i64 即可,分析已跑完)。
- `export/coresdk_keyfuncs_disasm.txt`CoreSDKLib.dll 12 个关键函数反汇编 + xrefsNUC 0x180017200、盲元 0x180017330、温度端点 0x180016ae0、阈值插值 0x180016dd0、gain/off 插值 0x180016f10、表重建 0x18000c760、ref 推送 0x18000c620、平滑器 0x1800011a0、temporal 0x18001e920、FFC 0x18000a1d2/0x180002f50、温度 0x180010780)。
- `export/thermalsdk_dll/`ThermalSDK.dll 全量(368 函数)。
- `export/thermalsdk_so/`libthermalSDK.so 全量(5150 函数,带完整符号:`MAG_Initialize``MAG_NewChannel``ThermalController::*` 等)。
- `export/ghidra_dump/`Ghidra 伪代码全量导出。
- `all_functions_decomp_libcoresdk_arm64.so_00100000.txt`21.6MB7117 函数):ARM64 全量 C 伪代码,含 JNI`Java_cn_com_magnity_coresdk_MagDevice_*`)和温度函数(`ConvertInnerTemp2mC``GetTemperatureProbe``GetLineTemperatureInfo` 等)。
- `all_functions_decomp_libmagcore.so_00100000.txt`937KB841 函数)。
## 使用方式
### IDA GUI(交互分析 x86/x64
```powershell
Start-Process "C:\Program Files\IDA Freeware 8.4\ida64.exe" -ArgumentList '"C:\Project\MAG160C\analysis\ida\CoreSDKLib.dll.i64"'
```
打开 .i64 后:F5 看伪代码,按地址跳转 `G`,交叉引用 `X`
要重新对某个函数导出反汇编文本:Alt+F7 运行 `export_core_disasm.idc`(会重写 export/coresdk_keyfuncs_disasm.txt)。
新 DLL 建库:File→Open 选 .dll,默认选项,等 Idle 后 Alt+F7 运行 `export_all.idc`(全量导出到 export/),Ctrl+W 保存。
### Ghidra headless(批处理任意架构)
```powershell
$env:JAVA_HOME = "C:\Program Files\Zulu\zulu-21"
& "C:\Tools\ghidra_12.1.2_PUBLIC\support\analyzeHeadless.bat" "C:\Tools\ghidra_proj" mag160c -import "文件路径" -overwrite
& "C:\Tools\ghidra_12.1.2_PUBLIC\support\analyzeHeadless.bat" "C:\Tools\ghidra_proj" mag160c -process "文件名" -noanalysis -scriptPath "C:\Tools\ghidra_12.1.2_PUBLIC\scripts" -postScript ExportAllDecomp
```
导出脚本:`C:\Tools\ghidra_12.1.2_PUBLIC\scripts\ExportAllDecomp.java`(全函数伪代码 + 函数表,按程序名+基址命名输出到 export/ghidra_dump/)。
## 与旧 objdump 反汇编的关系
`analysis/disasm/` 下旧的 `coresdk_windows_disasm.txt`193k 行 objdump 输出)仍有效,与本目录 IDA 导出相互印证。地址基址一致:Windows DLL 0x180000000ARM64 .so 0x100000。