Ver Mensaje Individual
  #6  
Antiguo 10-01-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Código Delphi [-]
function InjectCRT(Pid: integer; dll: PCHAR): BOOL;
var
   hThread:  THANDLE;
   ExitCode: DWORD;
   hLib:     Pointer;//LPTHREAD_START_ROUTINE;
   hProc:    THANDLE;
   Buffer:   Pointer;
begin
   Result:= false;
   if(dll^ = #0) then exit;
 
   hThread:= 0;
   ExitCode:= 0;
   hProc:= OpenProcess(PROCESS_ALL_ACCESS, false, Pid);
   if hProc<>0 then
   begin
     Buffer:= VirtualAllocEx(hProc, nil, lstrlen(dll)+1, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);
     if Buffer<>nil then
     begin
       if WriteProcessMemory(hProc, Buffer, dll, lstrlen(dll)+1, PDWORD(0)^) then
       begin
         hLib:= GetProcAddress(GetModuleHandle('Kernel32.dll'), 'LoadLibraryA');
         if hLib <> nil then
         begin
           hThread:= CreateRemoteThread(hProc, nil, 0, hLib, Buffer, 0, PDWORD(0)^);
           if hThread <> 0 then
           begin
             // libero la memoria localizada...
             WaitForSingleObject(hThread, INFINITE);  // Espero a que se cree y termine el Thread
             GetExitCodeThread(hThread, ExitCode);    // Extraigo el código de terminación del Thread
             CloseHandle(hThread);                    // Cierro el Handle hThread
           end;
         end;
       end;
       VirtualFreeEx(hProc, Buffer, 0, MEM_RELEASE);  // Libero memoria
     end;
     CloseHandle(hProc);                       // Cierro el Handle hProc
   end;
   Result:= (ExitCode <> 0);
end;


Saludos.
Responder Con Cita