
Un véritable framework d'émulation binaire instrumentable
Cas d'utilisation de Qiling, blog et travaux connexes
Qiling est un framework avancé d'émulation binaire, avec les fonctionnalités suivantes :
Qiling s'est également fait une place dans diverses conférences internationales.
2022 :
2021 :
2020 :
2019 :
Qiling est soutenu par Unicorn Engine.
Visitez notre site web pour plus d'informations.
Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier selon les termes de la GNU General Public License telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, ou (à votre choix) toute version ultérieure.
Il existe de nombreux émulateurs open-source, mais deux projets sont les plus proches de Qiling : Unicorn et QEMU user mode. Cette section explique les principales différences entre Qiling et eux.
Construit sur Unicorn, mais Qiling et Unicorn sont deux animaux différents.
QEMU user mode fait une chose similaire à notre émulateur, c'est-à-dire émuler des binaires exécutables entiers de manière cross-architecture. Cependant, Qiling offre quelques différences importantes par rapport à QEMU user mode :
Veuillez consulter le guide d'installation pour savoir comment installer Qiling Framework.
L'exemple ci-dessous montre comment utiliser le framework Qiling de la manière la plus simple pour émuler un exécutable Windows.
from qiling import Qiling
if __name__ == "__main__":
# initialise l'instance Qiling, en spécifiant l'exécutable à émuler et la racine du système émulé.
# notez que le répertoire de travail actuel est supposé être le répertoire Qiling
ql = Qiling([r'examples/rootfs/x86_windows/bin/x86_hello.exe'], r'examples/rootfs/x86_windows')
# démarre l'émulation
ql.run()
from qiling import Qiling
def force_call_dialog_func(ql: Qiling):
# récupère l'adresse de DialogFunc depuis la pile actuelle
lpDialogFunc = ql.stack_read(-8)
# configure la mémoire de la pile pour DialogFunc
ql.stack_push(0)
ql.stack_push(1001) # IDS_APPNAME
ql.stack_push(0x111) # WM_COMMAND
ql.stack_push(0)
# pousse l'adresse de retour
ql.stack_push(0x0401018)
# reprend l'émulation depuis l'adresse de DialogFunc
ql.arch.regs.eip = lpDialogFunc
if __name__ == "__main__":
# initialise l'instance Qiling
ql = Qiling([r'rootfs/x86_windows/bin/Easy_CrackMe.exe'], r'rootfs/x86_windows')
# NOP sur du 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')
# accroche une adresse avec un rappel
ql.hook_address(force_call_dialog_func, 0x00401016)
ql.run()
La vidéo YouTube ci-dessous montre comment l'exemple ci-dessus fonctionne.
Qiling Framework patch à chaud et émule /usr/bin/httpd d'un routeur ARM sur
un hôte Ubuntu x86_64.
Cette vidéo montre comment le plugin IDA Pro de Qiling peut faire fonctionner IDA Pro avec le moteur d'instrumentation Qiling.
Plugin IDA Pro de Qiling : Instrumenter et déchiffrer le secret de Mirai
Résolution d'un défi CTF simple avec Qiling Framework et IDA Pro
Résolution d'un défi CTF simple avec Qiling Framework et IDA Pro
Qiling Framework émule le MBR
Qiling fournit également un outil convivial nommé qltool pour émuler rapidement des shellcodes et des binaires exécutables.
Avec qltool, une exécution facile peut être effectuée :
Avec un shellcode :
$ ./qltool code --os linux --arch arm --format hex -f examples/shellcodes/linarm32_tcp_reverse_shell.hex
Avec un fichier binaire :
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --rootfs examples/rootfs/x8664_linux/
Avec un binaire et le débogueur GDB activé :
$ ./qltool run -f examples/rootfs/x8664_linux/bin/x8664_hello --gdb 127.0.0.1:9999 --rootfs examples/rootfs/x8664_linux
Avec collecte de couverture de code (UEFI seulement pour l'instant) :
$ ./qltool run -f examples/rootfs/x8664_efi/bin/TcgPlatformSetupPolicy --rootfs examples/rootfs/x8664_efi --coverage-format drcov --coverage-file TcgPlatformSetupPolicy.cov
Avec sortie JSON (Windows, principalement) :
$ ./qltool run -f examples/rootfs/x86_windows/bin/x86_hello.exe --rootfs examples/rootfs/x86_windows/ --console False --json
Obtenez les dernières informations sur notre site web https://www.qiling.io
Contactez-nous par email à [email protected], via Twitter @qiling_io.
Veuillez vous référer à CREDITS.md.