
Injeção de DLL reflexiva é uma técnica de injeção de bibliotecas na qual o conceito de programação reflexiva é empregado para realizar o carregamento de uma biblioteca a partir da memória em um processo hospedeiro.
A injeção de DLL reflexiva é uma técnica de injeção de bibliotecas na qual o conceito de programação reflexiva é empregado para realizar o carregamento de uma biblioteca a partir da memória em um processo hospedeiro. Como tal, a biblioteca é responsável por carregar a si mesma ao implementar um carregador mínimo de Portable Executable (PE). Ela pode então controlar, com interação mínima com o sistema e o processo hospedeiro, como irá carregar e interagir com o hospedeiro.
A injeção funciona do Windows NT4 até o Windows 8, inclusive, rodando em x86, x64 e ARM, quando aplicável.
O processo de injetar remotamente uma biblioteca em um processo é duplo. Primeiro, a biblioteca que você deseja injetar deve ser gravada no espaço de endereço do processo alvo (doravante referido como processo hospedeiro). Segundo, a biblioteca deve ser carregada nesse processo hospedeiro de forma que as expectativas de tempo de execução da biblioteca sejam atendidas, como resolver suas importações ou realocá-la para um local adequado na memória.
Supondo que temos execução de código no processo hospedeiro e que a biblioteca que desejamos injetar foi gravada em um local arbitrário da memória do processo hospedeiro, a injeção de DLL reflexiva funciona da seguinte forma.
Abra o arquivo 'rdi.sln' no Visual Studio C++ e compile a solução no modo Release para gerar inject.exe e reflective_dll.dll
Para testar, use o inject.exe para injetar a reflective_dll.dll em um processo hospedeiro por meio de um ID de processo, por exemplo:
inject.exe 1234
Licenciado sob uma licença BSD de 3 cláusulas; consulte LICENSE.txt para detalhes.