请 gpt 6 astra high 大人重新实现了一遍,就解决问题了。 https://github.com/asukaminato0721/shiinario_rs
下面是神谕:
我查了研究记录、抓取日志和 /tmp 的实际文件,还现场用 Capstone 和 Unicorn 验证了一遍小函数。这三件事是同一条分析流程:
加壳 EXE
↓ Wine 下运行,让壳自己解密
解密后的内存快照
├─ Capstone:查看 x86 汇编
├─ Ghidra:分析函数、交叉引用,导出伪 C
└─ Unicorn:执行原始机器码,验证推断
↓
用 Rust 实现行为
1. 有壳,怎么分析的?
针对这里的 RANDL_.exe,采用的是运行后抓内存。
Detect It Easy 特征识别的 HyperTech Crackproof。
具体过程是:
TracePe.exe,在 Wine 下启动原 EXE。OpenFileMappingA。0x0157b1dd 提前返回。工具就在这里停住,把映像内存保存下来。实际日志里有:
RESEARCH: supplied missing startup mapping and retried OpenFileMappingA
STACK HIT ip=0157b1dd
DUMP ... base=00400000 size=0117e000 unreadable_pages=0
CAPTURE COMPLETE; original game startup has not been validated
这时游戏还没正常进入窗口,但我们需要分析的引擎机器码已经解密出来了。
随后把快照整理成 Ghidra 能导入的 engine-analysis.exe。它只用于静态分析:没有完整重建导入表,因此不能把它当成可以直接运行的脱壳版游戏。
2. Capstone 和 Unicorn 具体怎么用?
两者分工很清楚:
| 工具 | 输入 | 得到什么 |
|---|---|---|
| Capstone | 机器码字节和地址 | 汇编指令 |
| Unicorn | 机器码、内存、寄存器初始状态 | 执行后的寄存器和内存变化 |