
Un vero framework di emulazione binaria strumentabile.
Casi d'uso, blog e lavori correlati di Qiling
Qiling è un framework avanzato di emulazione binaria, con le seguenti caratteristiche:
Qiling si è anche fatto strada in varie conferenze internazionali.
2022:
2021:
2020:
2019:
Qiling è supportato da Unicorn Engine.
Visita il nostro sito web per maggiori informazioni.
Questo programma è software libero; puoi ridistribuirlo e/o modificarlo secondo i termini della GNU General Public License come pubblicata dalla Free Software Foundation; sia la versione 2 della Licenza, o (a tua scelta) qualsiasi versione successiva.
Esistono molti emulatori open-source, ma i due progetti più vicini a Qiling sono Unicorn e QEMU user mode. Questa sezione spiega le principali differenze di Qiling rispetto a essi.
Costruito sopra Unicorn, ma Qiling e Unicorn sono due animali diversi.
QEMU user mode fa una cosa simile al nostro emulatore, ovvero emulare interi binari eseguibili in modo cross-architettura. Tuttavia, Qiling offre alcune importanti differenze rispetto a QEMU user mode:
Si prega di consultare il file guida all'installazione per come installare Qiling Framework.
L'esempio seguente mostra come utilizzare Qiling framework nel modo più diretto per emulare un eseguibile 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()
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()
Il video YouTube qui sotto mostra come funziona l'esempio sopra.
Qiling Framework applica patch a caldo ed emula /usr/bin/httpd di un router ARM su
un host Ubuntu x86_64.
Questo video mostra come il plugin IDA Pro di Qiling può far funzionare IDA Pro con il motore di strumentazione di Qiling.
Plugin IDA Pro di Qiling: Strumentazione e Decifratura del Segreto di Mirai
Risoluzione di una semplice sfida CTF con Qiling Framework e IDA Pro
Risoluzione di una semplice sfida CTF con Qiling Framework e IDA Pro
Qiling Framework emula MBR
Qiling fornisce anche uno strumento amichevole chiamato qltool per emulare rapidamente shellcode e binari eseguibili.
Con qltool, è possibile eseguire facilmente:
Con shellcode:
$ ./qltool code --os linux --arch arm --format hex -f examples/shellcodes/linarm32_tcp_reverse_shell.hex
Con file binario:
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --rootfs examples/rootfs/x8664_linux/
Con binario e debugger GDB abilitato:
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --gdb 127.0.0.1:9999 --rootfs examples/rootfs/x8664_linux
Con raccolta di copertura del codice (solo UEFI per ora):
$ ./qltool run -f examples/rootfs/x8664_efi/bin/TcgPlatformSetupPolicy --rootfs examples/rootfs/x8664_efi --coverage-format drcov --coverage-file TcgPlatformSetupPolicy.cov
Con output JSON (principalmente Windows):
$ ./qltool run -f examples/rootfs/x86_windows/bin/x86_hello.exe --rootfs examples/rootfs/x86_windows/ --console False --json
Ottieni le ultime informazioni dal nostro sito web https://www.qiling.io
Contattaci via email [email protected], tramite Twitter @qiling_io.
Si prega di fare riferimento a CREDITS.md.