用途:当目标无法在本机运行(架构/OS 不匹配、无硬件、依赖缺失)时,用模拟执行完成单函数/单代码段隔离执行、脱壳辅助(摘出壳内解密例程模拟取明文)、反调试绕过与确定性任务验证。需要完整 OS 语义(多线程、网络栈、完整 API)时不用,应转 QEMU 全系统或沙箱实跑;仅需动态调试也不用。
工具与安装:unicorn(pip install unicorn,验证 python3 -c "import unicorn; print(unicorn.version)",2.x 为当前线,钩子回调签名与 1.x 一致)、qiling(pip install qiling,验证纯 import;pip wheel 不含 examples/ 与 rootfs,跑示例需 git clone 官方仓库)、capstone(pip install capstone)。均为 pip 包,Linux/macOS/Windows 通用。
用法要点:Unicorn 最小框架需先 mem_map(页对齐)再 mem_write,必须设栈寄存器,emu_start(begin, until) 的 until 需覆盖代码结束地址;Qiling 用 Qiling(["rootfs/..."], "rootfs/...") 后 ql.run(),文件/系统调用由 Qiling 接管。钩子用 hook_add(UC_HOOK_CODE/MEM_WRITE/MEM_UNMAPPED) 或 Qiling 的 hook_address/hook_mem_*;脱壳常用 hook_mem_write 命中目标区段取明文。Qiling 1.1.x+ 支持 ql.save/restore 快照;Unicorn 需手工保存内存段与寄存器。产物做 sha256 存档并沙箱内复跑核对。
限制与陷阱:Unicorn 不模拟内核,遇 syscall 会失败,应换 Qiling 或 hook 掉 syscall;样本可能用 CPUID/rdtsc/API 探测察觉模拟环境,需先静态定位检测点再 hook 或 patch,并与真实沙箱交叉验证;未映射/只读页会报内存权限错误,需补 mem_map 与 mem_protect;模拟不等于真实执行,时序/多线程/网络类任务应转 QEMU 或真实沙箱;Android .so 建议优先 unidbg,iOS 可用 Chomper;依赖真机环境的能力可考虑设备侧函数 HTTP 服务化。版本差异与内存/架构边界见该技能 gotchas 文档。