
Ein echtes instrumentierbares Binary-Emulations-Framework
Qilings Anwendungsfall, Blog und verwandte Arbeiten
Qiling ist ein fortschrittliches Binary-Emulations-Framework mit den folgenden Funktionen:
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.
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.
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.
Auf Unicorn aufbauend, aber Qiling und Unicorn sind zwei verschiedene Paar Schuhe.
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:
Bitte lesen Sie die Setup-Anleitung zur Installation des Qiling Frameworks.
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()
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.
Qiling Framework hot-patchet und emuliert das /usr/bin/httpd eines ARM-Routers auf einem x86_64-Ubuntu-Host.
Dieses Video demonstriert, wie das IDA-Pro-Plugin von Qiling es IDA Pro ermöglicht, mit der Qiling-Instrumentierungs-Engine zu laufen.
Qiling's IDA Pro Plugin: Instrument and Decrypt Mirai's Secret
Lösen einer einfachen CTF-Herausforderung mit Qiling Framework und IDA Pro
Solving a simple CTF challenge with Qiling Framework and IDA Pro
Qiling Framework emuliert MBR
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
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.
Bitte beachten Sie die CREDITS.md.