Usercorn 开源项目教程
项目介绍
Usercorn 是一个分析和模拟器框架,其基础类似于 qemu-user。它能够在不同的主机内核上运行任意二进制文件,这与 qemu-user 不同。Usercorn 在每条指令上记录完整的系统状态到一个可序列化的紧凑格式,支持回溯和重新执行。它非常适合用于调试和动态分析。Usercorn 提供了一个架构中立的、基于 Lua 的强大脚本语言和调试器,易于扩展和使用,可以构建自己的工具。Usercorn 可以用于模拟 16 位 DOS、32 位和 64 位 ARM/MIPS/x86/SPARC 二进制文件,支持 Linux、Darwin、BSD、DECREE 甚至 Redux 等操作系统。目前,x86_64 Linux 和 DECREE 是最受支持的客户系统。
项目快速启动
环境准备
Usercorn 依赖于 Go 1.6 或更新版本,以及最新不稳定版本的 Capstone、Unicorn 和 Keystone。可以通过以下命令安装这些依赖:
make deps # 需要 cmake
构建 Usercorn
更新 Go 包并构建 Usercorn:
make
运行示例
以下是一些运行 Usercorn 的示例命令:
usercorn run bins/x86_64 linux elf
usercorn run bins/x86 darwin macho
usercorn run bins/x86_64 darwin macho
usercorn run bins/x86 linux cgc
应用案例和最佳实践
调试顽固二进制文件
Usercorn 可以单步执行程序,即使 GDB 拒绝调试的二进制文件也能处理。例如,对于一个在启动时退出的二进制文件,Usercorn 可以单步执行进入程序。
调试不同架构和操作系统的二进制文件
无需 MIPS 盒子或 qemu-user,甚至不需要 Linux。Usercorn 可以模拟不同架构和操作系统的二进制文件。
编写工具
Usercorn 可以用于编写模糊测试器、静态分析器、重新编译器、内存和寄存器分析器等。例如,可以选择性地从二进制文件中调用函数,Usercorn 将映射二进制文件并模拟内核。
典型生态项目
Capstone
Capstone 是一个轻量级、多平台的反汇编框架,支持多种架构。Usercorn 使用 Capstone 进行反汇编。
Unicorn
Unicorn 是一个基于 QEMU 的多平台多架构 CPU 模拟框架。Usercorn 使用 Unicorn 进行 CPU 模拟。
Keystone
Keystone 是一个多架构汇编框架,支持多种架构的汇编和反汇编。Usercorn 使用 Keystone 进行汇编操作。
通过这些生态项目,Usercorn 能够提供强大的模拟和分析能力,适用于各种复杂的二进制文件分析任务。