[Source + Download] DLL Injector

Iniciado por Dark_Side, 24 de Dezembro , 2007, 08:59:15 PM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

Dark_Side

Hi,

Escrevi outro pequeno aplicativo =)

Este é um DLL Injector. Como o próprio nome sugere, trata-se de um programa cuja função é forçar o carregamento de uma DLL por um processo, injetando-a, assim, no mesmo.

Os passos tomados para fazer a injeção foram os seguintes:

1) Obter o ProcessID (PID) do executável alvo e o caminho completo da DLL a ser injetada;

2) Adicionar ao DLL Injector privilégios de Debug;

3) Obter o endereço da função LoadLibraryA();

4) Abrir o processo com permissões de leitura/escrita;

5) Utilizar VirtualAllocEx() para alocar, no espaço de memória do alvo, a quantidade de bytes correspondente ao tamanho da string que contém o caminho da DLL;

6) Utilizar WriteProcessMemory() para armazenar, no endereço de memória retornado pela função VirtualAllocEx(), o valor da string utilizada no passo anterior;
 
7) Criar uma thread remota no processo com a função CreateRemoteThread, passando como endereço de função e argumento, o endereço da função LoadLibrarA() e o endereço de memória que armazena a localização da DLL, respectivamente;

8) Aguardar o término da thread e obter seu código de retorno, verificando, posteriormente, a existência de erros;

9) Fechar o handle do processo e liberar a memória alocada.

De forma resumida, o que o programa faz é forçar o processo alvo a executar a função LoadLibraryA() passando, como parâmetro, a DLL que será injetada.

A sintaxe da função é a seguinte:

HINSTANCE LoadLibraryA(LPCTSTR  NomeDLL);

Na ausência de erros, a função retorna um ponteiro para o módulo da DLL, caso contrário, retorna ZERO.

Com base no valor de retorno, podemos determinar se a DLL foi injetada com sucesso ou não.
   

Exemplo:

LoadLibraryA('C:\MinhaDLL.dll');

O trecho acima faz com que o programa carregue a DLL 'C:\MinhaDLL.dll'. Após isso, o espaço de memória do processo será compartilhado com as funções e variáveis desta DLL, podendo-se, assim, executar instruções no mesmo de forma direta. Por exemplo, uma vez injetada, o seguinte trecho de código existente na DLL seria válido para alterar o valor de um endereço de memória:



DWORD * valor = (DWORD*)0x123456; // Endereço fictício
*valor = 1000; // Altera o valor para 1000

A técnica de injetar DLL's em processos está muito vinculada a outras técnicas, como API Hooking, por exemplo  - assunto que pretendendo falar um pouco sobre posteriormente.

Abaixo segue uma imagem do programa:



O código da DLL utilizada como teste:

#define WIN32_LEAN_AND_MEAN
#include <windows.h>

char NomeArquivo[MAX_PATH];

BOOL APIENTRY DllMain(HANDLE hModule,  DWORD  call_reason, LPVOID lpReserved)
{

 if(call_reason == DLL_PROCESS_ATTACH)
  {
   
   
   GetModuleFileName(GetModuleHandle(NULL),NomeArquivo,sizeof(NomeArquivo));
   MessageBox(GetForegroundWindow(),NomeArquivo,"Processo anexado: ",0x40); 
   
  }

return TRUE;
}   

Download do source + executável:

http://one.xthost.info/darkside17/proje ... jector.rar

Bye.

whit3_sh4rk

Aêeee, tava demorando pra continuar com seus textos velho, tinha sumido... Vou ter q pegar pra dar uma olhada no source, to enferrujado d+, quem sabe eu não animo de aprender algumas coisas do tipo.. DLL Injection é interessante pra caramba.

Ponto Positivo

(Só de sacanagem, pra vc ficar com o número do viado)

[]s

espiculo

ahua ussei isso no gunbound e deu serto agora denho aimbot proprio Oo



Asskiller

Tem como upar em outro servidor nao ?


Send Space Rapid Share !



Obrigado

v0olverine

cara ... tenho grande interece em aprender isso, mas nao estou conssiguindo baixar o source e o execultaver pelo host que vc hospedou. Você pode explicar como se baxa daquele host ou intao upar em otro host por favor ? vlw ae grande post cara .

#phobia

lol
24 de dezembro de 2007!!!

O link já era meus caros, por isso é impossível realizar o download! ^^


Quem tiver ai favor avisar que eu libero o tópico.

Temporariamente -> Trancado.