en la creación de rats, keyloggers etc, ya que cada usuario podrá crear un server personalizado.
Creamos dos proyectos (yo estoy en visual studio), uno para el stub y otro para el builder.
El builder inyectará los parámetros en el stub, y este leerá el mensaje inyectado por el builder.
En el archivo main.cpp del stub añadimos el siguiente código:
Código: Seleccionar todo
#include <fstream> //librería necesaria para la lectura y escritura del archivo
#include <iostream>
#include <Windows.h>
using namespace std;
#define STUB_SIZE 232448
//Establecemos el tamaño que tendrá el stub una vez compilado. Será a partir de donde empezará a
//leerse a si mismo para obtener los parámetros inyectados por el builder.
struct Settings { //Creamos la estructura que contendrá los parámetros
int port;
char ip[16];
};
int main() {
Settings data; //Instanciamos la estructura
char filename[256]; //Variable en la que guardaremos la ruta del stub, es decir, este archivo
GetModuleFileNameA(NULL, filename, 256); //Obtenemos la ruta y la guardamos en la variable anteriormente mencionada
ifstream file(filename, ios::binary); //Abrimos el stub como lectura binaria
file.seekg(STUB_SIZE); //Con seekg establecemos la posición del siguiente carácter que se extraerá del flujo de entrada.
file.read((char*)&data, sizeof(Settings)); //Leemos los datos inyectados por el builder
file.close(); //Cerramos el archivo
cout << data.ip << endl; //Mostramos los datos
cout << data.port << endl;
system("pause");
return 0;
}
Código: Seleccionar todo
#include <fstream>//librería necesaria para la lectura y escritura del archivo
#include <Windows.h>
#include <iostream>
using namespace std;
#define STUB_NAME "Stub.exe" //ruta del stub
struct Settings { //Creamos la estructura que contendrá los parámetros
int port;
char ip[16];
char built[32]; //nombre del nuevo archivo
};
int main() {
Settings data; //Instanciamos la estructura
cout << endl << "Ip: ";
cin >> data.ip;
cout << endl << "Port: ";
cin >> data.port;
cout << endl << "Built name: ";
cin >> data.built;
ifstream stub(STUB_NAME, ios::binary); //abrimos el stub como modo de lectura binaria
ofstream built(data.built, ios::binary); //cremos el nuevo archivo
built << stub.rdbuf(); //volcamos el contenido del stub en el nuevo archivo creado
stub.close(); //cerramos el stub
built.write((char*)&data, sizeof(Settings)); //escribimos los parámetros al final del nuevo archivo (que ahora contiene el código del stub)
built.close(); //lo cerramos
return 0;
}
Colocamos los dos ejecutables en el mismo directorio para más comodidad y ejecutamos el builder.
Introducimos en este caso una ip, un puerto y el nombre con el que se creará el stub inyectado.
Ejecutamos el nuevo .exe y nos debería mostrar los parámetros que introducimos con el builder.