
Dépaqueter et désobfusquer les binaires protégés par VMProtect 2 avec un explorateur de VM basé sur l'émulation, un profileur de handlers et un recompilateur LLVM expérimental pour la dévirtualisation.
Ce dépôt est une collection d'outils hérités pour travailler avec des binaires protégés par VMProtect 2.
Ces outils permettent le dépaquetage, l'analyse et la dévirtualisation expérimentale de logiciels protégés par VMProtect 2. Au cœur de cette collection se trouve vmprofiler, une bibliothèque utilitaire qui fournit la logique fondamentale utilisée par tous les autres outils. Elle est chargée d'identifier les composants clés de VMProtect 2 tels que les VM handlers, la table des handlers, les transforms, et plus encore.
Les leçons tirées de ce projet vieux de plus de 4 ans devraient être transmises à celles et ceux qui s'intéressent à la dévirtualisation.
Ce projet tente d'identifier des handlers VM individuels. Cette approche est fragile, ne passe pas à l'échelle et peut être contournée par des modifications de l'architecture de la machine virtuelle (interconnexion de plusieurs handlers, handlers complexes, etc.). Au lieu de cela, je préconise une stratégie de levée (lifting) incrémentale et de récupération du flux de contrôle avec une logique de désobfuscation minimale spécifique à la VM. Des outils tels que Saturn, Dna by Colton, Triton et Mergen ont désobfusqué VMProtect avec succès avec peu ou pas d'identification de handlers spécifiques à la VM. Ce dépôt documente l'architecture de VMProtect 2 et sert d'avertissement : évitez de construire des outils de dévirtualisation qui dépendent fortement de l'identification de handlers spécifiques à la machine virtuelle.
Une approche semi-générique de la dévirtualisation de VMProtect nécessite un framework robuste prenant en charge la propagation load/store, la propagation de constantes de section, la DCE, et quelques autres optimisations simples. Beaucoup de personnes tentent d'utiliser LLVM pour recompiler vers du natif ; cependant, je pense que cette approche produira toujours un résultat peu satisfaisant. Nous avons notre propre framework, blare2, qui offre des capacités propres de levée (lift) et d'abaissement (lowering) 1:1 que nous exploitons à des fins de désobfuscation. Si vous êtes intéressé par des services de conseil en désobfuscation, c'est quelque chose que nous pouvons fournir pour peu que notre emploi du temps le permette.
vmemu
Un outil d'exploration de machine virtuelle basé sur Unicorn Engine.
Il vous permet de dépaqueter des programmes protégés et d'analyser le flux de contrôle dans un vmenter spécifié.
Cet outil génère un fichier .vmp2 contenant le graphe de flux de contrôle de l'entrée VM donnée.
Le fichier .vmp2 résultant peut ensuite être transmis à vmdevirt pour recompiler la fonction en x86 natif et la réintégrer dans le binaire d'origine. Veuillez noter qu'il ne s'agit PAS d'un simple traceur qui ne découvre qu'un seul chemin à travers une fonction : il identifie en réalité les jcc virtuels et explore tout le flux de contrôle virtualisé.
vmdevirt
Un recompilateur expérimental basé sur LLVM pour les fichiers .vmp2.
Bien que fonctionnel, il est considéré comme hautement expérimental et instable, et cette approche est généralement déconseillée.
vmassembler
Un assembleur expérimental pour encoder des opérations de machine virtuelle définies par l'utilisateur.
Ce projet démontre une compréhension technique approfondie de l'architecture de la machine virtuelle VMProtect 2.
vmhook
Un outil conçu pour s'interfacer avec la machine virtuelle VMProtect 2 à l'exécution, permettant une introspection détaillée des .
Veuillez suivre les instructions sur cette page.
vmhookConfiguration pour vmassembler, vmemu, vmprofiler et vmprofiler-cli :
cmake -B build
cmake --build build
Avec vmdevirt (téléchargera et compilera LLVM !) :
cmake -B build -DBUILD_VMDEVIRT=ON -DLLVM_BUILD_TYPE=Release
cmake --build build
Avec vmprofiler-qt :
cmake -B build -DBUILD_VMPROFILER_QT=ON
cmake --build build
Les deux modules optionnels :
cmake -B build -DBUILD_VMDEVIRT=ON -DBUILD_VMPROFILER_QT=ON -DLLVM_BUILD_TYPE=Release
cmake --build build
Ces outils sont fournis à des fins éducatives et de recherche uniquement. Ils ne doivent pas être utilisés pour des activités illégales, des accès non autorisés ou des violations du DMCA ou d'autres lois. Les outils eux-mêmes ne violent aucune réglementation du DMCA. Tout ce travail est ma création originale, et toute action entreprise par les utilisateurs de ces outils relève uniquement de la responsabilité de ces utilisateurs et ne reflète ni les actions ni les intentions de l'auteur.
vmprofiler
La bibliothèque utilitaire principale qui alimente tous les autres outils.
Elle comprend le pattern matching des handlers VM, l'extraction de la table des handlers, l'élimination de code mort (DCE), et d'autres routines d'analyse essentielles.
vmprofiler-cli
Une interface en ligne de commande pour vmprofiler, permettant aux utilisateurs d'afficher et d'inspecter les informations extraites sous forme textuelle.
vmprofiler-qt
Un désassembleur graphique basé sur Qt pour le bytecode VMProtect 2, offrant une exploration interactive et visuelle du code virtualisé.