1. qiling
一个强大的二进制分析框架,可以跨架构、跨平台,使用Python3实现。
- 跨平台:Windows, MacOS, Linux, BSD, UEFI, DOS。
- 跨架构:X86, X86_64, Arm, Arm64, MIPS, 8086。
- 多文件格式支持:PE, MachO, ELF, COM。
- 在隔离的环境(sandbox)里模拟执行机器代码
- 支持跨架构跨平台的调试功能,主要是GDBserver远程调试。
- 提供了高层次的API来自定义沙箱代码,用于分析恶意程序。
- 允许在各个级别执行钩子(instruction/basic-block/memory-access/exception/syscall/IO/etc).
在Unicorn engine的基础上开发.
有意思的几个点:
- 支持去控制流平展化:https://docs.qiling.io/en/latest/ida/#ollvm-de-flatten,使用起来看上去很简单。
- 有一个IDAPro插件,通过自定义python脚本来调试程序,不需要远程调试。
- 支持各个平台的二进制文件,每个平台都需要设置一个配置文件,这里是以
.ql
为后缀来命名的。
模拟执行的基本流程:
- 初始化:
ql = QiLing()
,针对执行的二进制程序类型(Binary,Shellcode),有不同的参数。 - 配置:一些属性的设置(fs_mapper、debug_stop、debugger、multithread、ipv6、bindtolocalhost、root)
- 执行:
ql.run()
需要注意的是,远程调试功能支持的是IDAPro7.4+,且调试时qiling需要在Linux上运行(由于unicorn的原因在Windows上不行),支持Python3.5+,我的配置还没这么好。
参考链接:
- https://docs.qiling.io/en/latest/howto/
- https://docs.qiling.io/en/latest/ida/#ollvm-de-flatten
- https://www.youtube.com/watch?v=xf0i9kfHKDI&ab_channel=ZeroNights
- https://kabeor.cn/%E4%BD%BF%E7%94%A8Qiling%20IDA%E6%8F%92%E4%BB%B6%E8%A7%A3%E5%AF%86Mirai%E7%97%85%E6%AF%92%E6%95%B0%E6%8D%AE/#%E5%88%9D%E5%A7%8B%E5%8C%96%E6%8F%92%E4%BB%B6
2. retdec
这是一个基于LLVM的可重定向的机器码反编译器,不受平台结构、操作系统、二进制执行文件格式限制。
- 支持的文件格式:ELF, PE, Mach-O, COFF, AR (archive), Intel HEX, and raw machine code
- 支持的架构:
- 32位:ntel x86, ARM, MIPS, PIC32, and PowerPC
- 64位:x86-64, ARM64 (AArch64)
怎么使用:
在线反编译服务:
RetDec IDA Plugin:
例子:
看上去RetDec反编译出来的源代码要更亲切得一点。
参考链接: