Ir para conteúdo

Featured Replies

Postado

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.

Download do projeto pronto:

Download

Scan

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

Creditos: Ryokusei

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

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

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo