qilingframework/qiling

GitHub: qilingframework/qiling

基于 Unicorn 引擎的高级二进制模拟框架,支持跨平台跨架构执行、动态插桩和代码热补丁,用于安全分析、恶意软件研究和固件仿真。

Stars: 5828 | Forks: 776

[![文档状态](https://readthedocs.org/projects/qilingframework/badge/?version=latest)](https://docs.qiling.io) [![下载量](https://pepy.tech/badge/qiling)](https://pepy.tech/project/qiling) [![在 Telegram 上聊天](https://img.shields.io/badge/Chat%20on-Telegram-brightgreen.svg)](https://t.me/qilingframework)

[Qiling 的用例、博客及相关工作](https://github.com/qilingframework/qiling/issues/134) 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](https://groundx.io/demigod/) 支持 Windows 驱动程序、Linux 内核模块 和 macOS 内核。 - 在隔离环境中模拟和沙盒化代码。 - 提供完全可配置的沙盒。 - 提供深入的内存、寄存器、OS 级别和文件系统级别 API。 - 细粒度插桩:允许在各个级别进行挂钩 (instruction/basic-block/memory-access/exception/syscall/IO/etc.) - 提供虚拟机级别 API,例如保存和恢复当前执行状态。 - 支持跨架构和跨平台调试功能。 - 内置具有反向调试功能的调试器。 - 允许对运行中的代码进行动态热补丁,包括已加载的库。 - 真正的 Python 框架,便于在其上构建定制化的安全分析工具。 Qiling 也登上了各种国际会议的舞台。 2022: - [Black Hat, EU](https://www.blackhat.com/eu-22/arsenal/schedule/#reversing-mcu-with-firmware-emulation-29553) - [Black Hat, MEA](https://blackhatmea.com/node/724) 2021: - [Black Hat, USA](https://www.blackhat.com/us-21/arsenal/schedule/index.html#bringing-the-x-complete-re-experience-to-smart-contract-24119) - [Hack In The Box, Amsterdam](https://conference.hitb.org/hitbsecconf2021ams/sessions/when-qiling-framework-meets-symbolic-execution/) - [Black Hat, Asia](https://www.blackhat.com/asia-21/arsenal/schedule/index.html#qiling-smart-analysis-for-smart-contract-22643) 2020: - [Black Hat, Europe](https://www.blackhat.com/eu-20/arsenal/schedule/index.html#qiling-framework-deep-dive-into-obfuscated-binary-analysis-21781) - [Black Hat, USA](https://www.blackhat.com/us-20/arsenal/schedule/index.html#qiling-framework-from-dark-to-dawn-----enlightening-the-analysis-of-the-most-mysterious-iot-firmware--21062) - [Black Hat, USA (Demigod)](https://www.blackhat.com/us-20/briefings/schedule/#demigod-the-art-of-emulating-kernel-rootkits-20009) - [Black Hat, Asia](https://www.blackhat.com/asia-20/arsenal/schedule/index.html#qiling-lightweight-advanced-binary-analyzer-19245) - [Hack In The Box, Lockdown 001](https://conference.hitb.org/lockdown-livestream/) - [Hack In The Box, Lockdown 002](https://conference.hitb.org/hitb-lockdown002/virtual-labs/virtual-lab-qiling-framework-learn-how-to-build-a-fuzzer-based-on-a-1day-bug/) - [Hack In The Box, Cyberweek](https://cyberweek.ae/2020/lab-qiling-framework/) - [Nullcon](https://nullcon.net/website/goa-2020/speakers/kaijern-lau.php) 2019: - [DEFCON, USA](https://www.defcon.org/html/defcon-27/dc-27-demolabs.html#QiLing) - [Hitcon](https://hitcon.org/2019/CMT/agenda) - [Zeronights](https://zeronights.ru/report-en/qiling-io-advanced-binary-emulation-framework/) Qiling 由 [Unicorn Engine](http://www.unicorn-engine.org) 提供支持。 访问我们的 [网站](https://www.qiling.io) 获取更多信息。 #### 许可证 本程序是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证条款重新分发和/或修改它;许可证版本为 2,或者(根据您的选择)任何后续版本。 #### Qiling 与其他模拟器的对比 有许多开源模拟器,但与 Qiling 最接近的两个项目是 [Unicorn](http://www.unicorn-engine.org) 和 [QEMU user mode](https://qemu.org)。 本节解释了 Qiling 与它们的主要区别。 ##### Qiling 与 Unicorn 引擎 Qiling 基于 Unicorn 构建,但 Qiling 和 Unicorn 是两种不同的东西。 - Unicorn 只是一个 CPU 模拟器,因此它专注于模拟 CPU 指令,能够理解模拟器内存。 除此之外,Unicorn 不知道更高级的概念,例如动态库、系统调用、I/O 处理或可执行文件格式(如 PE, Mach-O 或 ELF)。因此,Unicorn 只能模拟原始机器指令,而没有操作系统 (OS) 上下文。 - Qiling 被设计为一个更高层的框架,利用 Unicorn 来模拟 CPU 指令,但能理解操作系统:它具有可执行文件加载器(目前支持 PE, Mach-O 和 ELF)、动态链接器(以便我们可以加载和重定位共享库)、系统调用和 IO 处理程序。因此,Qiling 可以运行可执行二进制文件,而无需其原生操作系统。 ##### Qiling 与 QEMU user mode QEMU user mode 与我们的模拟器做的事情类似,即以跨架构的方式模拟整个可执行二进制文件。 然而,与 QEMU user mode 相比,Qiling 提供了一些重要的差异: - 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。 #### 安装 请参阅 [安装指南](https://docs.qiling.io/en/latest/install/) 文件以了解如何安装 Qiling Framework。 #### 示例 下面的示例展示了如何以最直接的方式使用 Qiling 框架来模拟一个 Windows 可执行文件。 ``` from qiling import Qiling if __name__ == "__main__": # initialize Qiling instance, specifying the executable to emulate and the emulated system root. # note that the current working directory is assumed to be Qiling home ql = Qiling([r'examples/rootfs/x86_windows/bin/x86_hello.exe'], r'examples/rootfs/x86_windows') # start emulation ql.run() ``` - 下面的示例展示了一个 Windows crackme 如何被动态修补,使其始终显示“Congratulation”对话框。 ``` from qiling import Qiling def force_call_dialog_func(ql: Qiling): # get DialogFunc address from current stack frame lpDialogFunc = ql.stack_read(-8) # setup stack memory for DialogFunc ql.stack_push(0) ql.stack_push(1001) # IDS_APPNAME ql.stack_push(0x111) # WM_COMMAND ql.stack_push(0) # push return address ql.stack_push(0x0401018) # resume emulation from DialogFunc address ql.arch.regs.eip = lpDialogFunc if __name__ == "__main__": # initialize Qiling instance ql = Qiling([r'rootfs/x86_windows/bin/Easy_CrackMe.exe'], r'rootfs/x86_windows') # NOP out some code ql.patch(0x004010B5, b'\x90\x90') ql.patch(0x004010CD, b'\x90\x90') ql.patch(0x0040110B, b'\x90\x90') ql.patch(0x00401112, b'\x90\x90') # hook at an address with a callback ql.hook_address(force_call_dialog_func, 0x00401016) ql.run() ``` 下面的 YouTube 视频展示了上述示例的工作原理。 #### 在 Ubuntu x64 主机上模拟 ARM 路由器固件 Qiling Framework 热修补并模拟一个在 x86_64 Ubuntu 主机上的 ARM 路由器的 `/usr/bin/httpd`。 [![Qiling 教程:模拟和 Fuzz ARM 路由器固件](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/fc9e6e6d8d111511.jpg)](https://www.youtube.com/watch?v=e3_T3KLh2NU) #### Qiling 的 IDA Pro 插件:插桩并解密 Mirai 的秘密 此视频演示了 Qiling 的 IDA Pro 插件如何让 IDA Pro 与 Qiling 插桩引擎一起运行。 [![Qiling 的 IDA Pro 插件:插桩并解密 Mirai 的秘密](http://img.youtube.com/vi/ZWMWTq2WTXk/0.jpg)](http://www.youtube.com/watch?v=ZWMWTq2WTXk) #### 配合 IDA Pro 的 GDB server 演示 使用 Qiling Framework 和 IDA Pro 解决一个简单的 CTF 挑战 [![使用 Qiling Framework 和 IDA Pro 解决一个简单的 CTF 挑战](https://i.ytimg.com/vi/SPjVAt2FkKA/0.jpg)](https://www.youtube.com/watch?v=SPjVAt2FkKA) #### 模拟 MBR Qiling Framework 模拟 MBR [![Qiling 演示:模拟 MBR](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/8f7edef9b9111513.png)](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/8f7edef9b9111513.png) #### 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 获取最新信息 通过电子邮件 info@qiling.io 联系我们, 或通过 Twitter [@qiling_io](https://twitter.com/qiling_io)。 #### 核心开发者、主要贡献者等 请参阅 [CREDITS.md](https://github.com/qilingframework/qiling/blob/dev/CREDITS.md)。
标签:ARM模拟, ASN解析, CTF工具, DAST, ELF解析, Fuzzing, IoT安全, JA3, Mach-O解析, NSM, PE解析, Python, Qiling, UEFI模拟, Unicorn Engine, Windows内核驱动, X86模拟, 二进制分析, 二进制模拟, 云安全运维, 云资产清单, 代码仿真, 固件分析, 多架构支持, 安全工具开发, 恶意软件分析, 指令插桩, 无后门, 模拟框架, 沙箱, 漏洞分析, 漏洞搜索, 跨平台模拟, 路径探测, 逆向工具, 逆向工程