Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Luchoz95 en 17 Marzo 2013, 07:41 AM

Título: Ayuda , Opengl Wallhack DLL
Publicado por: Luchoz95 en 17 Marzo 2013, 07:41 AM
hola que tal , estoy tratando de hacer un wallhack para un juego y estoy aprendiendo de post de aca del foro, y me salio esto ..
Código (cpp) [Seleccionar]
#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>

void __stdcall glBegin( GLenum mode )
{

if(!(mode==GL_TRIANGLES||mode==GL_TRIANGLE_STRIP||mode==GL_TRIANGLE_FAN||mode==GL_QUADS))
{
GLfloat curcol[4];
glGetFloatv(GL_CURRENT_COLOR, curcol);
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glColor4f(curcol[0],curcol[1],curcol[2],0.5f);
glClearColor(0.0f,0.0f,0.0f,0.0f);
}
glBegin(mode);
}

BOOL __stdcall DllMain(HANDLE hInst, DWORD dwReason, LPVOID lpReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
MessageBox(NULL,L"inject!",L"luchoooo",MB_ICONWARNING | MB_OK);
}
return TRUE;
}
}

Compila todo de 10 la dll, pero cuando la inyecto , no pasa nada en el juego , el Messagebox injecta , pero lo de opengl no , alguien tiene idea que me hace falta ? saludos !
Título: Re: Ayuda , Opengl Wallhack DLL
Publicado por: MCKSys Argentina en 17 Marzo 2013, 08:18 AM
El programa está llamando a glBegin de tu DLL?
Estás exportando la función?
Quizás deberías parchear la IAT del EXE en runtime para que redireccione a tu DLL?
Título: Re: Ayuda , Opengl Wallhack DLL
Publicado por: 85 en 17 Marzo 2013, 11:01 AM
Lo que te dice MCKSys Argentina está bien, digamos son las preguntas que deberías hacerte. Pero para este juego necesitás hacer otra cosa.
fijate primero esta imagen, son los imports del ejecutable del juego
(http://img838.imageshack.us/img838/2212/hl1b.png) (http://imageshack.us/photo/my-images/838/hl1b.png/)

utiliza GetProcAddress para resolver Opengl32,

fijate el log de GetProcAddress Luchoz95
(http://img687.imageshack.us/img687/6950/gpalog1.png) (http://imageshack.us/photo/my-images/687/gpalog1.png/)

El log completo
http://www.mediafire.com/?zdqbvczz20g33zf

Esto es justo lo que estábamos hablando el otro día MCKSys Argentina XD, sobre lo de interceptar GPA para luego interceptar Opengl32


Título: Re: Ayuda , Opengl Wallhack DLL
Publicado por: Luchoz95 en 17 Marzo 2013, 16:41 PM
a ver voy de apoco ... no soy muy bueno en programacion por eso , no entiendo mcuho ....
MCKSys Argentina
CitarEl programa está llamando a glBegin de tu DLL?
Cuando te referis al programa , que programa decis vos ? hl?
CitarEstás exportando la función?
La funcion es glBegin no ? y no se exporta con void __stdcall ?
CitarQuizás deberías parchear la IAT del EXE en runtime para que redireccione a tu DLL?
me mataste . ja!
Título: Re: Ayuda , Opengl Wallhack DLL
Publicado por: MCKSys Argentina en 17 Marzo 2013, 19:31 PM
Me refiero al ejecutable del juego que estés intentando parchear. (Al parecer es el de Half-Life)

No conozco mucho de programación en C++, por eso te pregunto si estás exportando la función (en ASM no basta sólo la declaración, debe especificarse por separado para que se exporte.)

Si el programa importa la función buscada, directamente desde la IAT, sólo es cuestión de parchearla y redireccionarla al momento de cargar la DLL y listo (fijate las imagenes de 85).
Si está usando GetProcAddress para obtener la dirección, sería algo parecido: reemplazar el valor obtenido por tu direccion.

Ahora, en el último caso (direccion calculada con GetProcAddress) hay otros problemas que pueden ocurrir:

1) Que la dirección se calcule LUEGO de que tu DLL se carga. Ahi deberas tratar de hacer un callback o hook para que tu codigo se ejecute nuevamente. Acá debes recordar que hookear una API en mejor que tocar el propio EXE.

2) Que la direccion donde se guardará la direccion de GetProcAddress se calcule en runtime. De esta forma es dificil calcular luego la direccion, pues se crea en tiempo de ejecucion y normalmente no hay muchas referencias a dicha direccion (a menos que cometan el error de copiarla a una sección del EXE).

Saludos!
Título: Re: Ayuda , Opengl Wallhack DLL
Publicado por: BloodSharp en 17 Marzo 2013, 20:58 PM
El lo que realmente quiere hacer es hookear la función glBegin. En cuanto a GetProcAddress el juego al tener múltiples opciones de video software, opengl, d3d no puede tener los módulos cargados al principio (eso creo), por lo que lo carga en algún lado con LoadLibrary y después mediante GetProcAddress va metiendo las direcciones (en este caso de opengl) en un array de direcciones...

(http://i.imgur.com/hyMrXG3.png)


B#
Título: Re: Ayuda , Opengl Wallhack DLL
Publicado por: 85 en 18 Marzo 2013, 01:59 AM
Bienvenido IEAX  ;D gracias por tu contribución

como dijo my friend IEAX se trata de las direcciones de Opengl32 que se guardaron en un array. Te mostramos como tenés que hacer con el depurador para llegar a obtener las direcciones que quieras.

Lo primero es obtener la dirección de la función (glBegin)
(http://img692.imageshack.us/img692/2427/gl1f.png) (http://imageshack.us/photo/my-images/692/gl1f.png/)
(http://img805.imageshack.us/img805/6691/gl2.png) (http://imageshack.us/photo/my-images/805/gl2.png/)

Ponés un BP y cuando llegás al punto en el que fue llamada, vas
a tener que mirar la pila, específicamente la dirección de retorno,
que es donde estabas anteriormente (trace back).
(http://img855.imageshack.us/img855/2669/gl3.png) (http://imageshack.us/photo/my-images/855/gl3.png/)

Entonces vas a esa dirección y te encontrás con algo así..
(http://img9.imageshack.us/img9/1945/gl4.png) (http://imageshack.us/photo/my-images/9/gl4.png/)

Copiás esa dirección
(http://img843.imageshack.us/img843/613/gl45.png) (http://imageshack.us/photo/my-images/843/gl45.png/)
(http://img27.imageshack.us/img27/139/gl5.png) (http://imageshack.us/photo/my-images/27/gl5.png/)

Y la ponés en una variable puntero, así

DWORD* Ptr=(DWORD*)0x027E89EC;


y luego reemplazás su valor por el de la dirección de tu glBegin.
(función de reemplazo o hook).
*Ptr=(DWORD) Mi_glBegin;


Código (cpp) [Seleccionar]

void __stdcall Mi_glBegin( GLenum mode )
{
glBegin(mode);
}


Título: Re: Ayuda , Opengl Wallhack DLL
Publicado por: Luchoz95 en 18 Marzo 2013, 02:41 AM
Si genteee logreee hacer el wallhack !!
Muchsisisiisimaaaas gracias a todoos !
aca dejo el  source
Código (cpp) [Seleccionar]

#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>

DWORD* Ptr=(DWORD*)0x027E89EC;


void __stdcall NewglBegin( GLenum mode )
{
if(mode == GL_TRIANGLE_STRIP)

{

glDisable(GL_DEPTH_TEST);

}
glBegin(mode);
}

BOOL __stdcall DllMain(HANDLE hInst, DWORD dwReason, LPVOID lpReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
*Ptr=(DWORD) NewglBegin;
}
return TRUE;
}
Título: Re: Ayuda , Opengl Wallhack DLL
Publicado por: 85 en 18 Marzo 2013, 02:55 AM
Nice  ::)
Título: Re: Ayuda , Opengl Wallhack DLL
Publicado por: BloodSharp en 18 Marzo 2013, 03:50 AM
Cita de: 85 en 18 Marzo 2013, 01:59 AM
Bienvenido IEAX  ;D gracias por tu contribución

De nada  ;D

Cita de: 85 en 18 Marzo 2013, 01:59 AMY la ponés en una variable puntero, así

DWORD* Ptr=(DWORD*)0x027E89EC;


y luego reemplazás su valor por el de la dirección de tu glBegin.
(función de reemplazo o hook).
*Ptr=(DWORD) Mi_glBegin;


Código (cpp) [Seleccionar]

void __stdcall Mi_glBegin( GLenum mode )
{
glBegin(mode);
}

El ejemplo está muy bien, el único problema de poner esa dirección directamente como le sugerís a lucho es que solo va a funcionar para un par de versiones del juego. Esto se debe a que en las versiones antiguas los módulos no eran cargados normalmente, me refiero a que son mapeados directamente siempre en una misma zona específica de memoria, por lo cual siempre le va a funcionar con la misma dirección.
En las versiones del juego más actuales las dll son cargadas normalmente y seguramente estarán en otras posiciones de memoria cada vez que inicie el juego...


B#
Título: Re: Ayuda , Opengl Wallhack DLL
Publicado por: damianf en 22 Mayo 2013, 17:46 PM
Lucho, queria hacerte una consulta, como hago ahora para usar el cheat? yo lo compilo pero me tira cuatro errores, vos me podrias pasar el .exe o lo necesario para poder usarlo?? muchas gracias!!
Título: Re: Ayuda , Opengl Wallhack DLL
Publicado por: mr.blood en 24 Mayo 2013, 08:13 AM
Cita de: IEAX en 18 Marzo 2013, 03:50 AM
De nada  ;D

El ejemplo está muy bien, el único problema de poner esa dirección directamente como le sugerís a lucho es que solo va a funcionar para un par de versiones del juego. Esto se debe a que en las versiones antiguas los módulos no eran cargados normalmente, me refiero a que son mapeados directamente siempre en una misma zona específica de memoria, por lo cual siempre le va a funcionar con la misma dirección.
En las versiones del juego más actuales las dll son cargadas normalmente y seguramente estarán en otras posiciones de memoria cada vez que inicie el juego...


B#

Me parece una mejor opción hacer API Hooking a GetProcAddress y hacer strcmp(cadena, "glBegin"); si coinciden GPA devolverá la dirección a tu función si no, tiras un GPA normal para que el juego funcione bien ;).

No es algo difícil y haces el cheat más compatible con otras versiones y con otros PC ;).

Sa1uDoS
Título: Re: Ayuda , Opengl Wallhack DLL
Publicado por: BloodSharp en 25 Mayo 2013, 03:09 AM
Cita de: mr.blood en 24 Mayo 2013, 08:13 AM
Me parece una mejor opción hacer API Hooking a GetProcAddress y hacer strcmp(cadena, "glBegin"); si coinciden GPA devolverá la dirección a tu función si no, tiras un GPA normal para que el juego funcione bien ;).

No es algo difícil y haces el cheat más compatible con otras versiones y con otros PC ;).

Sa1uDoS

Si esa es una, también se podría hacer inline hooks, EAT hooks (antes que llame a GPA), excepciones, etc... hay varias maneras, lo ideal sería utilizar una que no tenga tantos problemas y que funcione para cualquier versión del juego y sea soportada para cualquier tipo de pc como decís...
De todas maneras eso queda al criterio del programador, utilizar la que prefiera y si lo hace compatible o no.


B#