Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 27-04-2008
Khronos Khronos is offline
Miembro
 
Registrado: abr 2007
Posts: 298
Poder: 20
Khronos Va por buen camino
Aquí tienes el código:

Código Delphi [-]

uses TlHelp32;

function EnabledDebugPrivilege(const Enabled : Boolean) : Boolean;
var
  hTk : THandle;
  rtnTemp : Dword;
  TokenPri : TOKEN_PRIVILEGES;
const
  SE_DEBUG = 'SeDebugPrivilege';
begin
  Result := False;
  if (OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,hTk)) then
  begin
    TokenPri.PrivilegeCount := 1;
    LookupPrivilegeValue(nil,SE_DEBUG,TokenPri.Privileges[0].Luid);
    if Enabled then
      TokenPri.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
    else
      TokenPri.Privileges[0].Attributes := 0;
    rtnTemp := 0;
    AdjustTokenPrivileges(hTk,False,TokenPri,sizeof(TokenPri),nil,rtnTemp);
    Result := GetLastError = ERROR_SUCCESS;
    CloseHandle(hTk);
  end;
end;
 
{Esta es una función muy importante que sirve para
obtener el ID de un proceso.}
function GetProcessID(Exename: string): DWORD; 
var
  hProcSnap: THandle;
  pe32: TProcessEntry32;
begin
  result := 0;
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap <> INVALID_HANDLE_VALUE then
  begin
    pe32.dwSize := SizeOf(ProcessEntry32);
    if Process32First(hProcSnap, pe32) = true then
    begin
      while Process32Next(hProcSnap, pe32) = true do
      begin
        if pos(Exename, pe32.szExeFile) <> 0 then
          result := pe32.th32ProcessID;
      end;
    end;
    CloseHandle(hProcSnap);
  end;
end;
 
function InjectTo(const Host, Guest: string): DWORD;
var
  hRemoteProcess: THandle;  
  dwRemoteProcessId: DWORD;  
  memSize: DWORD;        
  pszLibFileRemote: Pointer;  
  iReturnCode: Boolean;
  TempVar: DWORD;
  pfnStartAddr: TFNThreadStartRoutine; 
  pszLibAFilename: PwideChar;
begin
  Result := 0;
  EnabledDebugPrivilege(True);
  Getmem(pszLibAFilename, Length(Guest) * 2 + 1);
  StringToWideChar(Guest, pszLibAFilename, Length(Guest) * 2 + 1);
  dwRemoteProcessID:=GetProcessId(host);
 
  hRemoteProcess := OpenProcess(PROCESS_CREATE_THREAD + PROCESS_VM_OPERATION +
      PROCESS_VM_WRITE,
      FALSE, dwRemoteProcessId);
  //abrimos el proceso basándonos en la Id de dicho proceso
  memSize := (1 + lstrlenW(pszLibAFilename)) * sizeof(WCHAR)*2;
 
  pszLibFileRemote := PWIDESTRING(VirtualAllocEx(hRemoteProcess, nil, memSize, MEM_COMMIT, PAGE_READWRITE));
  TempVar := 0;
  iReturnCode := WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibAFilename, memSize, TempVar);
    if iReturnCode then
  begin
    pfnStartAddr := GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW');
    TempVar := 0;
    Result := CreateRemoteThread(hRemoteProcess, nil, 0, pfnStartAddr, pszLibFileRemote, 0, TempVar);
  end;
  Freemem(pszLibAFilename);
end;

Ejemplo de uso:

Código Delphi [-]
begin
  InjectTo('notepad.exe', 'C:\MyDll.dll');
end;

Nunca utilices un proceso critíco del sistema. Si tienes alguna duda, pregunta.


Salu2 y suerte.

Última edición por Khronos fecha: 27-04-2008 a las 15:30:41.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ayuda ejecutando un proceso como "SYSTEM" y haciendo que no se pueda terminar lostprophets Varios 2 05-02-2008 02:28:50
ayuda "Detectando un proceso y ejecutando otro" lostprophets Varios 1 29-01-2008 23:54:03
Error de conexion a servidor Remoto con Firebird Gaim2205 Firebird e Interbase 5 18-09-2007 21:33:00
Error al conectar la base de datos en modo Remoto oscjae Firebird e Interbase 2 26-01-2006 11:19:33
Error de memoria con proceso de Data Pump burasu Conexión con bases de datos 4 22-11-2005 11:14:22


La franja horaria es GMT +2. Ahora son las 12:19:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi