
Injeta código em executáveis ELF pós-build

drow é um utilitário de linha de comando usado para injetar código e interceptar o ponto de entrada de executáveis ELF (pós-compilação). Ele recebe executáveis ELF não modificados como entrada e exporta um ELF modificado contendo um payload fornecido pelo usuário que é executado em tempo de execução.
Drow realiza os seguintes passos para criar o novo ELF modificado:
sh_size do cabeçalho da última seção (no segmento) e o p_memsz/p_filesz do cabeçalho de programa pelo tamanho do payload fornecido pelo usuáriosh_offset dos cabeçalhos de seção e os p_offset dos cabeçalhos de programa (deslocar seções e segmentos para abrir espaço para o payload e um pequeno "stager stub")e_shoff, e_phoff, etc.)e_entry do cabeçalho ELF (offset do ponto de entrada ELF) para apontar para o código injetadoAlém de injetar o payload fornecido pelo usuário, o drow injeta um pequeno stub de código que é inserido no início do payload. Este stub foi projetado para chamar o payload. Se o payload for escrito para retornar ao chamador, após o payload retornar, o stager então faz uma chamada final para _start, restaurando a execução para que o programa possa rodar como pretendido.
Instale o gcc e o scons. Em seguida, execute scons a partir da raiz do diretório.
Além de compilar o drow, este projeto também compila um payload Linux x86-64 chamado rappers_delight.bin que simplesmente imprime em stdout. Isso pode ser usado para testes. Atualmente, o drow funciona apenas com arquivos ELF64 direcionados a x86-64.
Houve muito trabalho de código aberto feito neste domínio. Encorajo você a também conferir os seguintes projetos e publicações associadas: