SuperAPI AI 工具集

re-nim

安全与审计

查看项目

更新于 10-16 05:06

技能介绍

用途:用于 Nim 编译产物的逆向分析,识别运行时特征,还原字符串逻辑、异常路径与 GC/所有权关系。适用于 Nim 产物(含 NimMain、GC 符号、NimString 结构特征),以及 Nim/C 混合产物中区分 Nim 侧代码;不适用于纯 C/C++ 产物或仅需函数逻辑的场景。

主要能力:通过 readelf / llvm-nm 识别 Nim 特征符号,如 NimMain(入口链)、GC 符号(refc 的 nimGC_*、orc 的 nimIncRefCyclic 等)与 NimStringV2/NimStringDesc。入口链为 C main → NimMain → NimMainInner → NimMainModule → 业务 main,模块初始化按 import 依赖拓扑顺序。

字符串与序列:先判 GC 模式。orc/arc 下 NimStringV2 = {len, p: ptr NimStrPayload},NimStrPayload = {cap, data 内联};refc 下 NimStringDesc = {len, reserved, data[]}。字符内容在独立堆块,栈上只有句柄。可用 rawNewString 分配点、eqStrings 比较点定位关键逻辑。

异常与 GC:Nim 2.2.x 默认 goto 式异常表,无 setjmp;老默认(Nim 2.0 及以前)用 setjmp/longjmp(nimSetjmp)。定位 raiseExceptionEx 调用点可找到异常对象与 catch 分支。refc 用引用计数,orc/arc 显式 inc/dec 少,释放由编译期插入。

用法与限制:需准备 readelf / llvm-nm、Ghidra / IDA、可选 nim 编译器与 xxd、Python struct。注意 GC 版本差异导致布局不同;release 构建常内联 GC 符号;stripped 产物需按特征串兜底(如 @m*.nim.c);32 位产物结构尺寸减半;字符串内容在堆上,需按 cap 前缀定位 payload。