Dna est un cadre d'analyse binaire statique construit au-dessus du LLVM. Il est notamment écrit presque entièrement en C #, y compris les liaisons gérées pour LLVM, REMILL et SOUPER.
Dna implémente une reconstruction de graphe de flux de contrôle itérative inspiré fortement par le papier Saturne. Il applique de manière itérative la descente récursive, le levage (en utilisant le remift) et la résolution de chemin jusqu'à ce que le graphique de flux complet soit récupéré. Dans le cas des tables de saut, nous utilisons un algorithme récursif basé sur Souper et Z3 pour résoudre l'ensemble des cibles de table de saut possibles. Vous pouvez trouver l'algorithme d'exploration itératif ici et l'algorithme de résolution de table de saut ici.
Une fois qu'un graphique de flux de contrôle a été entièrement exploré, il peut ensuite être recompilé à x86 et réinséré dans le binaire à l'aide des algorithmes d'ici et d'ici. Bien que le code compilé ne soit en aucun cas joli, il doit s'exécuter tant que le graphique de flux de contrôle récupéré est correct. Cela étant dit, il s'agit toujours d'un prototype de recherche - des bogues et des cas de bord sont attendus. L'exploration du graphique de flux de contrôle peut échouer dans le cas des tables de saut illimitées par exemple ou des instructions illiables.
Quelques autres fonctionnalités notables:
try / catch et les intrinsèques filter sont insérés dans le graphique de flux de contrôle. Bien que le récompilateur ne prenne pas (encore) à prendre en charge SEH (les entrées SEH ne sont pas fixées), les exceptions entraîneront donc des accidents.MemorySSA EG, LoopInfo , Dominator Trees, Pass Pipeline Management, etc.Quelques mises en garde:
Notez que Dna est actuellement basé sur LLVM 17.
Dna ne va pas sortir de la boîte. Des correctifs personnalisés à remémorer et à souper étaient nécessaires pour que cela se construise sur Windows. Si vous souhaitez travailler sur l'ADN, ouvrez un problème ou envoyez-moi un courriel [email protected] . À un moment donné, je peux publier des étapes de construction appropriées, mais je ne fais aucune garantie.