[TUTORIAL] vTable Hooking / VMT hooking

c0de

Administrador
Registrado
19 Abr 2020
Mensajes
286
En primer lugar, el método que le mostraré no es la única forma de enganchar vmt, hay algunas otras posibilidades para hacerlo (cambiar el puntero de vtable, etc.) pero ese no es el alcance de este documento en este momento.

Antes de continuar, asegúrese de tener una comprensión exacta de lo que significa un método virtual y una tabla de métodos virtuales.

Please, Acceder or Regístrate to view URLs content!

Please, Acceder or Regístrate to view URLs content!


También debes saber que todo esto solo se puede usar cuando tu objetivo es en realidad una función virtual de una clase, de lo contrario ganó No esté en una tabla de método virtual (puede que no haya ninguna tabla), solo estará en el .text como todas las demás funciones.

Estoy usando Battlefield 3 como ejemplo para este tutorial. Y conectaré una de las funciones de actualización de physicsmanager de los juegos llamadas una vez por cuadro para poder llamar a rayquery desde el hilo de los juegos.

Así es como se ve la clase physicsmanager cuando no he hecho ningún cambio.

1589344197909.png

Tenga en cuenta que el puntero de la tabla de método virtual probablemente siempre estará al comienzo de la clase, que apuntará a la tabla de método virtual.
Ahora, esos métodos virtuales no son más o menos punteros a esas funciones: punteros de función.

Engancharé la quinta función a 0x10 en la tabla de métodos virtuales. Si eres un niño :) genial, ya habrías adivinado que solo sobrescribiremos ese puntero para señalar nuestra función, lo cual es correcto, así que sobrescribiré ese 0x5AD160 para señalar mi gancho.

1589344235658.png

Ahora, cuando se llama a esa función a través de esa clase, llamará a mi función en su lugar, a partir de ahí podemos llamar a la función original, por supuesto.

Así es como podría verse su gancho, obviamente no necesariamente tiene que tenerlo como una función desnuda, si sabe cómo enganchar esta llamada (ps fastcall)

C++:
Please, Acceder or Regístrate to view codes content!

Ahora hay clases / funciones que le brindan un enlace de método virtual fácil, pero me gusta hacer el enlace vmt manualmente-

C++:
Please, Acceder or Regístrate to view codes content!

Creditos
c5