
qiling v1.4.11
一个真正的可插桩二进制仿真框架
Qiling 是一个高级二进制模拟框架,具有以下特性:
- 模拟多平台:Windows、macOS、Linux、Android、BSD、UEFI、DOS、MBR。
- 模拟多架构:8086、X86、X86_64、ARM、ARM64、MIPS、RISC-V、PowerPC。
- 支持多种文件格式:PE、Mach-O、ELF、COM、MBR。
- 通过 Demigod 支持 Windows 驱动 (.sys)、Linux 内核模块 (.ko) 及 macOS 内核 (.kext)。
- 在隔离环境中模拟并沙箱化代码。
- 提供完全可配置的沙箱。
- 提供深入的内存、寄存器、操作系统级别及文件系统级别 API。
- 细粒度插桩:允许在各级别进行钩子(指令/基本块/内存访问/异常/系统调用/IO 等)。
- 提供虚拟机级别 API,例如保存和恢复当前执行状态。
- 支持跨架构和跨平台的调试能力。
- 内置调试器,具备逆向调试功能。
- 允许对正在运行的代码(包括已加载的库)进行动态热补丁。
- 真正的 Python 框架,便于在此基础上构建自定义的安全分析工具。
Qiling 也已在多个国际会议上亮相。
2022 年:
2021 年:
2020 年:
- Black Hat, 欧洲
- Black Hat, 美国
- Black Hat, 美国 (Demigod)
- Black Hat, 亚洲
- Hack In The Box, Lockdown 001
- Hack In The Box, Lockdown 002
- Hack In The Box, Cyberweek
- Nullcon
2019 年:
Qiling 基于 Unicorn Engine。
访问我们的 网站 获取更多信息。
许可证
本程序为自由软件;您可以依据自由软件基金会发布的 GNU 通用公共许可证(GPL)第二版或(根据您的选择)任何后续版本的条款重新分发和/或修改它。
Qiling 与其他模拟器对比
有许多开源模拟器,但与 Qiling 最接近的两个项目是 Unicorn 和 QEMU user mode。 本节将说明 Qiling 相对于它们的主要差异。
Qiling vs. Unicorn 引擎
Qiling 构建于 Unicorn 之上,但两者本质不同。
- Unicorn 仅是一个 CPU 模拟器,专注于模拟 CPU 指令,并能理解模拟器的内存。除此之外,Unicorn 不了解更高级别的概念,例如动态库、系统调用、I/O 处理或 PE、Mach-O、ELF 等可执行格式。因此,Unicorn 只能模拟原始机器指令,而缺乏操作系统上下文。
- Qiling 被设计为更高级的框架,它利用 Unicorn 模拟 CPU 指令,但能理解操作系统:它具有可执行格式加载器(目前支持 PE、Mach-O 和 ELF)、动态链接器(因此可以加载和重定位共享库)、系统调用和 I/O 处理程序。因此,Qiling 可以在不依赖原生操作系统的情况下运行可执行二进制文件。
Qiling vs. QEMU user mode
QEMU user mode 与我们的模拟器所做的工作类似,即以跨架构的方式模拟整个可执行二进制文件。 然而,Qiling 在以下几个方面与 QEMU user mode 有显著差异:
- Qiling 是一个真正的分析框架,允许您在此基础上构建自己的动态分析工具(使用 Python)。而 QEMU 仅是一个工具,而非框架。
- Qiling 可以执行动态插桩,甚至可以在运行时对代码进行热补丁。QEMU 两者都不支持。
- Qiling 不仅支持跨架构,还支持跨平台。例如,您可以在 Windows 上运行 Linux ELF 文件。相比之下,QEMU user mode 只能运行相同操作系统的二进制文件,例如 Linux 上的 Linux ELF,这是因为其将模拟代码的系统调用转发到原生操作系统的方式。
- Qiling 支持更多平台,包括 Windows、macOS、Linux 和 BSD。QEMU user mode 只能处理 Linux 和 BSD。
安装
请参阅 setup guide 文件了解如何安装 Qiling Framework。
示例
下面的示例演示了如何以最直接的方式使用 Qiling 框架模拟 Windows 可执行文件。
from qiling import Qiling
if __name__ == "__main__":
# 初始化 Qiling 实例,指定要模拟的可执行文件及模拟系统根目录。
# 注意:当前工作目录假定为 Qiling 主目录
ql = Qiling([r'examples/rootfs/x86_windows/bin/x86_hello.exe'], r'examples/rootfs/x86_windows')
# 开始模拟
ql.run()
- 以下示例展示了如何动态修补一个 Windows crackme,使其始终显示“Congratulation”对话框。
from qiling import Qiling
def force_call_dialog_func(ql: Qiling):
# 从当前栈帧获取 DialogFunc 地址
lpDialogFunc = ql.stack_read(-8)
# 为 DialogFunc 设置栈内存
ql.stack_push(0)
ql.stack_push(1001) # IDS_APPNAME
ql.stack_push(0x111) # WM_COMMAND
ql.stack_push(0)
# 压入返回地址
ql.stack_push(0x0401018)
# 从 DialogFunc 地址恢复模拟
ql.arch.regs.eip = lpDialogFunc
if __name__ == "__main__":
# 初始化 Qiling 实例
ql = Qiling([r'rootfs/x86_windows/bin/Easy_CrackMe.exe'], r'rootfs/x86_windows')
# NOP 掉一些代码
ql.patch(0x004010B5, b'\x90\x90')
ql.patch(0x004010CD, b'\x90\x90')
ql.patch(0x0040110B, b'\x90\x90')
ql.patch(0x00401112, b'\x90\x90')
# 在某个地址处钩子,设置回调函数
ql.hook_address(force_call_dialog_func, 0x00401016)
ql.run()
以下 YouTube 视频展示了上述示例的工作原理。
在 Ubuntu x64 主机上模拟 ARM 路由器固件
Qiling Framework 在 x86_64 Ubuntu 主机上热修补并模拟了一个 ARM 路由器的 /usr/bin/httpd。
Qiling 的 IDA Pro 插件:插桩并解密 Mirai 的秘密
该视频演示了 Qiling 的 IDA Pro 插件如何使 IDA Pro 与 Qiling 插桩引擎一起运行。
与 IDA Pro 配合使用的 GDB 服务器演示
使用 Qiling Framework 和 IDA Pro 解决一个简单的 CTF 挑战
Solving a simple CTF challenge with Qiling Framework and IDA Pro
模拟 MBR
Qiling Framework 模拟 MBR
Qltool
Qiling 还提供了一个便捷的工具 qltool,用于快速模拟 shellcode 和可执行二进制文件。
使用 qltool,可以轻松执行:
使用 shellcode:
$ ./qltool code --os linux --arch arm --format hex -f examples/shellcodes/linarm32_tcp_reverse_shell.hex
使用二进制文件:
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --rootfs examples/rootfs/x8664_linux/
启用 GDB 调试器与二进制文件:
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --gdb 127.0.0.1:9999 --rootfs examples/rootfs/x8664_linux
收集代码覆盖率(目前仅支持 UEFI):
$ ./qltool run -f examples/rootfs/x8664_efi/bin/TcgPlatformSetupPolicy --rootfs examples/rootfs/x8664_efi --coverage-format drcov --coverage-file TcgPlatformSetupPolicy.cov
输出 JSON 格式(主要针对 Windows):
$ ./qltool run -f examples/rootfs/x86_windows/bin/x86_hello.exe --rootfs examples/rootfs/x86_windows/ --console False --json
联系方式
从我们的网站 https://www.qiling.io 获取最新信息。
通过电子邮件 [email protected] 联系我们, 或通过 Twitter @qiling_io。
核心开发者、关键贡献者等
请参阅 CREDITS.md。

