Static Devirtualization of Themida
L'article décrit une méthode de dévirtualisation fondée sur une évaluation symbolique guidée qui limite la dépendance à des motifs VM spécifiques. La procédure élève le code en IR SSA (exemples : BLARE2, alternatives possibles Triton ou Remill), maintient RSP concret et applique en convergence des passes telles que promotion de constantes, modélisation mémoire, folding, combinaison d'instructions et élimination de stores morts pour concrétiser les adresses de handlers. Quelques adaptations sont nécessaires pour Themida, notamment pour les VJCC où la condition met à jour un flag de branchement avant que le VIP ne soit avancé, ce qui impose de suivre la divergence du VIP via ce flag plutôt que de se fier à une unique charge. Avant la sortie on effectue une analyse des dépendances mortes, on réécrit les accès en formules RSP-relatives et on abaisse l'IR en code natif en évitant les spills qui introduiraient des frames supplémentaires et perturberaient la réinsertion. La méthode permet d'obtenir du code réinsérable et exécutable proche de l'original, tandis que les protections peuvent tenter de contrer l'évaluation symbolique par des expressions opaques (MBA) ou des techniques plus avancées comme celles de CodeDefender.