高级语言逆向¶
REVERSE · 知识域。各类高级语言编译产物的识别与还原。标签:C/C++逆向分析、C#逆向分析、Python逆向分析、Java逆向分析、Golang逆向分析、Rust逆向分析。
触发特征¶
- 反编译伪代码可读,但充满语言运行时特征(STL 模板爆炸、GC、协程)。
- 先判断语言 → 跳对应小节找"识别 → 还原 → 去噪"套路。
C/C++逆向分析¶
- STL 识别:std::string/vector/map 的反编译形态;重载运算符。
- vtable 重建:对象首 8 字节指向函数表;RTTI(
type_info/类名恢复)。 - 析构隐藏校验:
__cxa_atexit注册的析构里藏检查(Defcamp 2015)。 - 异常表结构;inline 后逻辑"消失"的还原思路(找内联前语义)。
- 模板实例命名还原(demangle);静态初始化顺序问题。
C#逆向分析¶
- dnSpy/ilspy 直接反编译源码级;混淆器:ConfuserEx(动态模块在构造函数断点 dump,Kaspersky 2018)、.NET Reactor、SmartAssembly。
- 反编译失败 → 运行时 dump(megaDumper/手写);反射调用跟踪。
- Two-stage XOR+AES 解码模式(Codegate 2013);NativeAOT 编译 → 按 C++ 思路分析。
Python逆向分析¶
- .pyc 反编译;PyInstaller 解包;Nuitka 编译产物(→ Python程序逆向 专页)。
Java逆向分析¶
- jadx/JEB 反编译;smali 层配合;混淆:ProGuard/R8(重命名还原靠调用关系)、Allatori/DexGuard。
- 关键:入口(Manifest)、反射调用、native 分界(→ Android程序逆向)。
- JVM 字节码层服务端题目:类加载器、字节码增强。
Golang逆向分析¶
- 识别:
go.buildid、runtime 符号、goroutine 调度器特征。 - 符号恢复:GoReSym、IDAGolangHelper;1.16+ pclntab 变化。
- 还原要点:接口(itab)、字符串结构(指针+长度)、slice 结构、defer/panic 伪代码形态;goroutine 与 channel 并发分析。
- 版本差异:1.18+ 泛型实例化命名;混淆(garble)后的处理。
- UUID patch 枚举 C2 客户端(BSidesSF 2026,恶意样本场景)。
Rust逆向分析¶
- 识别:panic 消息("RUST_BACKTRACE")、core/std 符号、mangling(rustc-**)。
- 符号去混淆:rust demangle;
panic字符串定位关键检查。 - 还原要点:所有权在汇编层的搬移(memcpy 多)、迭代器零成本抽象消失、
Option/Result判别。 - serde_json schema 恢复(结构体字段从序列化代码还原);xmmword 常量提取 IDAPython(Insomnihack 2019)。
- 编译器漏洞利用:#25860 生命周期逃逸(Hack.lu 2018);
#[no_mangle]libc 覆写绕 seccomp。
其他高级语言逆向¶
- AutoIt:编译为
a3x脚本(exe 自解包),Exe2Aut/MyAut2Exe 直接还原脚本源码;脚本本身是明文逻辑,还原后按脚本审计。 - Lua逆向分析:游戏/嵌入式内置解释器;字节码(
.luac)用 unluac 还原(注意 chunk 头版本),或 luadec;opcode 被魔改时按 dispatch 表重映射。 - Nim/Zig/Vala:新兴语言,特征是 runtime 符号(
NimMain/zig panic handler);按 C 系思路分析 + 符号恢复。 - 通用思路:先识别运行时特征(字符串/入口函数),找对应社区反编译工具,没有工具时按 C 系 ABI 人工还原。
其他语言¶
- Swift:demangle(swift-**);iOS 场景。
- Kotlin/JVM:Kotlin/Native vs Kotlin/JVM;协程状态机。
- Haskell:STG 闭包 + hsdecomp(hxp CTF 2017);GHC CMM 中间语言(N1CTF 2018)。
- D 语言:符号去混淆 + Phobos 库识别(CSAW CTF 2016)。
- OCaml/OPAL:函数式运行时特征。
- C++ 特殊:GLSL shader VM(ApoorvCTF 2026);决策树函数混淆(HTB WonderSMS)。