Le présent article traite de l'outil d'instrumentation dynamique QBDI. C'est un framework de DBI (Dynamic Binary Instrumentation), comparable à d'autres projets publics tels qu’Intel PIN, Valgrind ou encore DynamoRIO. Avant d'entrer dans le vif du sujet, quelques rappels peuvent s'avérer nécessaires…
L'instrumentation dynamique de binaires (DBI - Dynamic Binary Instrumentation) est un procédé qui permet d'analyser le comportement d'un programme lors de son exécution grâce à un code dit d' « instrumentation ». Ce code est injecté dans le flot d'exécution standard, tout en gardant le comportement initial du programme.
L'intérêt des outils d'instrumentation dynamique est la possibilité d'analyser l'exécution d'un code, à différents niveaux de granularité. Que ce soit une trace des fonctions appelées, des accès mémoire, ou encore une trace de toutes les instructions exécutées accompagnées des valeurs des registres à chaque instant.
Les exemples d'utilisation sont nombreux, du profiling logiciel à la déobfuscation de binaires, en passant par le fuzzing d'exécutables, ces outils permettent d'automatiser des analyses parfois redondantes et complexes.
1. DBI VS Debugger
L'instrumentation dynamique peut prendre de nombreuses déclinaisons. La forme...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première
[QBDI-DOC] Documentation du projet QBDI : https://qbdi.readthedocs.io/en/stable/dev.html
[QBDI-SITE] Site de QBDI : https://qbdi.quarkslab.com/
[QBDI-34C3] Présentation QBDI au 34C3 : https://qbdi.quarkslab.com/QBDI_34c3.pdf
[QBDI-SRC] Code source de QBDI : https://github.com/QBDI/QBDI/
[QBDI-DOC-C] Documentation de l’API C - QBDI : https://qbdi.quarkslab.com/
[QBDI-VMEVENT] VMEvent - QBDI : https://qbdi.readthedocs.io/en/stable/api_c.html#_CPPv27VMEvent
[DRCOV] Format .drcov : https://www.ayrx.me/drcov-file-format
[LIGHTHOUSE] Plugin Lighthouse : https://github.com/gaasedelen/lighthouse
[TRITON] Projet Triton : https://github.com/JonathanSalwan/Triton/
[IDA-QBDI] IDA et QBDI : https://gist.github.com/0xAcid/b8d1c27776a6c9bf8b8af699e27e5441
[FRIDA] Projet Frida : https://github.com/frida/frida-gum/tree/master/bindings/gumpp
[QBDI-CTF] QBDI en CTF : https://twitter.com/pmontesel/status/1161062287223881728
[QBDI-FUZZ] QBDI Fuzzing : https://github.com/quarkslab/conf-presentations/blob/master/5th-France-Japan-CyberWorkshop/19-Kyoto-Fuzzing_Binaries_using_Dynamic_Instrumentation%20-%20HERNAULT%20Paul.pdf
[QBDI-FUZZ-2] QBDI Fuzzing 2 : https://www.whinysoot.com/slides/AFL_QBDI_KSE_On_a_Boat.pdf
[QBDI-OBF] Obfuscation VS QBDI : https://blog.quarkslab.com/a-glimpse-into-tencents-legu-packer.html