Título: Interceptar Opengl32 con Detours y obtener un WH Publicado por: 85 en 9 Abril 2013, 19:29 pm Para terminar de redondear el tema de interceptar Opengl32 usando detours, muestro una pequeña base para crear un WH, utiliza una función personalizada para instalar un hook del tipo DETOUR.
Habíamos visto en otros tutoriales como se hace, y que se trata de una técnica intrusiva porque requiere parchear la memoria (código) del proceso víctima. http://foro.elhacker.net/programacion_cc/detours-t168884.0.html No tiene nada que ver con otros tutoriales que muestran como se modifican los valores de algunos punteros que corresponden a datos en el proceso. Ej: http://foro.elhacker.net/programacion_cc/codigo_fuente_cheat_cs_16-t387341.0.html Dejo el código funcional y el proyecto para descargar como siempre, dejo unas imágenes.. En este caso para diferenciarnos de otros tutoriales, explico la forma en que se puede cargar esta DLL en el proceso "hl.exe" que corresponde al juego Counter-Strike. Se trata de ir a la carpeta del juego, y buscar una DLL de las que sabemos que no son necesarias en el juego pero de todas formas son cargadas al proceso. Hay otras DLLs que son cargadas y algunas de sus funciones o todas, son utilizadas en el proceso, por lo que no se puede quitarlas, sino más bien hacer un 'wrapper' de ellas. Pero no quitarlas. Vamos a ver una DLL que si la podemos quitar que se llama "DemoPlayer.dll". Vamos a quitarla y poner nuestra DLL con el WH en su lugar. Obviamente la tenemos que renombrar a "demoplayer.DLL" si es que no tiene ese nombre toda via. (http://img255.imageshack.us/img255/6613/demo1z.png) (http://imageshack.us/photo/my-images/255/demo1z.png/) (http://img805.imageshack.us/img805/3023/demo2l.png) (http://imageshack.us/photo/my-images/805/demo2l.png/) Al final quiero decir que los sistemas de seguridad suelen escanear en la memoria, por ejemplo los primeros 5 bytes de algunas funciones para determinar si tienen 'detours'. Pero a veces hacen otras comprobaciones como CRC32 de toda una función, o quien sabe que otras comprobaciones.. el tema es que este es un método intrusivo. Código
otra cosa que quiero agregar, es que el 'hook' a GetProcAddress no es necesario, pero está hecho y sirve para demostrar algo importante. cuando salimos del juego, osea del proceso, antes se descargan las DLLs entre otras cosas, pero cuando se descarga nuestra DLL la memoria del proceso continua parcheada (los hooks que instalamos), y las referencias a los hooks son inválidas ya que la DLL se ha descargado. Esto no importa para Opengl32 porque nadie va a utilizar Opengl32 al salir, pero con GetProcAddress si pasa esto. Por eso se debería considerar restaurar los bytes parcheados en GetProcAddress, o más fácil es hacer que la DLL se descargue cuando ya no sea necesaria (cuando no se haga más referencia a los hooks). Con un ExitProcess(100) queda resuelto, en realidad no investigué acerca de este tema, sólo traté de arreglarlo de alguna forma. Pero es un detalle a considerar. PROYECTO http://www.mediafire.com/?qfb65fsfgaf5doa Título: Re: Interceptar Opengl32 con Detours y obtener un WH Publicado por: Luchoz95 en 10 Abril 2013, 02:55 am puede ser que los GetAsyncKeyState no funcionen? lo probe y no me andubo
Título: Re: Interceptar Opengl32 con Detours y obtener un WH Publicado por: 85 en 10 Abril 2013, 03:06 am Si eso estaba en el código original de SharkBoy999, no lo quité pero eso no funciona así, es decir vos comprobás si GetAsyncKeyState es diferente de 0, ya que la especificación de la MSDN dice que si el bit más significativo es 1 es que la llave está presionada, y dice que no se tome en cuenta otros comportamientos, por lo tanto no hace falta usar máscara de bits, sólamente comprobando que no sea 0 es suficiente.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646293(v=vs.85).aspx EDIT: XD aparte la función 'toggle' es cualquier cosa , es decir no le des bola al resto del código porque pertenece a la base de SharkBoy999, es un man que hizo un par de hacks en el pasado y siempre que publicaba códigos lo hacía poniendo errores para que no los compile cualquiera o para que no funcionen. Lo mismo hacían muchos otros. Es decir, concentráte en el método del HOOK Saludos Título: Re: Interceptar Opengl32 con Detours y obtener un WH Publicado por: Luchoz95 en 10 Abril 2013, 03:46 am jaja ! bueno me quedaba esa duda ! , dale voy a concentrarme en eso, excelente aporte 85!
Saludos! Título: Re: Interceptar Opengl32 con Detours y obtener un WH Publicado por: 85 en 10 Abril 2013, 04:48 am Este es un ejemplo de uso también.. lo busqué en Google :P Código: #define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) 0x8000 = SHRT_MAX http://www.cplusplus.com/reference/climits/ Lo que podés hacer es usar un hilo aparte para detectar las llaves, y usar una variable global por ejemplo para comprobar en alguna de las funciones de Opengl32. En los hacks se usa un sistema de variables de control, pero es otro tema ya que no se utiliza GetAsyncKeyState sino que hay una función del juego que sirve para obtener información de llaves presionadas. |