elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [SOLUCIONADO] Acceso a dirección de memoria con pointers en varios niveles
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] Acceso a dirección de memoria con pointers en varios niveles  (Leído 4,273 veces)
panax

Desconectado Desconectado

Mensajes: 5


Ver Perfil
[SOLUCIONADO] Acceso a dirección de memoria con pointers en varios niveles
« en: 6 Mayo 2014, 01:08 am »

He intentado hacer un pequeño programa en C++ que he probado de multiples maneras poder acceder a este valor de la dirección de memoria pero no he podido. Sera que alguien puede hecharme una mano?


Seria algo asi? : ReadProcessMemory(hproc, (LPCVOID)((((((ClientDLL + 0x007C3D1C) + 0x10) + 0x2c) + 0x3e0) + 0x17c)), &buff, 1, NULL);

Quiero obtener la dirección a la que apuntan (y obviamente su valor).

A nivel de sintaxis, que debo hacer?

PD: Se que debo obtener el handler del modulo client.dll y de alli partir (base address creo que se llama) pero he intentado de todo y nada :( alguna idea?.

Saludos.


« Última modificación: 6 Mayo 2014, 17:00 pm por Mad Antrax » En línea

Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
Re: [Ayuda]Acceso a dirección de memoria con apuntadores en varios niveles
« Respuesta #1 en: 6 Mayo 2014, 01:36 am »

He intentado hacer un pequeño programa en C++ que he probado de multiples maneras poder acceder a este valor de la dirección de memoria pero no he podido. Sera que alguien puede hecharme una mano?


Seria algo asi? : ReadProcessMemory(hproc, (LPCVOID)((((((ClientDLL + 0x007C3D1C) + 0x10) + 0x2c) + 0x3e0) + 0x17c)), &buff, 1, NULL);

Quiero obtener la dirección a la que apuntan (y obviamente su valor).

A nivel de sintaxis, que debo hacer?

PD: Se que debo obtener el handler del modulo client.dll y de alli partir (base address creo que se llama) pero he intentado de todo y nada :( alguna idea?.

Saludos.

Lo que hace el multi level es lo siguiente.

mov eax, address
mov eax, [eax]
add eax, offset

osea que la 1ra vez que sumás un offset, tenés que leer ese address el cual es la suma de: Address + offset

La sintaxis sería:
[[[Address + offset] + offset] + offset] + ...

Saludos!


En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
panax

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: [Ayuda]Acceso a dirección de memoria con apuntadores en varios niveles
« Respuesta #2 en: 6 Mayo 2014, 02:03 am »

Lo que hace el multi level es lo siguiente.

mov eax, address
mov eax, [eax]
add eax, offset

osea que la 1ra vez que sumás un offset, tenés que leer ese address el cual es la suma de: Address + offset

La sintaxis sería:
[[[Address + offset] + offset] + offset] + ...

Saludos!

Gracias por tu respuesta :).

Lo he probado pero presento errores de compilacion: main.cpp expected primary-expression before '[' token

Lo he colocado asi: ReadProcessMemory(hproc, (LPCVOID)[[[[[ClientDLL + 0x007C3D1C] + 0x10] + 0x2c] + 0x3e0] + 0x17c] ), &buff, 1, NULL);

De este modo (o parecido) no funciona? O es que debo ir haciendo Read a Read hasta llegar al ultimo offset?

Saludos.
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: [Ayuda]Acceso a dirección de memoria con apuntadores en varios niveles
« Respuesta #3 en: 6 Mayo 2014, 05:54 am »

He intentado hacer un pequeño programa en C++ que he probado de multiples maneras poder acceder a este valor de la dirección de memoria pero no he podido. Sera que alguien puede hecharme una mano?


Seria algo asi? : ReadProcessMemory(hproc, (LPCVOID)((((((ClientDLL + 0x007C3D1C) + 0x10) + 0x2c) + 0x3e0) + 0x17c)), &buff, 1, NULL);

Quiero obtener la dirección a la que apuntan (y obviamente su valor).

A nivel de sintaxis, que debo hacer?

PD: Se que debo obtener el handler del modulo client.dll y de alli partir (base address creo que se llama) pero he intentado de todo y nada :( alguna idea?.

Saludos.
No entiendo la imagen con lo de varios de niveles de apuntamiento pero supongo que te referis a punteros que apuntan a otros y así sucesivamente,
Si es así, se debe llamar multiples veces a ReadProcessMemory:

ReadProcessmMemory(h,DLLBase+Off,&Ptr1,sizeof(Ptr1),&read)
ReadProcessmMemory(h,Ptr1,&Ptr2,sizeof(Ptr2),&read)
ReadProcessmMemory(h,Ptr2,&Ptr3,sizeof(Ptr3),&read)
ReadProcessmMemory(h,ptr3,&Value,sizeof(Value),&read)

En el programa del proceso remoto ese puntero deberia estar declarado como: Type*** Ptr

En línea

panax

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: [Ayuda]Acceso a dirección de memoria con apuntadores en varios niveles
« Respuesta #4 en: 6 Mayo 2014, 14:43 pm »

Hola x64Core gracias por tu respuesta.

He intentado lo que dijiste pero no entendi muy bien lo de "En el programa del proceso remoto ese puntero deberia estar declarado como: Type*** Ptr"


De todos modos te adjunto mi código:



Citar
    hwnd = FindWindow(0, "Game Exec");
    GetWindowThreadProcessId(hwnd, &pId);
    hproc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pId);
    DLL = GetModuleBase(pId, "client.dll");
    DWORD ptr1;
    DWORD ptr2;
    DWORD ptr3;
    DWORD ptr4;
    DWORD ptr5;
    DWORD read;
    while(true)
    {
        ReadProcessMemory(hproc, (LPCVOID)(DLL + 0x007c3d1c), &ptr1, sizeof(ptr1), &read);
        ReadProcessMemory(hproc, &ptr1, &ptr2, sizeof(ptr2), &read);
        ReadProcessMemory(hproc, &ptr2, &ptr3, sizeof(ptr3), &read);
        ReadProcessMemory(hproc, &ptr3, &ptr4, sizeof(ptr4), &read);
        ReadProcessMemory(hproc, &ptr4, &ptr5, sizeof(ptr5), &read);
        cout << ptr5 << endl;
        Sleep(100);
    }

Offsets:



Que es lo que esta mal?, disculpen las molestias :P.

Saludos.
En línea

Mad Antrax
Colaborador
***
Desconectado Desconectado

Mensajes: 2.166


Cheats y Trainers para todos!


Ver Perfil WWW
Re: [Ayuda]Acceso a dirección de memoria con apuntadores en varios niveles
« Respuesta #5 en: 6 Mayo 2014, 14:55 pm »

Tienes que leer offset por offset, no puedes hacerlo de golpe. Es como te ha explicado x64Core

Lee el primer offset e imprimelo por pantalla, deberás ver 21840e38
Luego deberas leer el offset 21840e38+10
...

Así hasta llegar al final. Ánimo
En línea

No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.
panax

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: [Ayuda]Acceso a dirección de memoria con apuntadores en varios niveles
« Respuesta #6 en: 6 Mayo 2014, 15:45 pm »

Tienes que leer offset por offset, no puedes hacerlo de golpe. Es como te ha explicado x64Core

Lee el primer offset e imprimelo por pantalla, deberás ver 21840e38
Luego deberas leer el offset 21840e38+10
...

Así hasta llegar al final. Ánimo

Gracias por tu pronta respuesta :D.

Entiendo lo que hay que hacer a nivel teorico pero he intentado lo que dices (imprimir las direcciones) y me salen otras que no son.

Lo he intentado con este:

Citar
   GetWindowThreadProcessId(hwnd, &pId);
    hproc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pId);
    DLL = GetModuleBase(pId, "client.dll");
    DWORD ptr1;
    while(true)
    {                      
        ReadProcessMemory(hproc, (LPCVOID)(DLL + 0x007C3D1C), &ptr1, sizeof(ptr2), NULL);
        cout << ptr1 << endl;
        
        Sleep(100);
    }

Y mi salida es:



Creo que mi problema es algún desreferenciamiento para ver la direccion de memoria que almacena (o ese valor que me arroja es la direccion de memoria en decimal?).

Saludos.
En línea

Mad Antrax
Colaborador
***
Desconectado Desconectado

Mensajes: 2.166


Cheats y Trainers para todos!


Ver Perfil WWW
Re: [Ayuda]Acceso a dirección de memoria con apuntadores en varios niveles
« Respuesta #7 en: 6 Mayo 2014, 16:28 pm »

Lo estás haciendo bien, ese numero que estás imprimiendo está en decimal. Pasalo a HEX y tendrás el valor del primer offset.

Es decir, coge ese numero, pasalo a hexadecimal y sumale 0x10. El resultado de esa operación deberás de usarlo para ejecutar otro ReadProcessMemory. Así hasta llegar a tu offset deseado.

(es un coñazo) xD

Te recomiendo que te leas mi tutorial avanzado de cheatengine, quizás puedas adquirir más conocimientos.
En línea

No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.
panax

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: [Ayuda]Acceso a dirección de memoria con apuntadores en varios niveles
« Respuesta #8 en: 6 Mayo 2014, 16:38 pm »

Lo estás haciendo bien, ese numero que estás imprimiendo está en decimal. Pasalo a HEX y tendrás el valor del primer offset.

Es decir, coge ese numero, pasalo a hexadecimal y sumale 0x10. El resultado de esa operación deberás de usarlo para ejecutar otro ReadProcessMemory. Así hasta llegar a tu offset deseado.

(es un coñazo) xD

Te recomiendo que te leas mi tutorial avanzado de cheatengine, quizás puedas adquirir más conocimientos.

UN MILLÓN!!! muchisimas gracias, al fin lo he logrado jejeje.

Finalmente a quedado asi para los que en un futuro tengan mi problema:

Citar
ReadProcessMemory(hproc, (LPCVOID)(DLL + 0x007C3D1C), &ptr1, sizeof(ptr1), NULL);
        ReadProcessMemory(hproc, (LPCVOID)(ptr1 + 0x10), &ptr1, sizeof(ptr1), NULL);
        ReadProcessMemory(hproc, (LPCVOID)(ptr1 + 0x2c), &ptr1, sizeof(ptr1), NULL);
        ReadProcessMemory(hproc, (LPCVOID)(ptr1 + 0x3e0), &ptr1, sizeof(ptr1), NULL);
        ReadProcessMemory(hproc, (LPCVOID)(ptr1 + 0x17c), &ptr1, sizeof(ptr1), NULL);
        printf("CAST: %x\n", ptr1); //un casteo bastante balurdo xD

Me pasare por tu tutorial de cheat engine como lo has mencionado, soy nuevo en esto y es un tema bastante interesante ya que lo poco que se lo aprendi a coñazos xD :).

Saludos y repito muchisimas gracias a los que se molestaron en responder!
En línea

Mad Antrax
Colaborador
***
Desconectado Desconectado

Mensajes: 2.166


Cheats y Trainers para todos!


Ver Perfil WWW
Re: [Ayuda]Acceso a dirección de memoria con apuntadores en varios niveles
« Respuesta #9 en: 6 Mayo 2014, 17:00 pm »

Ok, te marco el tema como solventado.

Saludos :)
En línea

No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error de acceso a memoria (no trabajo con memoria :S)
Programación Visual Basic
SERBice 8 4,926 Último mensaje 21 Junio 2008, 13:56 pm
por Lambda
imprimir los bits que hay en una direccion de memoria « 1 2 »
ASM
lapras 11 10,815 Último mensaje 4 Diciembre 2009, 16:26 pm
por Yurix
Darle la vuelta a una direccion de memoria.
Análisis y Diseño de Malware
0xDani 2 2,890 Último mensaje 2 Diciembre 2012, 21:02 pm
por 0xDani
Problema representación dirección de memoria en C.
Programación C/C++
lanun 6 2,825 Último mensaje 28 Febrero 2014, 19:44 pm
por lanun
[Solucionado] Liberar memoria de 2 punteros apuntando a la misma dirección(C) « 1 2 »
Programación C/C++
NOB2014 13 6,489 Último mensaje 4 Mayo 2016, 14:41 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines