
Aplicando patches de shellcodes codificados em ROP em PEs
Uma ferramenta escrita em C (Win32) para converter qualquer shellcode em ROP e aplicá-lo como patch em um executável portátil (PE) específico. Suporta apenas PEs alvo de 32 bits e o conjunto de instruções x86.
Publicado no Blackhat USA 2015, "ROPInjector: Using Return Oriented Programming for Polymorphism and Antivirus Evasion" Mais informações:
ropinjector <arquivo-a-infectar> <arquivo-shellcode> <arquivo-saída>* [opções]*
(* denota argumentos opcionais)
exemplo:
ropinjector.exe firefox.exe revshell.txt
arquivo-a-infectar : qualquer PE de 32 bits, não empacotado
arquivo-shellcode : o shellcode a ser aplicado como patch no arquivo PE
arquivo-saída (opcional) : O nome do arquivo de saída. Se não for especificado, o ROPInjector escolherá um nome de arquivo adequado indicando o tipo de injeção realizada.
opções :
text Força a leitura do arquivo de shellcode como arquivo de texto. Shellcode em formato
de texto deve estar no formato \xHH\xHH\xHH.
norop Não transforma o shellcode em ROP.
nounroll Não desenrola os SIBs.
noinj Não injeta gadgets ausentes.
getpc Não substitui construções getPC no shellcode.
entry Faz o shellcode executar antes do código PE original. Sem esta
opção, o ROPInjector tentará interceptar chamadas para ExitProcess(),
exit() e similares para que o shellcode execute por último, logo
antes da saída do processo.
-d<segundos> Número de segundos para Sleep() antes de executar o shellcode.
Quando esta opção é especificada, "entry" também é implicitamente usado.
O ROPInjector exibirá algumas estatísticas separadas por vírgula no final. Estas são (por ordem de aparecimento):