Postado Dezembro 6, 2010 14 anos 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 2 - 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_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 (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. Print do programa pronto: 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.