Patching de shellcodes encodés en ROP dans des PE
Un outil écrit en C (Win32) pour convertir n'importe quel shellcode en ROP et le patcher dans un exécutable portable (PE) donné. Il ne prend en charge que les PE cibles 32 bits et le jeu d'instructions x86.
Publié lors de Blackhat USA 2015, « ROPInjector : Utilisation de la programmation orientée retour pour le polymorphisme et l'évasion antivirale » Plus d'informations :
ropinjector <fichier-à-infecter> <fichier-shellcode> <fichier-sortie>* [options]*
(* désigne des arguments facultatifs)
ex.
ropinjector.exe firefox.exe revshell.txt
fichier-à-infecter : tout PE 32 bits non compressé
fichier-shellcode : le shellcode à patcher dans le fichier PE
fichier-sortie (facultatif) : Le nom du fichier de sortie. S'il n'est pas spécifié, ROPInjector choisira un nom de fichier approprié indiquant le type d'injection effectuée.
options :
text Force la lecture du fichier shellcode en tant que fichier texte. Le shellcode sous forme
texte doit être au format \xHH\xHH\xHH.
norop Ne pas transformer le shellcode en ROP.
nounroll Ne pas dérouler les SIB.
noinj Ne pas injecter les gadgets manquants.
getpc Ne pas remplacer les constructions getPC dans le shellcode.
entry Faire exécuter le shellcode avant le code PE original. Sans cette
option, ROPInjector essaiera de hooker les appels à ExitProcess(),
exit() et similaires afin que le shellcode s'exécute en dernier, juste
avant la sortie du processus.
-d<secs> Nombre de secondes à Sleep() avant d'exécuter le shellcode.
Lorsque cette option est spécifiée, "entry" est également utilisé implicitement.
ROPInjector affichera quelques statistiques séparées par des virgules à la fin. Celles-ci sont (dans l'ordre d'apparition) :
GPLv2.0, http://www.gnu.org/licenses/old-licenses/gpl-2.0.html