Otra forma de leer una DLL

Re: Otra forma de leer una DLL

Postby devtuxtla » Wed Oct 12, 2011 1:32 am

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.
devtuxtla
 
Posts: 392
Joined: Tue Jul 29, 2008 1:55 pm

Re: Otra forma de leer una DLL

Postby acuellar » Wed Oct 12, 2011 7:09 pm

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  Expand view

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  Expand view

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.
User avatar
acuellar
 
Posts: 1599
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 159 guests