
Injecte du code dans les exécutables ELF après la construction

drow est un utilitaire en ligne de commande utilisé pour injecter du code et modifier le point d'entrée d'exécutables ELF (post-compilation). Il prend en entrée des exécutables ELF non modifiés et produit un ELF modifié contenant une charge utile intégrée fournie par l'utilisateur qui s'exécute au moment de l'exécution.
Drow prend les étapes suivantes pour créer le nouvel ELF patché :
sh_size de l'en-tête de section de la dernière section (dans le segment) et p_memsz/p_filesz de l'en-tête de programme de la taille de la charge utile fournie par l'utilisateursh_offset des en-têtes de section et les p_offset des en-têtes de programme (décaler vers le bas les sections et segments pour faire de la place pour la charge utile et un petit « stager stub »)e_shoff, e_phoff, etc.)e_entry (offset du point d'entrée ELF) pour pointer vers le code injectéEn plus d'injecter la charge utile fournie par l'utilisateur, drow injecte un petit stub de code qui est préfixé au début de la charge utile. Ce stub est conçu pour appeler la charge utile. Si la charge utile est écrite pour retourner à l'appelant, après le retour de la charge utile, le stager effectue un tailcall vers _start, restaurant l'exécution afin que le programme puisse s'exécuter comme prévu.
Installez gcc et scons. Exécutez ensuite scons depuis la racine du répertoire.
En plus de compiler drow, ce projet compile également une charge utile Linux x86-64 nommée rappers_delight.bin qui imprime simplement sur stdout. Cela peut être utilisé pour les tests. Actuellement, drow ne fonctionne qu'avec les fichiers ELF64 ciblant x86-64.
De nombreux travaux open source ont été effectués dans ce domaine. Je vous encourage également à consulter les projets et publications suivants :