Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

Criando injector de dll exclusivo


wccheatsforlife
 Compartilhar

Posts Recomendados

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:

 

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

 

001r.png

 

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

 

002gr.png

 

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_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;

 

003dz.png

 

 

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;

 

004ue.png

 

 

 

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;

 

006w.png

 

 

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);

 

 

007z.png

 

 

 

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:

 

 

 

 

008o.png

 

 

Credits eu que resolvi faser

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.