Enviar respuesta 
WallHacks & Anti-WallHacks (Información & Funcionamiento)
Autor Mensaje
Cr3470r Ausente
Anti-cheat Team


Mensajes: 438
Registro en: Feb 2014
Reputación: 8
Mensaje: #1
WallHacks & Anti-WallHacks (Información & Funcionamiento)
Descripción:

El WallHack es un tipo de Cheat, el cual, mediante la alteración del renderizado del juego, nos permite aplicar diferentes efectos, tanto al mapa como a las entidades, como permitiéndonos ver a través de las paredes, aplicar efectos al texturizado del render, entre otras cosas ...

Tipos de WallHacks & sus códigos:

Mediante el render del OpenGL del juego, es posible aplicar las siguientes ejecuciones de códigos para obtener diferentes efectos.
Nota: No voy a explicar TODOS los códigos existentes, porque en verdad que son infinitos los efectos que se pueden hacer, pero detallaré los más usados.

Método #1: (XQZ)

Èste es el más utilizado por Cheaters debido a lo simple que es, cabe destacar que este método tuvo muchas maneras de aplicarse en el juego, tanto con el hookeo de una función de OpenGL, como un parcheo en memoria del juego (como lo hacia el WallHack.sys del Cheat para sXe 7.7 que se cargaba con el programa OSR Loader).

El código es el siguiente:

Código PHP:
//Esto se hace mediante el hookeo a una función de OpenGL32.dll
//Esto funciona para CUALQUIER JUEGO que utilice el OpenGL como renderizado...

void WINAPI Hook_glBegin GLenum mode//Función hookeada de Opengl32.dll
{
    if ( 
mode == GL_TRIANGLE_STRIP || mode == GL_TRIANGLE_FAN //Si se va a renderizar un player (entidad) ...
        
glDisable GL_DEPTH_TEST ); //No hacer NINGUNA comparación de profundidad ...
        
    
else if ( mode != GL_QUADS && mode != GL_LINES //Caso contrario, si se va a renderizar una parte del mapa ...
        
glEnable GL_DEPTH_TEST ); //Hacer comparación de profundidad y actualizar el depth buffer ...


El efecto en el juego es el siguiente:

Image

Método #2: (Asus)

Otro de los más utilizados por Cheaters, este es generalmente el mismo que el anterior, pero con la diferencia que se le cambia el Alpha al texturizado del mapa, permitiendo ver a través de las paredes con más complejidad ...

El código es el siguiente:

Código PHP:
//Esto se hace mediante el hookeo a una función de OpenGL32.dll
//Esto funciona para CUALQUIER JUEGO que utilice el OpenGL como renderizado...

void WINAPI Hook_glBegin GLenum mode//Función hookeada de Opengl32.dll
{
    if ( ! ( 
mode == GL_TRIANGLE_STRIP || mode==GL_TRIANGLE_FAN || mode == GL_QUADS ) ) //Si se va a renderizar una parte del mapa ...
    
{
        static 
float col[4];
        
glGetFloatv (GL_CURRENT_COLORcol ); //Obtener color actual ...
        
glDisable GL_DEPTH_TEST ); //No hacer NINGUNA comparación de profundidad ...
        
glEnable GL_BLEND ); //Activar esta extensión para poder cambiar el Alpha a continuación ...
        
glBlendFunc GL_ONE_MINUS_SRC_ALPHAGL_SRC_ALPHA_SATURATE ); //Especificamos la computación del blending ...
        
glColor4f col[0], col[1], col[2], 0.667f ); //Aplicar el color y el Alpha (sería el último valor, pero alterado, 0.667) ...
    
}
    else
    {
        if ( 
mode == GL_TRIANGLES || mode == GL_TRIANGLE_STRIP || mode == GL_TRIANGLE_FAN //Si se va a renderizar un player (entidad) ...
        
{
            
glEnable GL_DEPTH_TEST ); //Hacer comparación de profundidad y actualizar el depth buffer ...
            
glDisable GL_BLEND ); //Desactivar esta extensión, cosa de no aplicar el efecto a los players o entidades ...
        
}
    }


El efecto es el siguiente:

Image


Métodos de Anti-WallHacks y sus códigos:

Para contrarrestar este tipo de Cheat, en el año 2002 se creó el método definitivo (por ser sólo vía servidor) que hoy en día la mayoría de servidores utilizan, y éste es el método por TraceLine y AddToFullPack ...

Este método consiste en, dentro de AddToFullPack, hacer varios TraceLine desde la vista de un jugador, hacia la posición de un rival, y si TraceLine devuelve un Fraction indicando que hay una pared enfrente de la visión del jugador, automáticamente se cancela el envío de datos de la entidad del rival en AddToFullPack, haciendo que TODOS los WallHacks queden inservibles.

El Anti-Cheat CSGuard para cs 1.4 fué el primero en crearlo, y luego vinieron las mejoras y las optimizaciones por partes de otros Anti-Cheats (caso HLGuard, sXe-Injected, WHBlocker, UAC Anti-Cheat, etc) ...

El código que pueden utilizar es el siguiente (únicamente cómo referencia, ya que NO está completo):

Código PHP:
#include <amxmodx>
#include <engine>
#include <fakemeta_util>

static Float:offset_y[][] = { {-17.0, -8.5, -8.5,-17.0 }, { 17.0,  8.5,  8.517.0 } } //Esto son vectores para checkear diferentes puntos de la entidad (de pie) ...
static Float:offset_z[][] = { {-34.0,-17.017.034.0 }, {-17.0, -8.517.034.0 } } //Lo mismo que lo anterior pero si está agachada ...

public plugin_init ( )
{
    
register_forward FM_AddToFullPack"Fw_AddToFullPack"//Registramos ...
}

public 
Fw_AddToFullPack ( const es, const e, const ent, const host, const flags, const player, const set )
{
    if ( 
player //Si es un jugador ...
    
{
        if ( 
host != ent //Si la entidad "no soy yo" ..
        
{
            if ( !
is_entity_visible hostentset ) ) //Checkear si es visible la entidad con respecto "a mi" ...
            
{
                
//Ningún punto de la entidad es visible, por lo tanto no enviar datos de la entidad ...
                
forward_return FMV_CELL)
                return 
FMRES_SUPERCEDE
            
}
        }
    }

    return 
FMRES_IGNORED
}

stock is_entity_visible ( const id, const entity, const set )
{
    static 
Float:p_origin[3], Float:e_origin[3], Float:v_plane[3], Float:v_temp[3], duckij

    
if ( !engfunc EngFunc_CheckVisibilityentityset ) ) //Primero se checkea si la entidad está en mi PVS ...
        
return false //No está en mi PVS, no enviar ningún dato de la entidad ...

    
entity_get_vector idEV_VEC_originp_origin //Obtener mi posición y guardarla en la variable p_origin ...
    
entity_get_vector entityEV_VEC_origine_origin //Obtener la posición de la entidad y guardarla en la variable e_origin ...

    
entity_get_vector idEV_VEC_view_ofsv_temp //Obtener mis ángulos de vista ...
    
xs_vec_add p_originv_tempp_origin //Y sumarlos a mi origen (posición) ...

    
entity_get_vector entityEV_VEC_view_ofsv_temp //Obtener ángulos de vista de la entidad ...
    
xs_vec_add e_originv_tempv_temp //Y sumarlos a su origen (posición) ...

    
if ( is_point_visible p_originv_tempid ) ) //Si mi vista (posición+angulos) puede ver al rival (su posición + sus angulos) ...
        
return true //No hacer ningún checkeo siguiente (ya que la entidad es visible), esto optimiza bastante ...

    
xs_vec_sub e_originp_originv_plane //Vamos a obtener el plano de la entidad, restamos MI posición y la del rival = plano ...
    
xs_vec_normalize v_planev_plane //Normalizar ...

    
vector_to_angle v_planev_plane //Convertir los vectores del plano a vectores angulares ...
    
angle_vector v_planeANGLEVECTOR_RIGHTv_plane //Obtener los vectores angulares (RIGHT) del plano angular ...

    
duck = !! ( entity_get_int idEV_INT_button ) & IN_DUCK //Si la entidad está agachada, setear TRUE esta variable ...

    
for ( i++ )
    {
        for ( 
j++ )
        {
            
v_temp[0] = e_origin[0] + v_plane[0] * offset_y[i][j]
            
v_temp[1] = e_origin[1] + v_plane[1] * offset_y[i][j]
            
v_temp[2] = e_origin[2] + v_plane[2] * offset_y[i][j] + offset_z[duck][j]

            if ( 
is_point_visible p_originv_tempid ) ) //Si algún punto es visible ...
                
return true //Devolver TRUE y no hacer nada más porque YA estoy viendo un algún punto ...
        
}
    }

    return 
false //No se pudo ver ningún punto, devolver FALSE y bloquear el envío de los datos de la entidad ...
}

stock is_point_visible ( const Float:start[3], const Float:point[3], const ignore_ent )
{
    static 
Float:fraction

    engfunc 
EngFunc_TraceLinestartpointIGNORE_MONSTERS IGNORE_GLASSignore_ent)

    
get_tr2 0TR_flFractionfraction )

    return ( 
fraction == 1.0 //Devolver únicamente si no hay ningún impacto en el trace ...


El efecto es el siguiente:







Bypass de la protección:

A pesar de poder bloquear los WallHacks desde el Servidor, aún existen otras formas de poder ver información a través de las paredes mediante los datos del sonido de los jugadores.
En otro Thread analizaremos un poco más lo que son los SoundHacks y los métodos para bloquearos...

Nota: @Neeeeeeeeeel.- avisame si hay algo que no va dentro del post ...
Si alguien no comprende alguna parte de algún código, siéntase libre de preguntar ...
Cualquiera que quiera aportar nuevas ideas a ésto, ¡va a ser bienvenido! ...

[SteamID: Rainnegan]

Destro escribió:  Igual el nombre es horrible, algo así quedaría mejor:
Código PHP:
public g_maxplayers 
(Este mensaje fue modificado por última vez en: 02/11/2018 08:18 PM por Cr3470r.)
02/11/2018 07:30 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
KISKE Sin conexión
Miembro Sr.


Plugin developer AMXX Support Medalla de aportes
Mensajes: 419
Registro en: May 2014
Reputación: 22
Mensaje: #2
RE: WallHacks & Anti-WallHacks (Información & Funcionamiento)
Buena información!

Ya que creaste el tema, hablo desde el poco conocimiento que tengo, cuando yo cree mi primer WH (sin ningún anti-cheat en el servidor), en simples pasos, lo que hice fue obtener la posición de los jugadores, y luego con la ViewMatrix y un pequeño trozo de código agarrado de otros sitios (World2Screen), poder plasmar esas coodernadas 3D en mi pantalla, y con una app externa, dibujar un overlay de fondo que se encuntra arriba de la app del HL.

Asumo que vos me entenderás lo que hice si estás más metido en el tema.
Volviendo a la pregunta, es posible evitar esto desde el lado servidor, o si o si requiere de una aplicación corriendo en el cliente para dificultar cosas.

PD: Datos sobre la ViewMatrix por si a alguien le interesa.
http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/the-view-matrix
https://www.3dgep.com/understanding-the-view-matrix/

(Este mensaje fue modificado por última vez en: 02/11/2018 08:06 PM por KISKE.)
02/11/2018 08:04 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
OsweRRR Ausente
Miembro Destacado


Mensajes: 977
Registro en: Feb 2015
Reputación: 11
Mensaje: #3
RE: WallHacks & Anti-WallHacks (Información & Funcionamiento)
Si seria posible que también hablaras un poco de aquellos cheats que pueden filtrar el sma que dejaste Approved

Image

(18/11/2014 05:47 PM)Neeeeeeeeeel.- escribió:  Por qué necesitan una guía para todo? Meté mano y que salga lo que salga... es la mejor forma de aprender.

(16/05/2016 11:08 PM)kikizon2 escribió:  No cabe duda que tienen mierda en vez de cerebro, par de pendejos v:
02/11/2018 08:13 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Cr3470r Ausente
Anti-cheat Team


Mensajes: 438
Registro en: Feb 2014
Reputación: 8
Mensaje: #4
RE: WallHacks & Anti-WallHacks (Información & Funcionamiento)
(02/11/2018 08:04 PM)KISKE escribió:  Asumo que vos me entenderás lo que hice si estás más metido en el tema.

Muy genial la idea, algo similar hacen algunos Cheats de CS:GO, y los nuevos de ahora lo que hacen es enviar desde los datos al juego -> a la pantalla del Overlay del Cheat.
De esta manera, si alguien está transmitiendo algo por Twitch, lo que el espectador ve es un juego limpio, pero en realidad el jugador está viendo otra cosa xd

(02/11/2018 08:04 PM)KISKE escribió:  Volviendo a la pregunta, es posible evitar esto desde el lado servidor, o si o si requiere de una aplicación corriendo en el cliente para dificultar cosas.

Creo yo que la manera de evitarlo es simplemente no enviar esos datos (desde el lado servidor), ya que sino, si te vas a la parte cliente, podrías hacer chequeos de Handles, análisis de Ventanas, etc, y ahí lo detectas al Cheat.

(02/11/2018 08:13 PM)OsweRRR escribió:  Si seria posible que también hablaras un poco de aquellos cheats que pueden filtrar el sma que dejaste Approved

Apenas termino el Thread de SpeedHack, me pongo a hablar de SoundHack también, dame tiempo xd

[SteamID: Rainnegan]

Destro escribió:  Igual el nombre es horrible, algo así quedaría mejor:
Código PHP:
public g_maxplayers 
(Este mensaje fue modificado por última vez en: 02/11/2018 08:15 PM por Cr3470r.)
02/11/2018 08:14 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
mlibre Sin conexión
Miembro Sr.


Trebol verde
Mensajes: 380
Registro en: Nov 2015
Reputación: 5
Mensaje: #5
RE: WallHacks & Anti-WallHacks (Información & Funcionamiento)
el anti-wallhack funciona bien pero hay un detalle, al ser visible nuevamente el jugador el "EspHack" se activa

Image

se puede añadir este complemento:

Código PHP:
register_forward(FM_AddToFullPack"pfw_atfp"1)
//...
public pfw_atfp(eseenthostflagsplayerset)
{
    if( !
player // if isn't player or is a bot don't check (save CPU)
        
return FMRES_IGNORED

    set_es
(esES_SolidSOLID_NOT)    // Bug players EspHack
    
    
return FMRES_IGNORED


esto solo funciona si el jugador es asesinado y "respawn" en mods dm, ctf...

03/11/2018 07:15 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Cr3470r Ausente
Anti-cheat Team


Mensajes: 438
Registro en: Feb 2014
Reputación: 8
Mensaje: #6
RE: WallHacks & Anti-WallHacks (Información & Funcionamiento)
(03/11/2018 07:15 PM)mlibre escribió:  
el anti-wallhack funciona bien pero hay un detalle, al ser visible nuevamente el jugador el "EspHack" se activa

Image

se puede añadir este complemento:

Código PHP:
register_forward(FM_AddToFullPack"pfw_atfp"1)
//...
public pfw_atfp(eseenthostflagsplayerset)
{
    if( !
player // if isn't player or is a bot don't check (save CPU)
        
return FMRES_IGNORED

    set_es
(esES_SolidSOLID_NOT)    // Bug players EspHack
    
    
return FMRES_IGNORED


esto solo funciona si el jugador es asesinado y "respawn" en mods dm, ctf...

Este método es el mismo que utiliza el Anti-Cheat CSGuard (desde el año 2002), y básicamente pasa por lo siguiente:

En los códigos de los Cheats, te encuentras con una verificación que le hacen a las entidades de Players para ver si están vivos o no lo están.
De estar vivos, entonces son sólidas, y en caso de no estarlos, dejan de ser sólidas, haciendo que el ESP funcione correctamente.

Código PHP:
//Función del client.dll HUD_AddEntity
//Utilizada para el agregado de entidades a la pantalla

int HUD_AddEntity int typestruct cl_entity_s *ent, const char *modelname )
{
    
//1) Si la entidad no es nula.
    //2) Si la entidad es un jugador.
    //3) Si la entidad no es un espectador.
    //4) Si la entidad es sólida. (Acá es en donde se produce el fallo).

    
if ( ent && ent->player && !ent->curstate.spectator && ent->curstate.solid )
    {
        
//Aplicar funciones del Cheat
    
}


[SteamID: Rainnegan]

Destro escribió:  Igual el nombre es horrible, algo así quedaría mejor:
Código PHP:
public g_maxplayers 
(Este mensaje fue modificado por última vez en: 03/11/2018 07:59 PM por Cr3470r.)
03/11/2018 07:58 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Sugisaki Sin conexión
Miembro Destacado


Medalla de aportes Trebol purpura 1k
Mensajes: 1,095
Registro en: Jul 2014
Reputación: 21
Mensaje: #7
RE: WallHacks & Anti-WallHacks (Información & Funcionamiento)
este efecto de "AntiWallHack" tiene una gran desventaja para jugadores con ping superior a los 90.

¿Cual?

Prefire: Al momento que un jugador enfrente a otro, el jugador contrario no vera una transicion, si no que vera una "teletransportacion" hacia el centro de su vista.
WHBlocker tiene una variable que se puede configurar para evitar ese problema.
Al momento de aplicar ese "WB" hay que transmitir la entidad antes de verla

Hay un par de contra mas que no recuerdo, si me acuerdo la comento

Competitive/Face it Pick Up Game (PUG) servidor de prueba: 45.77.94.109:27016 Click para Entrar
Image

(14/08/2015 10:15 PM)Sugisaki escribió:  "El mundo es caotico, irracional e injusto. No tiene ningun significado"
Palabras que desde hace mucho tiempo he buscado para describir, ¿Que es el mundo?
Crab

Código PHP:
if(ayuda && free)
{
    exit();

04/11/2018 10:30 AM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Cr3470r Ausente
Anti-cheat Team


Mensajes: 438
Registro en: Feb 2014
Reputación: 8
Mensaje: #8
RE: WallHacks & Anti-WallHacks (Información & Funcionamiento)
(04/11/2018 10:30 AM)Sugisaki escribió:  este efecto de "AntiWallHack" tiene una gran desventaja para jugadores con ping superior a los 90.

¿Cual?

Prefire: Al momento que un jugador enfrente a otro, el jugador contrario no vera una transicion, si no que vera una "teletransportacion" hacia el centro de su vista.
WHBlocker tiene una variable que se puede configurar para evitar ese problema.
Al momento de aplicar ese "WB" hay que transmitir la entidad antes de verla

Sería predicción de movimiento para evitar el player-popping.
Cual es la CVAR que el WHBlocker tiene?


S2

[SteamID: Rainnegan]

Destro escribió:  Igual el nombre es horrible, algo así quedaría mejor:
Código PHP:
public g_maxplayers 
04/11/2018 03:33 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Neeeeeeeeeel.- Sin conexión
Administrador


El protector Plugin developer 1k
Mensajes: 1,980
Registro en: Oct 2013
Reputación: 38
Mensaje: #9
RE: WallHacks & Anti-WallHacks (Información & Funcionamiento)
Buena data. Todo bien con el post.

No contesto mensajes privados pidiendo soporte!

Donaciones en btc 1EcNJV2gTFDYr7BBAFpMQk7pVCFEZCaKX4
05/11/2018 11:13 AM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
mlibre Sin conexión
Miembro Sr.


Trebol verde
Mensajes: 380
Registro en: Nov 2015
Reputación: 5
Mensaje: #10
RE: WallHacks & Anti-WallHacks (Información & Funcionamiento)
(04/11/2018 10:30 AM)Sugisaki escribió:  
este efecto de "AntiWallHack" tiene una gran desventaja para jugadores con ping superior a los 90.

¿Cual?

Prefire: Al momento que un jugador enfrente a otro, el jugador contrario no vera una transicion, si no que vera una "teletransportacion" hacia el centro de su vista.
WHBlocker tiene una variable que se puede configurar para evitar ese problema.
Al momento de aplicar ese "WB" hay que transmitir la entidad antes de verla

Hay un par de contra mas que no recuerdo, si me acuerdo la comento

creo que te refieres al leve retardo de unos segundos en reaparecer el model "lo he notado" parece arreglarse con estos ajustes

Código:
smooth = 1
smoothout = 1

05/11/2018 05:20 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)

Contáctanos | Allied Modders en español | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS