Ver Mensaje Individual
  #1  
Antiguo 26-04-2008
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Reputación: 18
rolandoj Va por buen camino
Question Error ejecutando una rutina inyectada a un proceso remoto

Hola,

Estoy teniendo problemas al ejecutar una rutina inyectada en un proceso remoto. Funcionalmente, la rutina se ejecuta perfectamente; pero, bien al momento de regresar, o al momento de limpiarse la memoria alocada para ella, el proceso remoto indica que ha generado errores y que se cerrará.

Dado que este es un tipo de programación particularmente complicada, por simplicidad diré que conceptualmente, y en forma muy resumida, la situación es la siguiente:

1. Tenemos desarrollada una rutina que debe ejecutarse en una aplicación distinta a aquella en la que la hemos escrito.

2, Para ello es necesario copiar, el código de la rutina en sí y la estructura de los datos a pasarle como parámetros, desde nuestro espacio de direcciones al espacio de direcciones del proceso remoto, lo que implica reservar memoria en el proceso remoto para copiarle esa información

3. La rutina debe ejcutarse con CreateRemoteThread

4. La memoria reservada en el proceso remoto debe liberarse con VirtualFreeEx. VirtualFreeEx no reporta errores, por lo que aparentemente esa parte está bien; pero no estoy 100% seguro

Básicamente, la rutina a ejecutarse remotamente debe tener la forma:

function NombreDeFuncion(dwEntryPoint: Pointer): longword; stdcall;

El parámetro dwEntryPoint debe ser un apuntador a la estructura de datos pasados a la rutina desde el proceso que llama, y entre otras cosas contiene apuntadores a las rutinas de User32 y Kernel32 que pudieran necesitarse.

Cuando la rutina termina es donde empiezan mis principales dudas. He visto ejemplos donde no se hace nada especial, otros donde se llama a ExitThread y otros llamando a ExitProcess: pero ninguna combinación ha funcionado.

Además, ni para ExitThread ni para ExitProcess he encontrado una explicación clara de cual debe ser el valor de ExitCode que se les pase.

Agradecería si alguién pudiera aclarar conceptualmente las condiciones que deben cumplir ese tipo de rutinas para ser terminadas y para limpiar la memoria alocada para ellas.
Responder Con Cita