Autor
|
Tema: Ayuda , Opengl Wallhack DLL (Leído 6,750 veces)
|
Luchoz95
Desconectado
Mensajes: 58
|
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 .. #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 !
|
|
|
En línea
|
|
|
|
MCKSys Argentina
|
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?
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
85
|
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 utiliza GetProcAddress para resolver Opengl32, fijate el log de GetProcAddress Luchoz95 El log completo http://www.mediafire.com/?zdqbvczz20g33zfEsto es justo lo que estábamos hablando el otro día MCKSys Argentina XD, sobre lo de interceptar GPA para luego interceptar Opengl32
|
|
|
En línea
|
|
|
|
Luchoz95
Desconectado
Mensajes: 58
|
a ver voy de apoco ... no soy muy bueno en programacion por eso , no entiendo mcuho .... MCKSys ArgentinaEl programa está llamando a glBegin de tu DLL? Cuando te referis al programa , que programa decis vos ? hl? Estás exportando la función? La funcion es glBegin no ? y no se exporta con void __stdcall ? Quizás deberías parchear la IAT del EXE en runtime para que redireccione a tu DLL? me mataste . ja!
|
|
|
En línea
|
|
|
|
MCKSys Argentina
|
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!
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
BloodSharp
Desconectado
Mensajes: 812
¡ Hiperfoco !
|
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... B#
|
|
|
En línea
|
|
|
|
85
|
Bienvenido IEAX 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) 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). Entonces vas a esa dirección y te encontrás con algo así.. Copiás esa dirección 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). void __stdcall Mi_glBegin( GLenum mode ) { glBegin(mode); }
|
|
|
En línea
|
|
|
|
Luchoz95
Desconectado
Mensajes: 58
|
Si genteee logreee hacer el wallhack !! Muchsisisiisimaaaas gracias a todoos ! aca dejo el source #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; }
|
|
|
En línea
|
|
|
|
85
|
Nice
|
|
|
En línea
|
|
|
|
BloodSharp
Desconectado
Mensajes: 812
¡ Hiperfoco !
|
Bienvenido IEAX gracias por tu contribución De nada 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). 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#
|
|
« Última modificación: 18 Marzo 2013, 03:57 am por IEAX »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Necesito un wallhack porfas (?)
Juegos y Consolas
|
b182
|
0
|
1,655
|
22 Noviembre 2008, 17:42 pm
por b182
|
|
|
X-Spec 1.1 Demo Wallhack
Juegos y Consolas
|
SmopuiM
|
0
|
3,496
|
27 Septiembre 2009, 18:15 pm
por SmopuiM
|
|
|
Se acabo el Wallhack de Karman??¿
« 1 2 »
Juegos y Consolas
|
skabio_10
|
16
|
14,117
|
13 Noviembre 2009, 19:37 pm
por Artikbot
|
|
|
(Ayuda) Sentar las bases en OpenGL
Programación C/C++
|
Seyro97
|
4
|
2,674
|
6 Octubre 2014, 22:53 pm
por Seyro97
|
|
|
(Ayuda - OpenGL) Problemas de vocabulario
Programación C/C++
|
Seyro97
|
5
|
3,128
|
30 Noviembre 2014, 19:35 pm
por zShackra
|
|