2009-08-27 21 views
7

¿Cómo puedo ejecutar un ejecutable desde la RAM usando C++?¿Cómo puedo ejecutar un ejecutable desde la RAM usando C++?

El ejecutable está en RAM, y sé la dirección, ¿cómo puedo llamar al programa desde el mío?

+0

Dado que has etiquetado esto como C#, como este exe generado a través de Codedom? –

+0

Simplemente curioso: ¿cuál es el sistema operativo y qué problema está tratando de resolver? – grigy

+3

Supongo que intentaré descifrar alguna aplicación (ver los comentarios de Armen sobre la respuesta de Martin). –

Respuesta

1

¿Quiere decir comunicarse con otra aplicación que se ejecuta al mismo tiempo que la suya? Eso depende del sistema operativo que estés usando. En cualquier caso, Wikipedia tiene un artículo en Interprocess Communication, que muestra algunas técnicas básicas.

1

De la misma forma que lo haría desde el disco. Su programa no sabe si ya está cargado (es decir, en la RAM) o en el disco. Esto es abstraído por el sistema operativo.

6

¿Quiere decir que ha cargado el contenido del archivo EXE en la RAM y ahora desea ejecutar ese ejecutable?

Como está hablando de un EXE, supongo que se está ejecutando en Windows. Que yo sepa, Windows no puede hacer esto: su única opción es guardar el ejecutable en un archivo y ejecutarlo (usando CreateProcess, por ejemplo).

Editar Así es como se ejecutaría el proceso.

En C++:

STARTUPINFO si; 
PROCESS_INFORMATION pi; 

ZeroMemory(&si, sizeof(si)); 
si.cb = sizeof(si); 
ZeroMemory(&pi, sizeof(pi)); 

if(!CreateProcess("myfilename.exe", NULL, NULL, NULL, FALSE, 0, NULL, 
    NULL, &si, &pi)) 
{ 
    // An error occurred 
} 

En C#:

using System; 
using System.Diagnostics; 

Process.Start("myfilename.exe"); 
+0

yesssssssssss usted correcto cómo puedo usar CreateProcess? GRACIAS –

+0

por favor, no todos los problemas es que no tengo ese exe en el disco duro, –

+0

Son ¿Es usted el autor de ese otro proceso? De ser así, sería mucho mejor comunicarse con él para que escriba los recursos vuelven al disco duro. O use el mismo recurso original del disco duro en primer lugar. –

10

Este tipo de cosas que normalmente viene de los oscuros rincones del mundo. ;-)

En combinación con herramientas como metasploit, sería genial crear procesos recién salidos de ram, así que un par de chicos intentaron volver a implementar todo lo que sucede en CreateProcess(). Después de un tiempo descubrieron que es demasiado complejo (ver this PDF sitio 12f) para hacer que esto funcione y trataron de encontrar otra solución y aquí está: Llaman a un CreateProcess normal() con un programa común (ej. notepad.exe), pero lo inician con ThreadSuspended. Luego inyectaron un nuevo subproceso en este proceso, que se completará desde la memoria. Luego le dijeron a este hilo que se ejecutara y obtuvieron un nuevo proceso de la memoria.

Así que este es solo el panorama general y es un completo desastre (y normalmente no es el camino correcto) para hacer estas cosas. Si realmente te interesa esta parte, entonces tienes una idea para buscar.

Y, por cierto, no creo que puedas hacer esto en C#. Esto se hace normalmente en C/C++ o incluso ensamblador ...

+0

Por cierto, ¿podría especificar qué es tan difícil acerca del primer enfoque? – jpalecek

+0

@jpalecek: ¿Qué quiere decir con * primer enfoque *? Si te refieres a crear un proceso en ti mismo. De lo que solo puedo decir es que recuerdo de un artículo, donde algunos chicos inteligentes simplemente se daban por vencidos. Tal vez algunas palabras clave en mi artículo pueden ayudarte a encontrarlo nuevamente. Si quería comenzar un proceso con ThreadSuspended, vaya y descubra cómo inyecta un nuevo hilo en un proceso existente. Porque esto tampoco es muy fácil (pero es más fácil que tratar de crear un proceso para ti). – Oliver

+0

En el primer enfoque, me refería a crear el proceso yo mismo. Busqué en Google un poco y encontré esto: http://bytes.com/topic/python/answers/585637-execute-binary-code http://pentest.cryptocity.net/files/exploitation/winasm-1.0.1.pdf Parece que la parte de la horquilla() es difícil. No estoy seguro de si OP necesita bifurcación. – jpalecek

Cuestiones relacionadas