完成官方管线全量逆向与 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 规则
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
# 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 个关键函数反汇编 + xrefs(NUC 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.6MB,7117 函数):ARM64 全量 C 伪代码,含 JNI(`Java_cn_com_magnity_coresdk_MagDevice_*`)和温度函数(`ConvertInnerTemp2mC`、`GetTemperatureProbe`、`GetLineTemperatureInfo` 等)。
|
||||
- `all_functions_decomp_libmagcore.so_00100000.txt`(937KB,841 函数)。
|
||||
|
||||
## 使用方式
|
||||
|
||||
### 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 0x180000000,ARM64 .so 0x100000。
|
||||
Reference in New Issue
Block a user