Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - panax

#1
Cita de: Mad Antrax 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.

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

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

CitarReadProcessMemory(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!
#2
Cita de: Mad Antrax 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

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:

CitarGetWindowThreadProcessId(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.
#3
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:



Citarhwnd = 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.
#4
Cita de: Miseryk en  6 Mayo 2014, 01:36 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.
#5
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.