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


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

El SpeedHack es un tipo de Cheat, el cual, mediante la alteración de funciones del juego o del sistema, permite que nuestro Cliente funcione más rápido que de lo normal, de ésta manera se nos permite movernos más rápido, disparar más rápido, recargar más rápido, y cualquier otro tipo de acción dentro del juego.
En otras palabras, un SpeedHack no cambia la velocidad de un jugador, sino la velocidad de funcionamiento del Cliente.

Tipos de SpeedHacks & sus códigos:

Mucho para explicar no hay, simplemente se hookean funciones del juego (tales como las que posean delays o timestamps), y se aumenta su valor, de esta manera, el juego nos funciona mucho más rápido que de lo normal, dependiendo el valor que asignemos.

Método #1: (Sistema, WinAPI, QueryPerformanceCounter)

Este es uno de los más utilizados, no sólo en el engine del HL sino en otros juegos (como por ejemplo el MU Online, mediante el programa xSpeedPro), lo que hace es hookear una función del sistema, aumentar el valor de los parámetros y listo, ya todo funciona más rápido ...

El código es el siguiente:

Código PHP:
//Esto se hace mediante el hookeo a una función de kernel32.dll
//Esto funciona para CUALQUIER juego que haga uso de esta función...

BOOL WINAPI Hook_QueryPerformanceCounter LARGE_INTEGER *lpPerformanceCount //Dentro del hook de la función QueryPerformanceCounter en Kernel32.dll ...
{
    
LONGLONG newvalue;
    
BOOL ret;

    static 
LONGLONG oldfakevalue 0;
    static 
LONGLONG oldrealvalue 0;

    
double factor 1.0;

    if ( 
oldfakevalue == || oldrealvalue == )
    {
        
oldfakevalue lpPerformanceCount->QuadPart;
        
oldrealvalue lpPerformanceCount->QuadPart;
    }

    
ret Original_QueryPerformanceCounter lpPerformanceCount );

    
factor 3//Multiplicar el factor por "3", si se desea más velocidad, se aumenta el valor ...

    
newvalue lpPerformanceCount->QuadPart;
    
newvalue oldfakevalue + (LONGLONG) ( ( newvalue oldrealvalue ) * factor );

    
oldrealvalue lpPerformanceCount->QuadPart;
    
oldfakevalue newvalue;

    
lpPerformanceCount->QuadPart newvalue;

    return 
ret;



Método #2: (Engine, NetAPI, SendRequest)

Este método es el mismo que el anterior, pero con la diferencia que en vez de hookear las funciones del sistema, se hookean las funciones del engine ...

El código es el siguiente:

Código PHP:
//Esto se hace mediante el hookeo a una función de client.dll
//Esto funciona para CUALQUIER render del juego, tanto OpenGL, como Direct3D o Software...
//Definimos el puntero en donde se setea el delay de envíos de paquetes de datos ...
double *globalTime = (double*) * (PDWORD) ( (DWORDpEngfuncs->pNetAPI->SendRequest 0x51 );

void Hook_CL_CreateMove float frametimestruct usercmd_s *usercmdint active //Dentro del hook de la función CL_CreateMove del cliente ...
{
    *
globalTime += frametime 5//Multiplicamos el delay por "3", si se desea más velocidad, se aumenta el valor ...



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

Primero y principal, necesitamos encontrar entre todos un método que funcione correctamente, prosiguiendo ...

Los de Valve fueron los primeros en combatir a los SpeedHackers, para eso crearon una cvar llamada "clockwindow", y lo que hace es chequear el time de los comandos que pasan a través de CmdStart y calcular si hay una diferencia con respecto uno del otro, si se encuentra una diferencia, se bloquea temporalmente al jugador.

Ventajas: Detecta perfectamente bien cualquier factor de SpeedHack (2, 3, 4, 5, etc).
Problemas: Detecta a jugadores con lag, loss, warp, o si el server se lagea también detecta incorrectamente.

Nota adicional: El Anti-Cheat HLGuard, en su versión 1.25 también implementó este método, pero solamente se checkea cuando un jugador se mueve, dispara o recarga, pero tenía los mismos problemas, detectaba incorrectamente por los problemas ya mencionados.

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

new Float:gF_ConnectTime[33], Float:gF_CmdTime[33], Float:gF_SpeedHack[33]

public 
plugin_init ( )
{
    
register_forward FM_CmdStart"Fw_CmdStart"//Registramos ...
}

public 
Fw_CmdStart ( const id, const uc_handle, const seed )
{
    static 
Float:GameTimeMSec
    
    MSec 
get_uc uc_handleUC_Msec //Obtener MSec ...

    
GameTime halflife_time ( ) //Obtener tiempo del juego ...

    
Check_SpeedHack idMSecGameTime //Ir a checkeos ...
}

public 
client_putinserver id )
{
    
gF_ConnectTime[id] = halflife_time ( ) //Obtener tiempo de conexión ...
    
gF_CmdTime[id] = gF_ConnectTime[id] - gF_ConnectTime[id//Computar los tiempos del comando ...
}

public 
client_disconnect id )
{
    
gF_ConnectTime[id] = gF_CmdTime[id] = gF_SpeedHack[id] = 0.0 //Reset ...
}

stock Check_SpeedHack ( const id, const MSec, const Float:GameTime )
{
    static 
Float:gF_IgnoreCmdTime[33], Float:Limit
    
    Limit 
0.5 //El valor default de la cvar "clockwindow" es 0.5 ...
    
    
gF_CmdTime[id] = MSec 1000.0 gF_CmdTime[id//Timestamp del comando ...
    
    
if ( gF_IgnoreCmdTime[id] > GameTime //Aún hay que ignorar los comandos ...
    
{
        
gF_CmdTime[id] = MSec 1000.0 gF_CmdTime[id]
        
        
//Acá se realizan los bloqueos, etc ...
    
}
    
    if ( 
GameTime gF_SpeedHack[id] > Limit )
    {
        static 
Float:Difference
        
        Difference 
gF_ConnectTime[id] + gF_CmdTime[id] - GameTime //Computar diferencia ...
        
        
if ( Difference Limit //Si la diferencia exedió el límite ...
        
{
            
gF_IgnoreCmdTime[id] = Limit GameTime //Tiempo que se va a bloquear el movimiento del jugador ...
            
gF_CmdTime[id] = GameTime gF_ConnectTime[id]
        }

        if ( 
Difference < -Limit )
            
gF_CmdTime[id] = GameTime gF_ConnectTime[id]
        
        
gF_SpeedHack[id] = GameTime
    
}



Luego en alliedmods muchos usuarios también decidieron probar suerte y crearon otro método para detectar a SpeedHackers, el cual se basa en checkear cada "x" tiempo, la distancia que hace un jugador de un lugar a otro, y si excede un límite, el jugador es detectado como SpeedHacker.

Ventajas: Detecta cualquier factor de SpeedHack mayor a 4.
Problemas: Detecta a jugadores con lag, loss, warp, si el server se lagea también detecta incorrectamente, si alguien tiene un plugin para transportar al jugador también detecta incorrectamente, si el jugador es empujado por un vehículo también, o si la velocidad del jugador es cambiada mediante un plugin también ... MUCHOS problemas éste método ...

Código PHP:
#include <amxmodx>
#include <fakemeta>

public plugin_init ( )
{
    
set_task 0.5"CheckSpeedHack"123""0"b"//Seteamos un timer ...
}

public 
CheckSpeedHack ( )
{
    static 
Players[32], iNumidi

    get_players 
PlayersiNum"ac" //Obtenemos players vivos que no sean bots ...
    
    
for ( iNum i++ )
    {
        
id Players[i]

        static 
Float:Origin[33][3], Float:OldOrigin[33][3]

        
pev idpev_originOrigin[id] ) //Obtener posición actual ...
        
        
if ( get_distance_f Origin[id], OldOrigin[id] ) >= 240.0 //Si hay una distancia mayor de 240.0 entre la posición anterior y la nueva ...
        
{
            
//SpeedHack detected ...
        
}
        
        
pev idpev_originOldOrigin[id] ) //Guardar posición previa ...
    
}



Y por último, el último método que salió de alliedmods fué la de chequear la cantidad de "CmdStarts" que un jugador hace, y si supera un límite, es detectado como SpeedHacker.

Ventajas: Detecta cualquier factor de SpeedHack mayor a 5.
Problemas: Detecta a jugadores con lag, loss, warp, si el server se lagea también detecta incorrectamente, o si alguien tiene más de 100 fps también ...

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

new Float:gF_SpeedHack[33], gL_SpeedHackCount[33]

public 
plugin_init ( )
{
    
register_forward FM_CmdStart"Fw_CmdStart"//Registramos ...
}

public 
client_connect id )
{
    
gL_SpeedHackCount[id] = //Reset
}

public 
Fw_CmdStart ( const id, const uc_handle, const seed )
{
    static 
Float:GameTime

    GameTime 
halflife_time ( ) //Obtener tiempo del juego ...

    
gL_SpeedHackCount[id]++ //Contar cuantos comandos envía el Cliente ...

    
if ( GameTime gF_SpeedHack[id] > 1.0 //Checkear cada 1.0 segundos ...
    
{
        if ( 
gL_SpeedHackCount[id] > 150 //Si supero el límite de 150 comandos en 1.0 segundos ...
        
{
            
//Speedhack detected ...

            
gL_SpeedHackCount[id] = //Reiniciar conteo ...
        
}

        
gF_SpeedHack[id] = GameTime
    
}


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! ...
Y por último, vuelvo a repetirlo, necesitamos encontrar entre todos un método que funcione correctamente.

[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 10:31 PM por Cr3470r.)
02/11/2018 09:12 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Pan Bimbo (? Ausente
Anti-cheat Team


Plugin developer
Mensajes: 369
Registro en: Jun 2015
Reputación: 8
Mensaje: #2
RE: SpeedHacks & Anti-SpeedHacks (Información & Funcionamiento)
Mhm yo tengo un método en Netchan_transmit, que bloquea algunos CMDS, y en Delta_setfieldcheck, que puedo quitar algunos CMDS y dejar los que sirven para caminar y te re kbio ameo, seteo la funcion de msg_writecmd en menos tiempo te quito cmds y lesto.

Oh god why (AM como red social) (? (? (?
(Venganza le dijo el ganzo ala ganza.)
02/11/2018 09:32 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: #3
RE: SpeedHacks & Anti-SpeedHacks (Información & Funcionamiento)
(02/11/2018 09:32 PM)Pan Bimbo (? escribió:  Mhm yo tengo un método en Netchan_transmit, que bloquea algunos CMDS, y en Delta_setfieldcheck, que puedo quitar algunos CMDS y dejar los que sirven para caminar y te re kbio ameo, seteo la funcion de msg_writecmd en menos tiempo te quito cmds y lesto.

El del Injected lo tenes bypasseado? ...

Acordate que especifiqué varias veces que ninguno de éstos métodos funcionan correctamente ...

[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 09:41 PM por Cr3470r.)
02/11/2018 09:40 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Destro Sin conexión
Anti-cheat Team


Buen Tutorial Plugin developer Pensador Plugin popular
Mensajes: 820
Registro en: Oct 2013
Reputación: 4
Mensaje: #4
RE: SpeedHacks & Anti-SpeedHacks (Información & Funcionamiento)
Buena info, el sxe usa el primer metodo pero con chequeo de ping no ?

Entonces cuando al servidor le están dando con tremendo ddos, el efecto de lag que vuelve al jugador para atrás es gracias al anti-speedhack de valve ? Insecure

(Este mensaje fue modificado por última vez en: 02/11/2018 09:46 PM por Destro.)
02/11/2018 09:45 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: #5
RE: SpeedHacks & Anti-SpeedHacks (Información & Funcionamiento)
(02/11/2018 09:45 PM)Destro escribió:  Buena info, el sxe usa el primer metodo pero con chequeo de ping no ?

Exacto, utiliza el primer método, pero con un filtraje de ping (supongo).
La idea es cambiar el factor de detención de SpeedHack, basándose en el ping del jugador, de esa manera, si tenés ping alto, el factor cambia a un cierto valor, cosa que no seas frenado.
Pero andá a saber de qué manera computa esto ...

(02/11/2018 09:45 PM)Destro escribió:  Entonces cuando al servidor le están dando con tremendo ddos, el efecto de lag que vuelve al jugador para atrás es gracias al anti-speedhack de valve ? Insecure

Es por el Anti-Speed de Valve y por el del Injected, ya que los 2 funcionan de la misma manera ...

[SteamID: Rainnegan]

Destro escribió:  Igual el nombre es horrible, algo así quedaría mejor:
Código PHP:
public g_maxplayers 
02/11/2018 09:49 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Pan Bimbo (? Ausente
Anti-cheat Team


Plugin developer
Mensajes: 369
Registro en: Jun 2015
Reputación: 8
Mensaje: #6
RE: SpeedHacks & Anti-SpeedHacks (Información & Funcionamiento)
(02/11/2018 09:40 PM)Cr3470r escribió:  
(02/11/2018 09:32 PM)Pan Bimbo (? escribió:  Mhm yo tengo un método en Netchan_transmit, que bloquea algunos CMDS, y en Delta_setfieldcheck, que puedo quitar algunos CMDS y dejar los que sirven para caminar y te re kbio ameo, seteo la funcion de msg_writecmd en menos tiempo te quito cmds y lesto.

El del Injected lo tenes bypasseado? ...

Acordate que especifiqué varias veces que ninguno de éstos métodos funcionan correctamente ...

Capo tas hablando con janonimu, lo tengo bypasseado crack, metes 4 fps, le reducis la velocidad al cmds por segundo y vas volando a las chapas, y si ya lo testee.
(Velocidad a los cmds x segundo es algo que no te habia mostrado porq sos alto gil, tengo 50 metodos nuevos y nuevas cosas, solo que sos re avaro y mesquino asique no te pase nada)

Oh god why (AM como red social) (? (? (?
(Venganza le dijo el ganzo ala ganza.)
02/11/2018 09:49 PM
Visita su sitio web 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: #7
RE: SpeedHacks & Anti-SpeedHacks (Información & Funcionamiento)
Pelea de polleras al privado plis

No contesto mensajes privados pidiendo soporte!

Donaciones en btc 1EcNJV2gTFDYr7BBAFpMQk7pVCFEZCaKX4
03/11/2018 01:41 AM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Eternity Sin conexión
Suspendido


Mensajes: 4
Registro en: Nov 2018
Mensaje: #8
RE: SpeedHacks & Anti-SpeedHacks (Información & Funcionamiento)
Una pregunta. Sobre el tema del ping, no se puede obtener el ping del player y de ahí ir viendo?
06/11/2018 06:13 PM
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: #9
RE: SpeedHacks & Anti-SpeedHacks (Información & Funcionamiento)
(06/11/2018 06:13 PM)Eternity escribió:  Una pregunta. Sobre el tema del ping, no se puede obtener el ping del player y de ahí ir viendo?

Ya lo intenté, pero no hubo chances ...
Hay veces que un jugador está warpeado (pérdida de paquetes de datos) y hace el mismo efecto como si tuviera ping alto (delay entre la conexión del servidor y el cliente, pero no hay pérdida de paquetes de datos, sino que tardan en llegar) ...

[SteamID: Rainnegan]

Destro escribió:  Igual el nombre es horrible, algo así quedaría mejor:
Código PHP:
public g_maxplayers 
06/11/2018 09:19 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Destro Sin conexión
Anti-cheat Team


Buen Tutorial Plugin developer Pensador Plugin popular
Mensajes: 820
Registro en: Oct 2013
Reputación: 4
Mensaje: #10
RE: SpeedHacks & Anti-SpeedHacks (Información & Funcionamiento)
No es como si tendrías que kickearlo o banearlo al detectar speedhack, cosa que es fatal si tenes falsos positivos, el sxe lo traba, en el UAC que usas ?

06/11/2018 10:31 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