Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Monica_Barcelona en 11 Mayo 2010, 19:29 pm



Título: Mapeao de archivos C++
Publicado por: Monica_Barcelona en 11 Mayo 2010, 19:29 pm
Hola chicos/as como estais?

Bueno el caso es que tengo un codigo que mapea una libreria DLL,,que es este:

Código
  1. const long addres = 0X3DE00;
  2.  
  3. HANDLE Archivo = CreateFile("Libreria.DLL",GENERIC_READ+GENERIC_WRITE....
  4. int size = GetFileSize(Archivo,0);
  5. HANDLE MAPA =  CreateFileMapping(Archivo,0,PAGE_READWRITE,0,size,0);
  6. HANDLE View = MapViewOfFile(MAPA,FILE_MAP_ALL_ACCESS,0,0,0);
  7.  

asta alli bien,pero ahora necesito escribir un texto (char) en la direccion expuesta mas arriba la de la constante,es decir esa direccion esta dentro de la libreria,la busque con WinHex,busque en google i me encontre con la funcion memcpy,la probe pero nada,y creo que no la se utilizar bien esa funcion :S

yo probe conesto:
Código
  1. ptr = &View+addres;
  2. *ptr = "Hola";
  3.  

pero nada :'( soy tonta o pasa algo,alguna sugerencia?


un beso(K)



Título: Re: Mapeao de archivos C++
Publicado por: Horricreu en 11 Mayo 2010, 20:43 pm
WriteFile() (http://msdn.microsoft.com/en-us/library/aa365747(VS.85).aspx) + SetFilePointer() (http://msdn.microsoft.com/en-us/library/aa365541(VS.85).aspx). O quizás WriteProcessMemory() (http://msdn.microsoft.com/en-us/library/ms681674(VS.85).aspx).

Saludos :P


Título: Re: Mapeao de archivos C++
Publicado por: Eternal Idol en 11 Mayo 2010, 21:39 pm
MapViewOfFile no retorna un HANDLE sino un puntero (LPVOID). Con el ampersand sobre View lo que obtenes es la direccion de memoria de la variable y lo que realmente queres es el valor devuelto por MapViewOfFile, es decir la direccion base del mappeo hecho en memoria.

memcpy (http://www.cplusplus.com/reference/clibrary/cstring/memcpy/).


Título: Re: Mapeao de archivos C++
Publicado por: Monica_Barcelona en 11 Mayo 2010, 22:05 pm
osea enteindo que MapViewOfFile ya devuelve una direcion de memoria?? :S


Probe asin:
Código
  1. View = MapViewOfFile(MAPA,FILE_MAP_ALL_ACCESS,0,0,0);
  2.  
  3.  
  4.  
  5. memcpy(View,mensa,sizeof(mensa));
  6.  

i si que me escribe en el DLL pero sale mal ya que no tiene una direccion de memoria exacta a escribir:S

que boba soy :(


Título: Re: Mapeao de archivos C++
Publicado por: Eternal Idol en 11 Mayo 2010, 23:48 pm
Si, devuelve un puntero, siempre consulta la MSDN: MapViewOfFile (http://msdn.microsoft.com/en-us/library/aa366761(VS.85).aspx).

Tenes que declarar otro puntero para usar el offset pero no con &View (por lo que explique antes) sino con View.


Título: Re: Mapeao de archivos C++
Publicado por: Monica_Barcelona en 12 Mayo 2010, 23:03 pm
No entiendo muy bien asin?

ptr = View;


??

como indico la direccion a escribir alli?

probe con esto:

ptr = View+Direccion;

pero no funciono por cierto el ptr es de tipo VOID


(K)


Título: Re: Mapeao de archivos C++
Publicado por: bizco en 12 Mayo 2010, 23:34 pm
repasate los punteros.

ptr = View, para eso directamente declara View por ejemplo void *View  ahi tienes siempre tu base.


Título: Re: Mapeao de archivos C++
Publicado por: Eternal Idol en 12 Mayo 2010, 23:50 pm
Si, algo asi:

Código
  1. char *ptr = (char*)View + Direccion;


Título: Re: Mapeao de archivos C++
Publicado por: Monica_Barcelona en 13 Mayo 2010, 13:06 pm
Hola bueno el code me quedo asina alfinal:
Código
  1. #include <C:\Dev-Cpp\All.h>
  2.  
  3. using namespace std;
  4.  
  5. int main(void)
  6. {
  7.    const long addres = 0X3DE00;
  8.    char Mensa[]="jeje";
  9.  
  10. HANDLE Archivo = CreateFile("Mensa.dll",0,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0);
  11. int size = GetFileSize(Archivo,0);
  12. HANDLE MAPA =  CreateFileMapping(Archivo,0,PAGE_READWRITE,0,size,0);
  13. void* View = MapViewOfFile(MAPA,FILE_MAP_ALL_ACCESS,0,0,0);
  14.  
  15. char *ptr = (char*)View+addres;
  16. memcpy(ptr,Mensa,sizeof(Mensa));
  17.  
  18.  
  19.  
  20.  
  21. return 0;
  22. }
  23.  

pero nada,no me modifica la dll, :(




Título: Re: Mapeao de archivos C++
Publicado por: Eternal Idol en 13 Mayo 2010, 15:02 pm
Tenes que depurar tus programas, ya el CreateFile esta mal. Comproba los parametros (busca esta funcion en la MSDN para mayor precision):

HANDLE CreateFile(
  LPCTSTR lpFileName,
  DWORD dwDesiredAccess,
  DWORD dwShareMode,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  DWORD dwCreationDisposition,
  DWORD dwFlagsAndAttributes,
  HANDLE hTemplateFile
);


Título: Re: Mapeao de archivos C++
Publicado por: Monica_Barcelona en 13 Mayo 2010, 19:19 pm
He tenias razon,el CreateFile estaba mal,admas ya me funciono ya esta conseguido,un saludo Eternal (K) yy gracias a todos tambien




Título: Re: Mapeao de archivos C++
Publicado por: Eternal Idol en 13 Mayo 2010, 23:04 pm
De nada.