Otra forma de leer una DLL

devtuxtla
Posts: 392
Joined: Tue Jul 29, 2008 1:55 pm

Re: Otra forma de leer una DLL

Post by devtuxtla »

Hola Willi.

Ya habia probado esta opcion, sin embargo el .EXE generado, es detectado por algunos antivurus (www.avira.com) como un virus.

Por lo tanto, por ahora y mientras no corrigan esta problema no podemos usarlo.

Tambien, para el conocimiento de quienes usan esta herramienta, ellos comentan que todo lo hacen en memoria, sin embargo, cada vez que utilizan un DLL, esta se desempaca en area temporal de usuario, asi que la DLL si se escribe en el HDD, aun que sea en un area tempoal.

Sin embargo es una buena alternativa.

Alguna otra idea ?

Saludos
Visite Chiapas, el paraiso de México.
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Otra forma de leer una DLL

Post by acuellar »

devtuxtla

Hasta que actualices tu FWH podes salir con esta función de Biel y modificada por Daniel para restaurar el archivo incrustado en una direccion especifica.

En el programa principarl

Code: Select all

Function Main()
  If !FILE("C:\WINDOWS\FREEIMAGE.DLL")
    RESTFILEI( "C:\WINDOWS\FREEIMAGE.DLL" )
  Endif
  If !FILE( "C:\WINDOWS\PREV32.DLL" )
     RESTFILEP( "C:\WINDOWS\PREV32.DLL" )
  Endif
*....
Return
*
#pragma BEGINDUMP
#include <Windows.h>
#include <mapiwin.h>
#include <hbApi.h>

HB_FUNC( RESTFILEI )
{
   HRSRC res=FindResource(NULL,"FREEIMAGE",RT_RCDATA);
   DWORD bytesWritten;
   INT size=SizeofResource(NULL,res);
   HGLOBAL hRes=LoadResource(NULL,res);
   unsigned char *pRes=(unsigned char *)LockResource(hRes);
   const char * name = hb_parc( 1 );
   HANDLE hFile=CreateFile( name, GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL); 
   WriteFile(hFile, pRes,size,&bytesWritten,NULL);
   CloseHandle(hFile);
}
#pragma ENDDUMP
**
#pragma BEGINDUMP
#include <Windows.h>
#include <mapiwin.h>
#include <hbApi.h>

HB_FUNC( RESTFILEP )
{
   HRSRC res=FindResource(NULL,"PREV32",RT_RCDATA);
   DWORD bytesWritten;
   INT size=SizeofResource(NULL,res);
   HGLOBAL hRes=LoadResource(NULL,res);
   unsigned char *pRes=(unsigned char *)LockResource(hRes);
   const char * name = hb_parc( 1 );
   HANDLE hFile=CreateFile( name, GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL); 
   WriteFile(hFile, pRes,size,&bytesWritten,NULL);
   CloseHandle(hFile);
}
#pragma ENDDUMP

 
El archivo .RC

Code: Select all

ICON_1 ICON "MIAPLICA.ICO"
FREEIMAGE RCDATA "D:\SISTEMAS\DLLS\FREEIMAGE.DLL"
PREV32 RCDATA "D:\SISTEMAS\DLLS\PREV32.DLL"
 
Lo interesante seria mandar otro parametro que lleve el nombre del RCDATA a la función para no crear varias, no se como se hace.
Ej: RESTFILE("C:\WINDOWS\FREEIMAGE.DLL","FREEIMAGE")

No olvides comprimir tus archivos con UPX para que el .EXE no sea muy grande.

Espero te sirva.

Saludos,

Adhemar
Saludos,

Adhemar C.
Post Reply