Criando Injetor de DLL Delphi
+4
Hitoki
Natsu
Dr.[H]ouse
Yoko
8 participantes
- YokoMembro Avançado
- Registrado em : 25/03/2011
Posts : 881
Data de nascimento : 07/11/1988
Idade : 35
Criando Injetor de DLL Delphi
Seg Abr 18, 2011 10:07 pm
Criando Injetor de DLL Delphi
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.
1 - Inicie um novo projeto no Delphi.
Adicione os seguintes componentes no form:
object Label1
object Edit1
object Label2
object Edit2
object Button1
object OpenDialog1
object Timer1
object Button2
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Modificando vai ficar assim:
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
2 - Vá ao Code Explorer (View/Code Explorer) e declare a unit TlHelp32:
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
3 - Declare a seguinte função acima de "end.":
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
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;
4 - Declare esta função logo abaixo da função declarada acima:
function InjectDll(PID:DWORD; sDll:string):Boolean;
var
hLib: Pointer;
hThread: THandle;
pMod: Pointer;
hOpen: THandle;
dWritten: Cardinal;
ThreadID: Cardinal;
begin
Result := FALSE;
hOpen := OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
if hOpen <> INVALID_HANDLE_VALUE then
begin
hLib := GetProcAddress(GetModuleHandle(PChar('kernel32.dll')), PChar('LoadLibraryA'));
pMod := VirtualAllocEx(hOpen, nil, Length(sDll) + 1, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if WriteProcessMemory(hOpen, pMod, @sDll[1], Length(sDll), dWritten) then
Result := TRUE;
hThread := CreateRemoteThread(hOpen, nil, 0, hLib, pMod, 0, ThreadID);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hOpen);
CloseHandle(hThread);
end;
end;
5 - Agora volte ao Form e dê dois cliques no botão "Carregar". Então insira este algoritmo no evento OnClick dele:
if not OpenDialog1.Execute then Exit;
Edit2.Text:=OpenDialog1.FileName;
6 - Volte ao Form e dê dois cliques no botão "Injetar". No evento OnClick dele insira este código:
Timer1.Enabled:=True;
7 - Volte ao Form e dê dois cliques sobre o "Timer1". No evento OnClick dele insira este algorítmo:
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);
8- Salve o Projeto
8 - Compile o projeto (F9)
10- Se tudo der certo um executável vai ser criado na pasta do projeto.
Espero que esse tutorial ajude muitos usuários do fórum.
Creditos
yoko
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.
1 - Inicie um novo projeto no Delphi.
Adicione os seguintes componentes no form:
object Label1
object Edit1
object Label2
object Edit2
object Button1
object OpenDialog1
object Timer1
object Button2
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Modificando vai ficar assim:
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
2 - Vá ao Code Explorer (View/Code Explorer) e declare a unit TlHelp32:
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
3 - Declare a seguinte função acima de "end.":
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
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;
4 - Declare esta função logo abaixo da função declarada acima:
function InjectDll(PID:DWORD; sDll:string):Boolean;
var
hLib: Pointer;
hThread: THandle;
pMod: Pointer;
hOpen: THandle;
dWritten: Cardinal;
ThreadID: Cardinal;
begin
Result := FALSE;
hOpen := OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
if hOpen <> INVALID_HANDLE_VALUE then
begin
hLib := GetProcAddress(GetModuleHandle(PChar('kernel32.dll')), PChar('LoadLibraryA'));
pMod := VirtualAllocEx(hOpen, nil, Length(sDll) + 1, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if WriteProcessMemory(hOpen, pMod, @sDll[1], Length(sDll), dWritten) then
Result := TRUE;
hThread := CreateRemoteThread(hOpen, nil, 0, hLib, pMod, 0, ThreadID);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hOpen);
CloseHandle(hThread);
end;
end;
5 - Agora volte ao Form e dê dois cliques no botão "Carregar". Então insira este algoritmo no evento OnClick dele:
if not OpenDialog1.Execute then Exit;
Edit2.Text:=OpenDialog1.FileName;
6 - Volte ao Form e dê dois cliques no botão "Injetar". No evento OnClick dele insira este código:
Timer1.Enabled:=True;
7 - Volte ao Form e dê dois cliques sobre o "Timer1". No evento OnClick dele insira este algorítmo:
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);
8- Salve o Projeto
8 - Compile o projeto (F9)
10- Se tudo der certo um executável vai ser criado na pasta do projeto.
Tutorial Video
Espero que esse tutorial ajude muitos usuários do fórum.
Creditos
yoko
- Dr.[H]ouseMembro Avançado
- Registrado em : 14/04/2011
Posts : 128
Data de nascimento : 15/05/1994
Idade : 29
Localização : PC
Re: Criando Injetor de DLL Delphi
Seg Abr 18, 2011 10:09 pm
Uu vlw yoko parabens vai ajuda muito
- YokoMembro Avançado
- Registrado em : 25/03/2011
Posts : 881
Data de nascimento : 07/11/1988
Idade : 35
Re: Criando Injetor de DLL Delphi
Ter Abr 19, 2011 9:17 am
!Foox escreveu:Uu vlw yoko parabens vai ajuda muito
Cuidado com o passo 7
quando for colar o script, sempre o begin acaba repetindo duas vezes, ai vc deleta um, se não vc não vai conseguir compilar.
- NatsuMembro Avançado
- Registrado em : 28/03/2011
Posts : 550
Data de nascimento : 04/05/2001
Idade : 22
Localização : Bazinga
Humor : Alegremente Chato
Re: Criando Injetor de DLL Delphi
Ter Abr 19, 2011 11:51 am
valeu e tu prometeu que o proximo hack eu crio o injetor.
dps me passa a imagem do proximo hack aew fika conminando.
dps me passa a imagem do proximo hack aew fika conminando.
- HitokiMembro Avançado
- Registrado em : 13/12/2010
Posts : 646
Data de nascimento : 07/10/1992
Idade : 31
Localização : Computador
Humor : Engraçado
Re: Criando Injetor de DLL Delphi
Ter Abr 19, 2011 12:08 pm
Adorei o tópico, muito bom e com imagens ótimas, e tenho certeza que sendo você deve estar tudo direitinho no tópico, espero que até possa ser FIXADO.
Parabéns Yoko.
Parabéns Yoko.
- YokoMembro Avançado
- Registrado em : 25/03/2011
Posts : 881
Data de nascimento : 07/11/1988
Idade : 35
Re: Criando Injetor de DLL Delphi
Ter Abr 19, 2011 12:44 pm
Hitoki escreveu:Adorei o tópico, muito bom e com imagens ótimas, e tenho certeza que sendo você deve estar tudo direitinho no tópico, espero que até possa ser FIXADO.
Parabéns Yoko.
Eu fiz um tutorial usando meu próprio delphi7...
Se fizer tudo certinho é impossível errar...eu ja fiz e refiz varias vezes so pra garantir...rsrs
boa sorte!
- Sub_ZeroAdministrador
- Registrado em : 21/11/2010
Posts : 1742
Re: Criando Injetor de DLL Delphi
Ter Abr 19, 2011 1:49 pm
@Hitoki
Você é supervisor e se acha que o tópico merece ser Fixo, pode Fixar ele!
Fixado!
Você é supervisor e se acha que o tópico merece ser Fixo, pode Fixar ele!
Fixado!
- YokoMembro Avançado
- Registrado em : 25/03/2011
Posts : 881
Data de nascimento : 07/11/1988
Idade : 35
Re: Criando Injetor de DLL Delphi
Ter Abr 19, 2011 10:29 pm
Gente pro pessoal que tava me pedindo um vídeo explicativo...
eu coloquei no final do tópico...ta meio ruinzinho mas da pra entender!
Obs: O video termina na hora da compilação (problemas técnicos) mas depois que compila o injetor ela ja ta pronto...ok
Qualquer duvida e so manda os PM's de novo!!
eu coloquei no final do tópico...ta meio ruinzinho mas da pra entender!
Obs: O video termina na hora da compilação (problemas técnicos) mas depois que compila o injetor ela ja ta pronto...ok
Qualquer duvida e so manda os PM's de novo!!
- Dr.[H]ouseMembro Avançado
- Registrado em : 14/04/2011
Posts : 128
Data de nascimento : 15/05/1994
Idade : 29
Localização : PC
Re: Criando Injetor de DLL Delphi
Ter Abr 19, 2011 10:34 pm
ok pode deixa
- NearMembro Avançado
- Registrado em : 24/11/2010
Posts : 345
Data de nascimento : 14/09/1996
Idade : 27
Humor : Ta tudo blz por aki =D
Re: Criando Injetor de DLL Delphi
Ter Abr 19, 2011 10:47 pm
Só podia ser o pc da Yoko mesmo, todo rosa xD
Santa paciência para fazer vídeo aula, ja fiz, só que eu não usei o bloco de notas para dar as instruções ( EU SOU MUITO BURRO ), fiz imagens no paint xD mas ficou muito bom, parabéns
Santa paciência para fazer vídeo aula, ja fiz, só que eu não usei o bloco de notas para dar as instruções ( EU SOU MUITO BURRO ), fiz imagens no paint xD mas ficou muito bom, parabéns
- Sub_ZeroAdministrador
- Registrado em : 21/11/2010
Posts : 1742
Re: Criando Injetor de DLL Delphi
Ter Abr 19, 2011 11:24 pm
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
video-aula no paint essa é boa!
Yoko ótima video-aula vai ajudar muito!
video-aula no paint essa é boa!
Yoko ótima video-aula vai ajudar muito!
- VanessaMembro Avançado
- Registrado em : 07/04/2011
Posts : 106
Data de nascimento : 01/01/1996
Idade : 28
Localização : Sp
Re: Criando Injetor de DLL Delphi
Qua Abr 20, 2011 11:22 am
o codigo ta errado yoko concerta
- NatsuMembro Avançado
- Registrado em : 28/03/2011
Posts : 550
Data de nascimento : 04/05/2001
Idade : 22
Localização : Bazinga
Humor : Alegremente Chato
Re: Criando Injetor de DLL Delphi
Qua Abr 20, 2011 1:51 pm
ta criei agora como boto a imagem de fundo?
- YokoMembro Avançado
- Registrado em : 25/03/2011
Posts : 881
Data de nascimento : 07/11/1988
Idade : 35
Re: Criando Injetor de DLL Delphi
Qua Abr 20, 2011 3:12 pm
Vanessa escreveu:o codigo ta errado yoko concerta
Eu fiz a video aula usando o topico...
Se der algum erro talvez aconteça no passo 7, quando vc cola o script o BEGIN repete duas vezes ai vc apaga um.
Eu fiz isso no video tbm.
Vamo gente eu sei que vcs conseguem!
- VanessaMembro Avançado
- Registrado em : 07/04/2011
Posts : 106
Data de nascimento : 01/01/1996
Idade : 28
Localização : Sp
Re: Criando Injetor de DLL Delphi
Seg Abr 25, 2011 12:28 pm
aff eu tem que ke intala a dll disponibiliza ai
- YokoMembro Avançado
- Registrado em : 25/03/2011
Posts : 881
Data de nascimento : 07/11/1988
Idade : 35
Re: Criando Injetor de DLL Delphi
Seg Abr 25, 2011 1:06 pm
Vanessa escreveu:aff eu tem que ke intala a dll disponibiliza ai
Van! pra injetar a DLL vc pode usar esse injetor
Subinjetor
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
- GuiPilattiMembro Novo
- Registrado em : 23/07/2011
Posts : 1
Data de nascimento : 10/09/1988
Idade : 35
Localização : Porto Alegre
Re: Criando Injetor de DLL Delphi
Sáb Jul 23, 2011 6:42 pm
O meu da erro no:
- Código:
var PID: DWORD;
Permissões neste sub-fórum
Não podes responder a tópicos