
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:
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)