
qiling v1.4.11
Ein echtes instrumentierbares Binary-Emulations-Framework
Qilings Anwendungsfall, Blog und verwandte Arbeiten
Qiling ist ein fortschrittliches Binary-Emulations-Framework mit den folgenden Funktionen:
- Emuliert mehrere Plattformen: Windows, macOS, Linux, Android, BSD, UEFI, DOS, MBR.
- Emuliert mehrere Architekturen: 8086, X86, X86_64, ARM, ARM64, MIPS, RISC-V, PowerPC.
- Unterstützt mehrere Dateiformate: PE, Mach-O, ELF, COM, MBR.
- Unterstützt Windows-Treiber (.sys), Linux-Kernel-Module (.ko) und macOS-Kernel (.kext) über Demigod.
- Emuliert und sandboxt Code in einer isolierten Umgebung.
- Bietet eine vollständig konfigurierbare Sandbox.
- Bietet detaillierte APIs auf Speicher-, Register-, Betriebssystem- und Dateisystemebene.
- Feingranulare Instrumentierung: ermöglicht Hooks auf verschiedenen Ebenen (Instruktion/Basic-Block/Speicherzugriff/Ausnahme/Syscall/IO/usw.)
- Bietet APIs auf virtueller Maschinenebene, wie das Speichern und Wiederherstellen des aktuellen Ausführungszustands.
- Unterstützt plattform- und architekturübergreifende Debugging-Fähigkeiten.
- Integrierter Debugger mit Reverse-Debugging-Fähigkeit.
- Ermöglicht dynamisches Hot-Patching von laufendem Code, einschließlich geladener Bibliotheken.
- Echtes Framework in Python, das es einfach macht, darauf maßgeschneiderte Sicherheitsanalysetools zu erstellen.
Qiling hat auch seinen Weg zu verschiedenen internationalen Konferenzen gefunden.
2022:
2021:
2020:
- Black Hat, Europe
- Black Hat, USA
- Black Hat, USA (Demigod)
- Black Hat, Asia
- Hack In The Box, Lockdown 001
- Hack In The Box, Lockdown 002
- Hack In The Box, Cyberweek
- Nullcon
2019:
Qiling wird von der Unicorn Engine unterstützt.
Besuchen Sie unsere Website für weitere Informationen.
Lizenz
Dieses Programm ist freie Software; Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren; entweder gemäß Version 2 der Lizenz oder (nach Ihrer Wahl) jeder späteren Version.
Qiling im Vergleich zu anderen Emulatoren
Es gibt viele Open-Source-Emulatoren, aber die beiden Projekte, die Qiling am nächsten kommen, sind Unicorn und QEMU user mode. In diesem Abschnitt werden die Hauptunterschiede von Qiling zu diesen erläutert.
Qiling vs. Unicorn Engine
Auf Unicorn aufbauend, aber Qiling und Unicorn sind zwei verschiedene Paar Schuhe.
- Unicorn ist nur ein CPU-Emulator, konzentriert sich also auf die Emulation von CPU-Instruktionen und kann den Emulator-Speicher verstehen. Darüber hinaus kennt Unicorn keine höheren Konzepte wie dynamische Bibliotheken, Systemaufrufe, I/O-Behandlung oder ausführbare Formate wie PE, Mach-O oder ELF. Daher kann Unicorn nur rohe Maschineninstruktionen ohne Betriebssystemkontext emulieren.
- Qiling ist als Framework auf höherer Ebene konzipiert, das Unicorn zur Emulation von CPU-Instruktionen nutzt, aber auch das Betriebssystem versteht: Es verfügt über Lader für ausführbare Formate (derzeit für PE, Mach-O und ELF), dynamische Linker (um gemeinsam genutzte Bibliotheken zu laden und zu verschieben) sowie Syscall- und I/O-Handler. Aus diesem Grund kann Qiling ausführbare Binärdateien ohne ihr natives Betriebssystem ausführen.
Qiling vs. QEMU user mode
Der QEMU-Benutzermodus macht etwas Ähnliches wie unser Emulator, nämlich die Emulation ganzer ausführbarer Binärdateien auf architekturübergreifende Weise. Allerdings bietet Qiling einige wichtige Unterschiede zum QEMU-Benutzermodus:
- Qiling ist ein echtes Analyse-Framework, mit dem Sie Ihre eigenen dynamischen Analysetools darauf aufbauen können (in Python). QEMU hingegen ist nur ein Werkzeug, kein Framework.
- Qiling kann dynamische Instrumentierung durchführen und sogar Code zur Laufzeit hot-pachen. QEMU kann keines von beidem.
- Qiling ist nicht nur architekturübergreifend, sondern auch plattformübergreifend. Sie können beispielsweise eine Linux-ELF-Datei unter Windows ausführen. Im Gegensatz dazu führt der QEMU-Benutzermodus nur Binärdateien desselben Betriebssystems aus, wie Linux-ELF unter Linux, aufgrund der Art und Weise, wie er Syscalls von emuliertem Code an das native Betriebssystem weiterleitet.
- Qiling unterstützt mehr Plattformen, darunter Windows, macOS, Linux und BSD. Der QEMU-Benutzermodus kann nur Linux und BSD verarbeiten.
Installation
Bitte lesen Sie die Setup-Anleitung zur Installation des Qiling Frameworks.
Beispiele
Das folgende Beispiel zeigt, wie man das Qiling Framework auf die einfachste Weise verwendet, um eine Windows-ausführbare Datei zu emulieren.
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()
- Das folgende Beispiel zeigt, wie ein Windows-Crackme dynamisch gepatcht werden kann, um stets den „Gratulation“-Dialog anzuzeigen.
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()
Das folgende YouTube-Video zeigt, wie das obige Beispiel funktioniert.
Emulieren von ARM-Router-Firmware auf einem Ubuntu x64-Host
Qiling Framework hot-patchet und emuliert das /usr/bin/httpd eines ARM-Routers auf einem x86_64-Ubuntu-Host.
Qilings IDA-Pro-Plugin: Instrumentieren und Entschlüsseln von Mirais Geheimnis
Dieses Video demonstriert, wie das IDA-Pro-Plugin von Qiling es IDA Pro ermöglicht, mit der Qiling-Instrumentierungs-Engine zu laufen.
GDB-Server mit IDA-Pro-Demo
Lösen einer einfachen CTF-Herausforderung mit Qiling Framework und IDA Pro
Solving a simple CTF challenge with Qiling Framework and IDA Pro
Emulieren von MBR
Qiling Framework emuliert MBR
Qltool
Qiling bietet auch ein benutzerfreundliches Tool namens qltool, um schnell Shellcode und ausführbare Binärdateien zu emulieren.
Mit qltool kann eine einfache Ausführung durchgeführt werden:
Mit Shellcode:
$ ./qltool code --os linux --arch arm --format hex -f examples/shellcodes/linarm32_tcp_reverse_shell.hex
Mit Binärdatei:
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --rootfs examples/rootfs/x8664_linux/
Mit Binärdatei und aktiviertem GDB-Debugger:
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --gdb 127.0.0.1:9999 --rootfs examples/rootfs/x8664_linux
Mit Code-Coverage-Erfassung (derzeit nur UEFI):
$ ./qltool run -f examples/rootfs/x8664_efi/bin/TcgPlatformSetupPolicy --rootfs examples/rootfs/x8664_efi --coverage-format drcov --coverage-file TcgPlatformSetupPolicy.cov
Mit JSON-Ausgabe (hauptsächlich Windows):
$ ./qltool run -f examples/rootfs/x86_windows/bin/x86_hello.exe --rootfs examples/rootfs/x86_windows/ --console False --json
Kontakt
Die neuesten Informationen erhalten Sie auf unserer Website https://www.qiling.io
Kontaktieren Sie uns per E-Mail an [email protected] oder über Twitter @qiling_io.
Hauptentwickler, Hauptbeitragende usw.
Bitte beachten Sie die CREDITS.md.

