Buenaas gente, queria compartirle con ustedes un cheat que hice con ayuda de variaas personas , simplemente lo que hace es hookear las direcciones de Opengl32, como me aconsejaron no es muy bueno usar este metodo , pero por ahora aprendi de esta manera , ja!
main.cpp
#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
DWORD* glClearPtr=(DWORD*)0x027E85CC;
DWORD* glBeginPtr=(DWORD*)0x027E89EC;
DWORD* glvertexPtr=(DWORD*)0x027E851C;
int sky = 1;
bool nosky = false;
void APIENTRY NewglBegin( GLenum mode )
{
//PERFECT WALLHACK
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);
}
//SIMPLEWALLHACK
if(mode==GL_TRIANGLES||mode==GL_TRIANGLE_STRIP||mode==GL_TRIANGLE_FAN)
{
glDisable(GL_DEPTH_TEST);
}
//WHITEWALLS
if ( mode != GL_TRIANGLES && mode != GL_TRIANGLE_STRIP && mode != GL_TRIANGLE_FAN && mode != GL_QUADS )
{
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
}
//LAMBERT
if(mode == GL_TRIANGLE_STRIP)
{
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);
}
//NO SKY
if(sky == 1 && mode== GL_QUADS)
{ nosky = true;}
else
{ nosky = false;}
glBegin(mode);
}
void APIENTRY NewglClear(GLbitfield mask)
{
if (mask == GL_DEPTH_BUFFER_BIT)
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
glClear(mask);
}
void APIENTRY NewglVertex3fv(const GLfloat *v)
{
if(nosky == true)
{
return;
}
glVertex3fv(v);
}
//FUNCION PRINCIPAL DE DLL
BOOL APIENTRY DllMain(HANDLE hInst, DWORD dwReason, LPVOID lpReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)//SI LA DLL SI INJECTA ...
{
MessageBox(NULL,"WallHack Activated!","Message",MB_OK);
*glBeginPtr=(DWORD)NewglBegin;
*glClearPtr=(DWORD)NewglClear;
*glvertexPtr=(DWORD)NewglVertex3fv;
}
return TRUE;
}
Es muy problame que a varios no les funcione , porque pueden tener distinta version del CS , y a su vez distintas direcciones de las funciones de Opengl, pero ACA (http://foro.elhacker.net/programacion_cc/ayuda_opengl_wallhack_dll-t385689.0.html;msg1837528#msg1837528) el usuario 85 explica como obtener esas direcciones ... bueno espero que les sirva de algo!
S2!
:P VIEJO VICIO QUE SOLIA JUGAR!! ME ACUERDO QUE ME CEBABA MAL CON EL CHEAT 'LIQUID' O EL 'CD-HACK DISABLED' ...HASTA QUE SALIO EL ANTICHEAT SXE PERO ME SIRVIO PARA SALIR DE ESE VICIO :xD
Si, vos lo dijiste.. eso es una demostración muy específica que te di para lograr un wallhack en el CS 3266, muy específico de esa versión.
Mi intención no era que lo tomés como el método a seguir.
Yo antes que mostrarte eso, te había dicho que la mayoría de los hacks (al menos los primeros), interceptaban GetProcAddress para "engañar" al juego por decirlo así.
Fijate si podés utilizar 'Detours' con las funciones de Opengl32, fijate los códigos de karman, si no lo conocés, es un usuario de este foro que se ha dedicado a estas cosas..
Si tu intención no es pasar las detecciones modernas de sistemas antitrampas, podés empezar con 'Detours', seguir con otras formas de 'patching', fijate los códigos de karman por ejemplo, más adelante vas a aprender otras técnicas, por ejemplo hardware breakpoints.
Eso que preguntaste sobre "codecaves" en otro post tuyo, eso es relacionado al 'patching', y son la mayoría métodos intrusivos.
Los breakpoints de hardware, son no intrusivos ya que no parchean nada.
Gracias por lo consejos como siempre 85!
Para que hagas un Hook decente :P.
http://foro.elhacker.net/analisis_y_diseno_de_malware/libreria_c_hook_a_la_iat-t381524.0.html
Sa1uDoS
Si en un orden de decencia, sería algo así (para Opengl32):
- HWBP (Aunque sólo 4 por hilo)
- IAT hook (GPA)
- EAT hook (Opengl32)
- Detours (Opengl32, TIB, o GPA)
- MS Detours (Opengl32 o GPA)
- Wrapper de Opengl32
- parchear el juego (Lo que hicistes vos Luchoz95 XD)
Aunque sólo te estamos diciendo que busqués otros métodos, no tiene nada de malo parchear el juego, lo que pasa es que eso no hace al hook precisamente portable hacia otras versiones del juego.
Saludos
Siempre se empieza de abajo (? ja! , todas esos metodos son en modo usuario o alguno usas ring0 ?
Nop, Ring0 ak no tiene nada que ver. Vos sabés que para ejecutar código en modo Ring0 se requiere un driver, y las librerías son otras que las de modo Ring3 (usuario). Es decir es otro tema XD, se requiere una DDK para compilar drivers, es otro tema
Todo esto es desde Ring3. Pero si te interesa saber si se puede hacer desde Ring0, la respuesta es si, todo o casi todo se puede hacer desde ese nivel.
Sólo que es otra programación (otras librerías).
Andá escalando XD, ya sabés lo que es parchear el juego, sabés lo que es un 'wrapper' de DLL, sabés acerca de usar 'Detours' que también es parchear.
Y también deberías saber acerca de EAT y IAT debido a los múltiples temas que se han publicado al respecto. Por ejemplo el link de mr.blood
aah, claro voy a tratar de ir escalando por metodo
Cita de: Luchoz95 en 8 Abril 2013, 01:35 AM
aah, claro voy a tratar de ir escalando por metodo
La verdad, esto que hiciste se puede considerar parchear el juego, pero en realidad se aplica a cuando cambiás bytes en la memoria del proceso en la parte del código, los punteros son datos aunque podemos considerarlo un parche el hecho de reemplazar un valor por otro.
Los 'Detours' también es "parchear el juego".
Los hooks del tipo EAT y IAT también se trata de parchear, lo mismo, osea punteros.
Pero eso te dije que son métodos
instrusivos.
Son fáciles de detectar y de restaurar.
Por eso cuando uno parchea algo que tiene comprobaciones de seguridad, lo que se debe hacer también es parchear esas comprobaciones XD, para que no te detecten
entonces haciendo un HWBP se puede pasar las comprobaciones de seguridad ?
Si se tratan de medidas de seguridad que tratan de detectar modificaciones en la memoria es obvio que no van a detectar un breakpoint de hardware ya que como te dije, se trata de un método no intrusivo.
Pero hay métodos de detectar o bloquear el uso de breakpoints de hardware, inclusive desde un driver. Pero también se pueden tomar medidas acerca de este tipo de seguridad. Es decir, hay medidas y contramedidas.
Los breakpoints de software por ejemplo, si son intrusivos, ya que deben modificar la memoria insertando un byte correspondiente al INT 3 o interrupción de software (Es como hace el OllyDBG si observás bien con los bpm).
Si hablamos del sXe, no lo uso hace tiempo (años), pero lo instalé recientemente para mostrarte una idea de lo que puede hacer un sistema de seguridad desde un driver.
(http://img443.imageshack.us/img443/5453/sxe1.png) (http://imageshack.us/photo/my-images/443/sxe1.png/)
(http://img692.imageshack.us/img692/3104/sxe2.png) (http://imageshack.us/photo/my-images/692/sxe2.png/)
(http://img690.imageshack.us/img690/1231/sxe3.png) (http://imageshack.us/photo/my-images/690/sxe3.png/)
Inyectado en el juego..
(http://img607.imageshack.us/img607/6596/sxe4.png) (http://imageshack.us/photo/my-images/607/sxe4.png/)
De paso fijate todo lo que intercepta el Chrome XD
Esto es una idea nada más de lo que puede hacer, tendrías que depurar a fondo el sistema de seguridad para realmente saber que comprobaciones tiene (Y primero deshabilitar las protecciones anticracking XD)
Ah y para estrenarlo, me tiró un log con el CS3266, pero con el 4554 no ;-)
2013/04/09 21:13:04 - [CLT] -
2013/04/09 21:13:04 - [CLT] - sXe Injected starting...
2013/04/09 21:13:04 - [CLT] - [D:\SXE]
2013/04/09 21:13:05 - [CLT] - Checking hosts file...
2013/04/09 21:13:05 - [CLT] - Checking hosts file done
2013/04/09 21:13:05 - [CLT] - Win XP (5.1.2600 Service Pack 3) [0]
2013/04/09 21:13:05 - [CLT] - version: 13.3 (Fix 1)
2013/04/09 21:13:05 - [CLT] - [ send in the clowns ]
2013/04/09 21:13:05 - [CLT] - Platform: x86 detected
2013/04/09 21:13:05 - [CLT] - Starting Device Driver
2013/04/09 21:13:05 - [CLT] - service [D:\sXe\ddsxei.sys]
2013/04/09 21:13:05 - [CLT] - Open manager OK
2013/04/09 21:13:06 - [CLT] - Create Service OK
2013/04/09 21:13:06 - [CLT] - Start Service OK
2013/04/09 21:13:06 - [CLT] - Service ready
2013/04/09 21:13:06 - [CLT] - Trying to open device[1]...
2013/04/09 21:13:06 - [CLT] - Service Handle OK
2013/04/09 21:13:06 - [CLT] - [35][7C91D190]
2013/04/09 21:13:06 - [CLT] - [32][7C91D160]
2013/04/09 21:13:06 - [CLT] - [74][7C91D580]
2013/04/09 21:13:06 - [CLT] - [AD][7C91D910]
2013/04/09 21:13:06 - [CLT] - [7A][7C91D5E0]
2013/04/09 21:13:06 - [CLT] - [D5][7C91DB90]
2013/04/09 21:13:06 - [CLT] - [89][7C91D6D0]
2013/04/09 21:13:06 - [CLT] - [FE][7C91DE20]
2013/04/09 21:13:07 - [CLT] - Waiting for game...
2013/04/09 21:15:53 - [CLT] - Proceso [explorer.exe](1652) injecting on PID (3748) -> (ALLOW)[1]
2013/04/09 21:15:53 - [CLT] - Intercepting game... [3748][hl.exe]
2013/04/09 21:15:53 - [CLT] - [D:\Counter-Strike1\hl.exe] -> Incorrect version [fb4905ec0f3636455c3ec35f35863d1e](BLOCKED)
2013/04/09 21:15:54 - [CLT] - Injecting: [D:\sXe\sxe.dll]
2013/04/09 21:15:54 - [CLT] - Injected OK
2013/04/09 21:15:57 - [CLT] - DEP configured for [D:\Counter-Strike1\hl.exe]
2013/04/09 21:15:57 - [CLT] - * Sending shutdown
2013/04/09 21:15:57 - [CLT] - * Termination
2013/04/09 21:15:57 - [CLT] - Game closed!
2013/04/09 21:15:59 - [CLT] - * Cleaning
2013/04/09 21:15:59 - [CLT] - * Stoping service
2013/04/09 21:15:59 - [CLT] - * Service stopped
2013/04/09 21:15:59 - [CLT] - * Service deleted
2013/04/09 21:16:07 - [CLT] - * Cleaning
2013/04/09 21:16:07 - [CLT] - GetLastError(1060)(El servicio especificado no existe como servicio instalado.
)
2013/04/09 21:16:07 - [CLT] - Open service error
2013/04/09 21:16:08 - [CLT] - * Cleaning
2013/04/09 21:16:08 - [CLT] - GetLastError(1060)(El servicio especificado no existe como servicio instalado.
)
2013/04/09 21:16:08 - [CLT] - Open service error
DEP
http://en.wikipedia.org/wiki/Data_Execution_Prevention
http://www.microsoft.com/latam/technet/articulos/mediumbus/depcnfxp.mspx