Software Deobfuscation Techniques
Instructeur: Tim Blazytko
Dates: 15 au 18 juin 2026
Lieu: Hilton DoubleTree Montreal
Capacité: 20
L'obfuscation de code est devenue un outil vital pour protéger, par exemple, la propriété intellectuelle contre les concurrents. En général, elle tente d'entraver la compréhension du programme en rendant le programme à protéger plus complexe. En conséquence, un analyste humain raisonnant sur le code obfusqué doit surmonter cette barrière en le transformant en une représentation plus facile à comprendre.
Dans cette formation, nous apprenons à connaître les techniques d'obfuscation de code de pointe et examinons comment celles-ci compliquent la rétro-ingénierie. Ensuite, nous nous familiarisons progressivement avec différentes techniques de désobfuscation et les utilisons pour briser les schémas d'obfuscation dans des sessions pratiques. Ainsi, les participants approfondissent leurs connaissances en analyse de programmes et apprennent quand et comment (ne pas) utiliser différentes techniques.
D'abord, nous examinons les techniques importantes d'obfuscation de code et discutons comment les attaquer. Ensuite, nous analysons un schéma d'obfuscation basé sur machine virtuelle (VM-based), apprenons les techniques de renforcement de VM et comment les aborder.
Dans la deuxième partie, nous couvrons l'analyse de programme basée sur SMT. En détail, les étudiants apprennent à résoudre des problèmes d'analyse de programme avec des solveurs SMT, comment prouver les caractéristiques du code, comment désobfusquer le Boolean-Arithmetic mixte et comment briser la cryptographie faible.
Avant d'utiliser l'exécution symbolique pour automatiser de grandes parties de la désobfuscation de code, nous introduisons d'abord les langages intermédiaires et les optimisations de compilateur pour simplifier les schémas d'obfuscation de qualité industrielle. Ensuite, nous utilisons l'exécution symbolique pour automatiser l'analyse de programme basée sur SMT et briser les prédicats opaques. Enfin, nous apprenons à écrire des désassembleurs pour les obfuscateurs basés sur virtualisation et comment reconstruire le code original.
La dernière partie couvre la synthèse de programme, une approche pour simplifier le code basée sur son comportement sémantique. Après avoir collecté des paires entrée-sortie du code binaire, nous apprenons non seulement à simplifier de grands arbres d'expressions, mais aussi comment vérifier la correction des simplifications. Ensuite, nous utilisons la synthèse de programme pour désobfusquer le Boolean-Arithmetic mixte et apprendre la sémantique des gestionnaires d'instructions VM.
Enseignement
Notez que la formation se concentre sur les sessions pratiques. Bien que certaines parties de cours fournissent une compréhension de quand utiliser quelle méthode, diverses sessions pratiques enseignent comment les utiliser pour construire des outils personnalisés pour des problèmes ponctuels. Le formateur soutient activement les étudiants pour résoudre avec succès les tâches données. Après qu'une tâche est terminée, nous discutons différentes solutions en classe. De plus, les étudiants reçoivent des solutions de référence détaillées qui peuvent être utilisées pendant et après le cours.
Bien que les sessions pratiques utilisent l'assemblage x86, tous les outils et techniques peuvent également être appliqués à d'autres architectures telles que MIPS, PPC ou ARM.
Objectifs d'apprentissage
- Connaître l'état de l'art des techniques d'obfuscation et de désobfuscation de code
- Apprendre les optimisations de compilateur, l'analyse de programme basée sur SMT, l'exécution symbolique et la synthèse de programme
- Appliquer toutes les techniques pour briser les schémas d'obfuscation dans diverses sessions pratiques
- Écrire des désassembleurs pour les obfuscateurs basés sur VM et simplifier les expressions arithmétiques complexes
Plan du cours
La formation s'oriente selon le plan suivant:
- Introduction à la (dé)obfuscation de code
- Motivation
- Scénarios d'application
- Techniques d'analyse de programme
- Techniques d'obfuscation de code
- Prédicats opaques
- Aplatissement du flux de contrôle
- Boolean-Arithmetic mixte
- Machines virtuelles
- Renforcement de machines virtuelles
- Techniques de désobfuscation de code
- Optimisations de compilateur
- Reconstruction du flux de contrôle
- Analyse de programme basée sur SMT
- Analyse de taint
- Exécution symbolique
- Synthèse de programme
- Optimisations de compilateur
- Élimination de code mort
- Propagation/pliage de constantes
- Affectation statique unique (SSA)
- Optimisation de code obfusqué
- Analyse de programme basée sur SMT
- Solveurs SAT et SMT
- Encodage de problèmes d'analyse de programmes pour solveurs SMT
- Prouver l'équivalence sémantique
- Prouver les propriétés d'un morceau de code
- Résoudre des contraintes de programme complexes
- Désobfusquer le Boolean-Arithmetic mixte
- Briser la cryptographie faible
- Exécution symbolique
- Langages intermédiaires pour la rétro-ingénierie
- Simplification symbolique et sémantique de code obfusqué
- Automatisation en rétro-ingénierie
- Identification des composants de machine virtuelle
- Interaction avec les solveurs SMT
- Briser les prédicats opaques
- Écriture de désassembleurs pour obfuscateurs basés sur virtualisation
- Synthèse de programme
- Concept de synthèse de programme
- Apprentissage de la sémantique de code basé sur son comportement entrée/sortie
- Obtention de paires entrée/sortie du code
- Méthodes pour simplifier de grands arbres d'expressions
- Prouver la correction des simplifications
- Désobfusquer le Boolean-Arithmetic mixte
- Apprentissage de la sémantique des gestionnaires d'instructions VM
Exigences
Matériel/Logiciel:
- Les étudiants doivent avoir accès à un ordinateur avec 4 Go de RAM (minimum) et au moins 20 Go d'espace disque
- De plus, ils doivent installer un désassembleur de leur choix (par exemple, IDA ou Ghidra)
- Logiciel de virtualisation tel que Virtual Box ou VMware
- Les étudiants recevront une VM Linux contenant tous les outils et configurations nécessaires
Prérequis:
- Les participants doivent avoir des compétences de base en rétro-ingénierie
- De plus, ils doivent être familiers avec l'assemblage x86 et Python
BIO
Tim Blazytko est un chercheur en sécurité binaire bien connu et co-fondateur d'emproof. Après avoir travaillé sur des méthodes novatrices pour la désobfuscation de code, le fuzzing et l'analyse de cause racine pendant son doctorat, Tim construit maintenant des schémas d'obfuscation de code adaptés aux appareils embarqués. De plus, il donne des formations sur la rétro-ingénierie et la désobfuscation de code, analyse les logiciels malveillants et effectue des audits de sécurité.
Pour s'inscrire
Cliquez ici pour vous inscrire.
