Ver Mensaje Individual
  #5  
Antiguo 26-10-2007
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Reputación: 18
aeff Va camino a la fama
saludos compañero ArdiLLa, mira colega, aún me corren dudas por la cabeza,

este es tu código:

Código Delphi [-]
     program Inyector_Proceso;

{$IMAGEBASE $13140000}

uses
  Windows,
  SysUtils,
  Messages;

const
CM_MANDA_TECLA  = WM_USER + $1000;
CM_MANDA_SHOW   = WM_USER + $1001;

var
  ctn: pChar;

function Main(dwEntryPoint: Pointer): longword; stdcall;
Var Zeta : String;
Msg : TMsg;
     Procedure M_Tecla;
     Begin
      MessageBox(0, 'Esto Funciona de Maravilla, MARAVILLOSAMENTE', 'M_Tecla', 0);
     End;

     Procedure M_Show;
     Begin
     Zeta := 'Esto Form ha sido llamado mediante el envio de un mensaje y cerramos el proceso';
     MessageBox(0, PChar(Zeta), 'M_Show', 0);
     End;


begin
  //si en vez de ExitThread, ponemos ExitProcess, no solo nos descargaria el archivo
  //si no que también terminaría el proceso en el que estamos inyectados
    while GetMessage(Msg,0,0,0) do
    begin



    Case MSg.message Of
    CM_MANDA_SHOW:
        M_Show;
    CM_MANDA_TECLA:
        Begin
        M_Tecla;
        ExitProcess(0);
        End;
    End; //Case
    End; //While


//  ExitThread(0);
  ExitProcess(0);

  Result := 0;
  //PostThreadMessage
end;

procedure Inject(ProcessHandle: longword; EntryPoint: pointer);
var
  Module, NewModule: Pointer;
  Size, BytesWritten, TID: longword;
begin
  Module := Pointer(GetModuleHandle(nil));
  Size := PImageOptionalHeader(Pointer(integer(Module) + PImageDosHeader(Module)._lfanew + SizeOf(dword) + SizeOf(TImageFileHeader))).SizeOfImage;
  VirtualFreeEx(ProcessHandle, Module, 0, MEM_RELEASE);
  NewModule := VirtualAllocEx(ProcessHandle, Module, Size, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  WriteProcessMemory(ProcessHandle, NewModule, Module, Size, BytesWritten);
  CreateRemoteThread(ProcessHandle, nil, 0, EntryPoint, Module, 0, TID);

  Sleep(2000);
  MessageBox(0, 'Mando Mensaje CM_MANDA_SHOW', 'Inject', 0);
  PostThreadMessage(TID,CM_MANDA_SHOW,0,0);
  Sleep(3000);
  PostThreadMessage(TID,CM_MANDA_TECLA,0,0);
end;

var
  ProcessHandle, PID: longword;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin

  CreateProcess(nil, 'notepad', nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo);

  Sleep(500);

  GetMem(ctn, 200);

  GetWindowThreadProcessId(FindWindow('Notepad', nil), @PID);
  ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
  Inject(ProcessHandle, @Main);
  CloseHandle(ProcessHandle);


end.

ahora, pienso que lo que haces es inyectar un proceso dentro del proceso que creas al abrir el notepad ¿no?, es decir, reservas un lugar dentro de este proceso Notepad y colocas la funcion Main dentro de este ¿no?,

ahora, esa funcion solo se activa si se le manda un mensaje a su "hilo",

mi siguiente quiestion es:

¿si yo inyecto esta funcion Main dentro del Proceso TaskMgr.exe que yo cree puedo eliminar/obtener información de los Items de SysListView que muestra los procesos?

muchas gracias de antemano,

saludos!

Última edición por aeff fecha: 26-10-2007 a las 22:24:27.
Responder Con Cita