Software Deobfuscation Techniques
Instructeur: Tim Blazytko
Dates: 15 au 18 juin 2026
Lieu: Delta Hotel President Kennedy
Capacité: 20
La rétro-ingénierie moderne repose de plus en plus sur l'automatisation, les outils personnalisés et les flux de travail assistés par agents. Mais ces approches atteignent rapidement leurs limites lorsque les binaires résistent activement à l'analyse par obfuscation du flux de contrôle, virtualisation, Boolean-arithmetic mixte et autres transformations. Cette formation enseigne les flux de travail pratiques de désobfuscation nécessaires pour contourner ces protections et rendre les flux de travail de rétro-ingénierie automatisés efficaces sur des cibles du monde réel.
Les participants apprennent d'abord comment les techniques d'obfuscation modernes compliquent la rétro-ingénierie, puis développent progressivement les techniques de désobfuscation nécessaires pour les attaquer lors de sessions pratiques. En chemin, ils approfondissent leur compréhension de l'analyse de programmes et apprennent quand et comment appliquer différentes techniques en pratique.
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
- Développer des flux de travail pratiques pour analyser et simplifier des binaires protégés qui résistent à l'analyse statique standard
- Apprendre les optimisations de compilateur, l'analyse de programme basée sur SMT, l'exécution symbolique et la synthèse de programme
- Appliquer ces 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 disposer d'un désassembleur de leur choix (par exemple, IDA, Ghidra ou Binary Ninja) et d'une installation Docker fonctionnelle. Une image Docker contenant tous les outils requis et le matériel de cours sera fournie.
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 et expert en rétro-ingénierie bien connu, titulaire d'un doctorat en analyse de programmes. Il se concentre sur le conseil indépendant et le travail pratique en rétro-ingénierie et protection logicielle. Il contribue régulièrement à la communauté de rétro-ingénierie par le biais de formations, de présentations lors de conférences internationales, d'articles de recherche et d'outils open source. De plus, il accompagne ses clients dans l'analyse binaire avancée, les enquêtes sur les logiciels malveillants et les audits de sécurité. Tim occupe également le poste de Chief Scientist chez Emproof.
Pour s'inscrire
Cliquez ici pour vous inscrire.