Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Ejecutar Un .exe Desde Memoria

Iniciado por Loover, 10 de Junio de 2005, 03:49:34 AM

« anterior - próximo »

Loover

 Buenas,

1.
Me gustaría saber si conoceis algún tutorial / guia / idea general de como ejecutar un .exe desde memoria. Es decir, imaginad un .exe enterito en una posición de memoria (un buffer de bytes por ejemplo) y a partir de ahí ejecutarlo.

2.
También me gustaría saber que includes necesito para compilar con vc++ una llamada a exec:
HRESULT __stdcall Exec(
  BSTR CmdName,
  vsCommandExecOption ExecuteOption,
  VARIANT* VariantIn,
  VARIANT* VariantOut,
  VARIANT_BOOL* handled
);


3.
Y por último, pero no menos importante, me gustaría saber un método para "insertar" código en un ejecutable (a pelo, embebiéndolo en el fichero) de forma que al ejecutar dicho .exe funcione correctamente y al cerrarlo realice la función / funciones que yo le haya querido insertar.

Saludos!
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Zaelsius

 Ni que fueses a escribir un virus o un troyano...  :ph34r:

1) A estas horas sólo se me ocurre que mires en el código fuente de UPX, el empaquetador de ejecutables. Está en Sourcerfoge.net.

2) Mejor busca "execl" en la MSDN, ahí tienes la familia de funciones para ejecutar comandos en Win32.

3) Eso es jodido. Casi que te mandaría a buscar tutoriales de virus writting por Google.. al infectar un programa, los más cutres sólo añaden su código al final, y modifican el punto de entrada del programa para que su código sea llamado al principio... ahora, lo que se dice "insertar" en cualquier lado.. no es fácil, aunque tampoco es imposible. No sabría orientarte mucho más :(

A ver si se pasa Astharoth por aquí y te da alguna pista, que él controla de estos temas.

zupervaca

 3) sigue la filosofia contraria, no es meter el tuyo en un exe, es meter el exe en el tuyo, es mas sencillo de entender y hacer

saludos

Loover

 [ZaelSiuS]

1) Le echaré un vistazo.

2) Creo que usaré al final CreateProcess

[zupervaca]

3) Por la naturaleza del problema que quiero resolver no me sirve eso. Aunque ese punto he encontrado una forma de hacerlo diferente y ya no necesito insertar nada en el exe que se ejecute al final.

PD: Y no, no es un virus, jajaja. No se replica :)

Gracias!
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

ShAq


senior wapo

 Yo lo que hacia era escribir el codigo maquina en un buffer, y luego cambiar los permisos de las paginas de memoria con VirtualProtect:

Asi de memoria, seguro que hay errores y no compila:


typedef int (LPFUNC *)(void);

WORD oldpermissions;
int valor;
LPFUNC funcion;
static unsigned char buffer[] = { 0xB8, 0x09, 0x00, 0x00, 0x00, 0xC3 ] // el codigo a ejecutar, que no este en la pila
   
VirtualProtect((LPVOID)buffer,sizeof(buffer), PAGE_EXECUTE_READWRITE,&oldpermissions);

 funcion = (LPVOIDFUNC)buffer;
 // ejecutarlo
valor = funcion();
printf("valor = %d\n",valor);


Para el que tenga curiosidad ese codigo devuelve un 9 (si, aun recuerdo algunos codigos de memoria xD).

Loover

 Me da error al compilar con vc++6 en LPFUNC, ¿que includes necesito?

IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

senior wapo

 LPFUNC es le nombre que le he dado yo al typedef de un puntero a funcion void que devuelve entero.

Me habre colado en la sintaxis, prueba a  mover el * delante de LPFUNC en lugar de detras.

typedef int (*LPFUNC)(void);

no me apetece abrir el compilador y probar  ;)

Loover

 De todos modos, según tengo entendido, ejecutar un exe desde memoria no es tan sencillo como eso. He leído que hay que resolver dependencias con las dll y mil historias más. Es decir, cargar el exe y tal como lo hace el sistema operativo. Y no hay ninguna función del api de windows que "lance" un proceso desde memoria. Desde disco si que hay varias, exec, fork, CreateProcess, etc.
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!


Loover

 Gracias Juan :) justo lo que necesitaba. Aunque a veces funciona y otras el proceso se cuelga :S
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.