Você não está conectado. Conecte-se ou registre-se

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

1 [TUTORIAL] CRIANDO INJETOR DE DLLS em Qua Fev 09, 2011 11:36 am

Gustavo

Administrador
Administrador

avatar
[SIZE="2"]Neste artigo irei ensinar como criar um injetor de DLL.
Muitas vezes ficamos dependentes de um injetor de DLL pra injetar um programa, ou arquivos comuns que fizemos em .dll, e normalmente a maioria dos injectors vêm infectados.

A injeção de dll pelo método simples consiste em:

1 - Pegar o address da API LoadLibraryA. Essa API carrega uma DLL no processo que a chamou. O address dessa API é o mesmo em todos os processos.
2 - Abrir o processo que se quer injetar a dll, com privilégios de acesso total.
3 - Alocar memória no processo alvo para guardar o caminho da DLL a ser injetada.
4 - Escrever no endereço alocado o caminho da DLL.
5 - Criar uma thread no processo alvo, com parametro sendo o ponteiro pra string alocada no processo alvo que contem o caminho da dll.
6 - Aguardar o termino da thread criada.
7 - Fazer a limpeza.

Agora vamos programar.

1 - Inicie um novo projeto no Delphi.
Adicione os seguintes componentes com as devidas propriedades no form:

[PHP]object Label1: TLabel
Left = 8
Top = 8
Width = 47
Height = 13
Caption = 'Processo:'
end
object Edit1: TEdit
Left = 8
Top = 24
Width = 121
Height = 21
TabOrder = 0
end
object Label2: TLabel
Left = 136
Top = 8
Width = 20
Height = 13
Caption = 'DLL'
end
object Edit2: TEdit
Left = 136
Top = 24
Width = 121
Height = 21
TabOrder = 1
end
object Button1: TButton
Left = 264
Top = 32
Width = 57
Height = 17
Caption = 'Carregar'
TabOrder = 2
end
object OpenDialog1: TOpenDialog
Left = 152
Top = 56
end
object Timer1: TTimer
Enabled = False
Interval = 10
Left = 120
Top = 56
end
object Button2: TButton
Left = 8
Top = 56
Width = 105
Height = 25
Caption = 'Aguardar Processo'
TabOrder = 3
end [/PHP]



2 - Vá ao Code Explorer (View/Code Explorer) e declare a unit TlHelp32:



3 - Declare a seguinte função acima de "end.":

[PHP]function GetPID(ProcessName: string): DWORD;
var MyHandle: THandle;
Struct: TProcessEntry32;
begin
Result:=0;
try
MyHandle:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
Struct.dwSize:=Sizeof(TProcessEntry32);
if Process32First(MyHandle, Struct) then
if Struct.szExeFile=ProcessName then
begin
Result:=Struct.th32ProcessID;
Exit;
end;
while Process32Next(MyHandle, Struct) do
if Struct.szExeFile=ProcessName then
begin
Result:=Struct.th32ProcessID;
Exit;
end;
except on exception do
Exit;
end;
end; [/PHP]



5 - Agora volte ao Form (F12) e dê dois cliques no botão "Carregar". Então insira este algoritmo no evento OnClick dele:

[PHP]if not OpenDialog1.Execute then Exit;
Edit2.Text:=OpenDialog1.FileName; [/PHP]



6 - Volte ao Form (F12) e dê dois cliques no botão "Aguardar Processo". No evento OnClick dele insira este código:

[PHP]Timer1.Enabled:=True; [/PHP]



7 - Volte ao Form (F12) e dê dois cliques sobre o "Timer1". No evento OnClick dele insira este algorítmo:

[PHP]var PID: DWORD;
begin
Timer1.Enabled:=False;
PID:=GetPID(Edit1.Text);
if PID=0 then
begin
Timer1.Enabled:=True;
Exit;
end;
Timer1.Enabled:=False;
if InjectDll(PID, Edit2.Text) then
MessageBoxA(Handle, 'DLL injetada com sucesso!', 'DLL Injector', MB_ICONEXCLAMATION+MB_SYSTEMMODAL)
else
MessageBoxA(Handle, 'Erro ao injetar DLL.', 'DLL Injector', MB_ICONERROR+MB_SYSTEMMODAL); [/PHP]



8 - Compile o projeto (F9) e seja feliz.

Modo de usar:

1 - Insira o nome do processo.
2 - Carregue a DLL a ser injetada.
3 - Clique em aguardar processo.
4 - Inicie o processo e a DLL será injetada.

Print do programa pronto:

[/SIZE]
[/CENTER]

[x~]Créditos[x~]
Gustavo (por postar aqui na DirectOn)
Ryokusei (imagens)


_______________________________________________


http://directon.forumeiros.com

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum