DarkCheats

Darkcheats

Olá, se esta é sua primeira visita ao forum, registre-se clicando aqui e tenha acesso a todo nosso conteúdo!

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

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

#1
 Its_BreaK

Membro
Membro
Its_BreaK
Neste artigo irei ensinar como criar um injetor de DLL.
Muitas vezes ficamos dependentes de um injetor de DLL pra injetar o trainer 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:


Código 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



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




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


function GetPID(ProcessName: string): DWORD;
var MyHandle: THandle;
Struct: TProcessEntry32;
begin
Result:=0;
try
MyHandle:=CreateToolHelp32SnapShot(TH32CS_SNAPPROC ESS, 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;



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


function GetPID(ProcessName: string): DWORD;
var MyHandle: THandle;
Struct: TProcessEntry32;
begin
Result:=0;
try
MyHandle:=CreateToolHelp32SnapShot(TH32CS_SNAPPROC ESS, 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 (F12) 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 (F12) e dê dois cliques no botão "Aguardar Processo". No evento OnClick dele insira este código:

Timer1.Enabled:=True;



7 - Volte ao Form (F12) 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 - 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.

http://www.alexsneves.com

#2
 Sales'

Administrador
Administrador
Sales'
Movido para a area correta

http://darkcheats.playogame.com

#3
 -Sexy

Moderador
Moderador
-Sexy
Belo tutorial,sempre quis fazer um injector. Wink
Abraços ~

#4
 -Bire!

SilverMember
SilverMember
-Bire!
Movido Novamente, tópico havia sido movido incorretamente.

#5
 Conteúdo patrocinado


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


Permissões neste sub-fórum
Não podes responder a tópicos