Désobfuscation binaire : Reconstruction de fonctions virtualiséesJonathan Salwan,Marie-Laure Potet,Sébastien Bardin

La virtualisation est une technique de protection binaire qui consiste à transformer un bytecode original vers un nouveau jeu d’instructions (ISA - Instruction Set Architecture) propriétaire. Cette nouvelle ISA est ensuite interprétée par une machine virtuelle (embarquée dans le binaire) afin de simuler le comportement d’origine. Cette protection a pour but de cacher le code binaire d’origine ainsi que son control flow graph (CFG), ce qui implique de devoir comprendre (reverser), en premier lieu, la machine virtuelle avant de pouvoir reverser le programme ciblé. Nous proposons une méthode permettant de dévirtualiser une fonction (ou un ensemble de fonctions) de façon automatique (et peut-être générique) en s’appuyant sur les concepts de base de l’analyse par teinte, l’exécution symbolique, la décompilation vers LLVM puis la recompilation. Nous illustrons ensuite nos résultats sur 25 virtualisations différentes basées sur la protection Tigress ainsi que leurs challenges. Nous expliquons également dans quels cas cette méthode fonctionne ainsi que ses limitations.