SpeedHacks & Anti-SpeedHacks (Información & Funcionamiento)
#1
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.
(15/12/2020, 07:06 PM)Mario AR. escribió: Cuando tu acatante conozca de tu nuevo puerto, te volverá a atacar
Responder
#2
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.
Responder
#3
(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 ...
(15/12/2020, 07:06 PM)Mario AR. escribió: Cuando tu acatante conozca de tu nuevo puerto, te volverá a atacar
Responder
#4
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
Responder
#5
(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 ...
(15/12/2020, 07:06 PM)Mario AR. escribió: Cuando tu acatante conozca de tu nuevo puerto, te volverá a atacar
Responder
#6
(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)
Responder
#7
Pelea de polleras al privado plis
[Imagen: paypalqr.png]
Responder
#8
Una pregunta. Sobre el tema del ping, no se puede obtener el ping del player y de ahí ir viendo?
Responder
#9
(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) ...
(15/12/2020, 07:06 PM)Mario AR. escribió: Cuando tu acatante conozca de tu nuevo puerto, te volverá a atacar
Responder
#10
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 ?
Responder
#11
(06/11/2018, 10:31 PM)Destro escribió: 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 ?

No tengo Anti-SpeedHack, no encontré ninguna fórmula como para computar el ping respecto a los paquetes de datos y frenar todo correctamente ...
(15/12/2020, 07:06 PM)Mario AR. escribió: Cuando tu acatante conozca de tu nuevo puerto, te volverá a atacar
Responder
#12
El ping depende de todas las mierdas que tengas en el medio entre el cliente y el servidor, pueden ser 2, 10 o 20 saltos nunca sabés. Internet no garantiza QoS justamente por eso.
[Imagen: paypalqr.png]
Responder
#13
Entonces, no habra manera, bueno, manera sí, pero no es exactitud y da falsos positivos. Gracias, una pregunta. Calculo el ping del sv + calcular ping del player. Entonces, si ping del sv y ping del player (que no es exacto), supera los 500. Se podrá desactivar el Anti-Speed Hack?
Responder
#14
No existe algo como "ping del sv" y "ping del player", el ping es el tiempo promedio que tardan en llegar los paquetes desde el cliente (player) al server.
[Imagen: paypalqr.png]
Responder
#15
SpeedHack Blocker (HackDetector Lite)
Responder
#16
(07/11/2018, 05:20 PM)pallaroid escribió: SpeedHack Blocker (HackDetector Lite)
No contiene el código fuente, por ende no nos sirve para nada.
[Imagen: paypalqr.png]
Responder
#17
(07/11/2018, 01:36 AM)Cr3470r escribió:
(06/11/2018, 10:31 PM)Destro escribió: 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 ?

No tengo Anti-SpeedHack, no encontré ninguna fórmula como para computar el ping respecto a los paquetes de datos y frenar todo correctamente ...

¿Y no miraste la forma que hace el sXe?

Es de lo poco que tiene que sirve de algo.
Responder
#18
(07/11/2018, 10:06 PM)Ballers escribió:
(07/11/2018, 01:36 AM)Cr3470r escribió:
(06/11/2018, 10:31 PM)Destro escribió: 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 ?

No tengo Anti-SpeedHack, no encontré ninguna fórmula como para computar el ping respecto a los paquetes de datos y frenar todo correctamente ...

¿Y no miraste la forma que hace el sXe?

Es de lo poco que tiene que sirve de algo.

(07/11/2018, 05:31 PM)Neeeeeeeeeel.- escribió: No contiene el código fuente, por ende no nos sirve para nada.
(15/12/2020, 07:06 PM)Mario AR. escribió: Cuando tu acatante conozca de tu nuevo puerto, te volverá a atacar
Responder
#19
Les puedo brindar un servidor al Team Anti-Cheat si lo requieren.
Está muy buena la idea de empezar a independizarse de Injected
Empresa líder en la prestación de servicios de hosting, servidores de juegos, servidores de voz y alojamiento web en Argentina.
www.4evergaming.com.ar
Responder
#20
(05/12/2018, 11:34 PM)4evergaming escribió: Les puedo brindar un servidor al Team Anti-Cheat si lo requieren.
Está muy buena la idea de empezar a independizarse de Injected
No es la sección adecuada para hacerlo. Este tipo de cosas me las pueden mandar por mp. De todas formas no lo veo necesario, pero gracias.

Borré todos los mensajes, dejen de hacer off. @totopizza si tenés algo que decir hace un post en offtopic o mandalo por mp. Last warning.
[Imagen: paypalqr.png]
Responder
#21
Código PHP:
/********************************************************************************
*      AMX Mod X Script.
*
*   Speed Hack Detector
*   Formatright (C) 2009 OT
*
*   This program is free software; you can redistribute it and/or
*   modify it under the terms of the GNU General Public License
*   as published by the Free Software Foundation; either version 2
*   of the License, or (at your option) any later version.
*
*   This program is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*   GNU General Public License for more details.
*
*   You should have received a copy of the GNU General Public License
*   along with this program; if not, write to the Free Software
*   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*
*   In addition, as a special exception, the author gives permission to
*   link the code of this program with the Half-Life Game Engine ("HL
*   Engine") and Modified Game Libraries ("MODs") developed by Valve,
*   L.L.C ("Valve"). You must obey the GNU General Public License in all
*   respects for all of the code used other than the HL Engine and MODs
*   from Valve. If you modify this file, you may extend this exception
*   to your version of the file, but you are not obligated to do so. If
*   you do not wish to do so, delete this exception statement from your
*   version.
*
**********************************************************************************/

/*  [Plugin Link]
http://forums.alliedmods.net/showthread.php?t=131219
*/

/* [Changelog]
- 3.0  - changed the plugin to block speedhack,
- 2.0  - fixed everything, perfected the detection method, fixed the server lag issue that would ban players! Fixed cvar detections and added clockwindow detection.
- 1.6  - fixed a problem where the plugin would not detect the developer cvar
- 1.5  - added cvar for limit, improved logging
- 1.4  - added developer cvar kick
- 1.3  - improved logging, increaced tolerance
- 1.2  - added more cvars for customization 
- 1.1  - added one more option to punishtype cvar 
- 1.0  - initial release 
*/

/* [Credits]
Empower - posted all the false bans, suggested improvements, server lag false detection problem, clockwindow information
Connor  - info about corectly detecting developer cvar
*/

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define add_bot_property(%1)                        gBS_cl_bot |= (1<<(%1 - 1))
#define del_bot_property(%1)                        gBS_cl_bot &= ~(1<<(%1 - 1))
#define has_bot_property(%1)                        (gBS_cl_bot & (1<<(%1 - 1)))
#define add_alive_property(%1)                        gBS_cl_alive |= (1<<(%1 - 1))
#define del_alive_property(%1)                        gBS_cl_alive &= ~(1<<(%1 - 1))
#define has_alive_property(%1)                        (gBS_cl_alive & (1<<(%1 - 1)))
#define add_speed_property(%1)                        gBS_cl_cheats |= (1<<(%1 - 1))
#define del_speed_property(%1)                        gBS_cl_cheats &= ~(1<<(%1 - 1))
#define has_speed_property(%1)                        (gBS_cl_cheats & (1<<(%1 - 1)))

const gC_MaxIdle =  2500
const gC_MaxSlots 32

new gBS_cl_alivegBS_cl_botgBS_cl_cheats
new gPV_enablegCV_enablegPV_limitgCV_limitgPV_lossgCV_loss
new Float:gF_CountStart[gC_MaxSlots], gI_Counter[gC_MaxSlots], gI_Loss[gC_MaxSlots]

public 
plugin_init()
{
    
register_plugin("Block Speed Hack""3.0""OT & Empower")
    
    
gPV_enable         register_cvar("spd_enable",           "1")
    
gPV_limit        register_cvar("spd_limit",           "100")
    
gPV_loss        register_cvar("spd_loss_add",        "3"
    
    
RegisterHam(Ham_Spawn"player""pfw_PlayerHandleAD"1)
    
RegisterHam(Ham_Killed"player""pfw_PlayerHandleAD"1)
    
    
register_forward(FM_CmdStart"pfw_CmdStart"1)
    
register_forward(FM_UpdateClientData"fw_UpdateClientData"1)
    
    
set_task(1.0"tsk_ChacheCvars"0""0"b"0)
    
set_task(1.0"tsk_GetLoss"1""0"b"0)
}

public 
fw_UpdateClientData(idsendpCD)
{
    if (
has_speed_property(id))
    {
        
set_cd(pCDCD_MaxSpeed1.0)
        
        
        if ((
1<<get_user_weapon(id)) & ~((1<<CSW_HEGRENADE) | (1<<CSW_SMOKEGRENADE) | (1<<CSW_FLASHBANG)))
            
set_cd(pCDCD_ID0)
    }
}

public 
plugin_cfg()
{
    
// Disable the valve default anti-speedhack
    
server_cmd("clockwindow 0.0")
}

public 
client_putinserver(id)
{
    
del_alive_property(id)
    
    if (
is_user_bot(id))
        
add_bot_property(id)
    else
        
del_bot_property(id)
    
    
gF_CountStart[id-1] = get_gametime()
    
gI_Counter[id-1] = 0
}

public 
client_disconnect(id)
{
    
del_alive_property(id)
    
del_bot_property(id)
}

public 
tsk_ChacheCvars(id)
{
    
// The !! means that we want or 0 or 1 not 34183 values
    
gCV_enable =     !!get_pcvar_num(gPV_enable)
    
gCV_limit =     get_pcvar_num(gPV_limit)
    
gCV_loss =         get_pcvar_num(gPV_loss)
    
    return 
PLUGIN_CONTINUE
}

public 
tsk_GetLoss()
{
    new 
players[32], numidping
    get_players
(playersnum)
    
    for (new 
i=0;i<num;i++)
    {
        
id players[i]
        
get_user_ping(idpinggI_Loss[id-1])
    }
}

public 
pfw_CmdStart(idpUCseed)
{
    if (!
gCV_enable)
        return 
FMRES_IGNORED
    
    
if (!has_alive_property(id) || has_bot_property(id))
        return 
FMRES_IGNORED
    
    gI_Counter
[id-1]++
    
    if (
get_gametime() - gF_CountStart[id-1] > 0.5)
    {
        
del_speed_property(id)
        
gF_CountStart[id-1] = get_gametime()
        
gI_Counter[id-1] = 0
    
}
    
    if (
float(gI_Counter[id-1]) > (gCV_limit*(get_gametime() - gF_CountStart[id-1]) + gCV_loss gI_Loss[id-1]))
    {
        if (
gI_Counter[id-1] > 3)
        {
            
add_speed_property(id)
            
set_uc(pUCUC_Buttonsget_uc(pUCUC_Buttons) & ~IN_ATTACK)
        }
    }
    else
    {
        
del_speed_property(id)
    }
    
    return 
FMRES_IGNORED
}

public 
pfw_PlayerHandleAD(id)
{
    if (
is_user_alive(id))
    {
        
gF_CountStart[id-1] = get_gametime()
        
gI_Counter[id-1] = 0
        
        add_alive_property
(id)
    }
    else
        
del_alive_property(id)
    
    return 
HAM_IGNORED


Navegando encontré esto, lo veo bastante completo y adecuado a una de las formas que se comentó en el primer post.
Empresa líder en la prestación de servicios de hosting, servidores de juegos, servidores de voz y alojamiento web en Argentina.
www.4evergaming.com.ar
Responder
#22
(09/12/2018, 03:20 AM)4evergaming escribió:
Código PHP:
/********************************************************************************
*      AMX Mod X Script.
*
*   Speed Hack Detector
*   Formatright (C) 2009 OT
*
*   This program is free software; you can redistribute it and/or
*   modify it under the terms of the GNU General Public License
*   as published by the Free Software Foundation; either version 2
*   of the License, or (at your option) any later version.
*
*   This program is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*   GNU General Public License for more details.
*
*   You should have received a copy of the GNU General Public License
*   along with this program; if not, write to the Free Software
*   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*
*   In addition, as a special exception, the author gives permission to
*   link the code of this program with the Half-Life Game Engine ("HL
*   Engine") and Modified Game Libraries ("MODs") developed by Valve,
*   L.L.C ("Valve"). You must obey the GNU General Public License in all
*   respects for all of the code used other than the HL Engine and MODs
*   from Valve. If you modify this file, you may extend this exception
*   to your version of the file, but you are not obligated to do so. If
*   you do not wish to do so, delete this exception statement from your
*   version.
*
**********************************************************************************/

/*  [Plugin Link]
http://forums.alliedmods.net/showthread.php?t=131219
*/

/* [Changelog]
- 3.0  - changed the plugin to block speedhack,
- 2.0  - fixed everything, perfected the detection method, fixed the server lag issue that would ban players! Fixed cvar detections and added clockwindow detection.
- 1.6  - fixed a problem where the plugin would not detect the developer cvar
- 1.5  - added cvar for limit, improved logging
- 1.4  - added developer cvar kick
- 1.3  - improved logging, increaced tolerance
- 1.2  - added more cvars for customization 
- 1.1  - added one more option to punishtype cvar 
- 1.0  - initial release 
*/

/* [Credits]
Empower - posted all the false bans, suggested improvements, server lag false detection problem, clockwindow information
Connor  - info about corectly detecting developer cvar
*/

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define add_bot_property(%1)                        gBS_cl_bot |= (1<<(%1 - 1))
#define del_bot_property(%1)                        gBS_cl_bot &= ~(1<<(%1 - 1))
#define has_bot_property(%1)                        (gBS_cl_bot & (1<<(%1 - 1)))
#define add_alive_property(%1)                        gBS_cl_alive |= (1<<(%1 - 1))
#define del_alive_property(%1)                        gBS_cl_alive &= ~(1<<(%1 - 1))
#define has_alive_property(%1)                        (gBS_cl_alive & (1<<(%1 - 1)))
#define add_speed_property(%1)                        gBS_cl_cheats |= (1<<(%1 - 1))
#define del_speed_property(%1)                        gBS_cl_cheats &= ~(1<<(%1 - 1))
#define has_speed_property(%1)                        (gBS_cl_cheats & (1<<(%1 - 1)))

const gC_MaxIdle =  2500
const gC_MaxSlots 32

new gBS_cl_alivegBS_cl_botgBS_cl_cheats
new gPV_enablegCV_enablegPV_limitgCV_limitgPV_lossgCV_loss
new Float:gF_CountStart[gC_MaxSlots], gI_Counter[gC_MaxSlots], gI_Loss[gC_MaxSlots]

public 
plugin_init()
{
    
register_plugin("Block Speed Hack""3.0""OT & Empower")
    
    
gPV_enable         register_cvar("spd_enable",           "1")
    
gPV_limit        register_cvar("spd_limit",           "100")
    
gPV_loss        register_cvar("spd_loss_add",        "3"
    
    
RegisterHam(Ham_Spawn"player""pfw_PlayerHandleAD"1)
    
RegisterHam(Ham_Killed"player""pfw_PlayerHandleAD"1)
    
    
register_forward(FM_CmdStart"pfw_CmdStart"1)
    
register_forward(FM_UpdateClientData"fw_UpdateClientData"1)
    
    
set_task(1.0"tsk_ChacheCvars"0""0"b"0)
    
set_task(1.0"tsk_GetLoss"1""0"b"0)
}

public 
fw_UpdateClientData(idsendpCD)
{
    if (
has_speed_property(id))
    {
        
set_cd(pCDCD_MaxSpeed1.0)
        
        
        if ((
1<<get_user_weapon(id)) & ~((1<<CSW_HEGRENADE) | (1<<CSW_SMOKEGRENADE) | (1<<CSW_FLASHBANG)))
            
set_cd(pCDCD_ID0)
    }
}

public 
plugin_cfg()
{
    
// Disable the valve default anti-speedhack
    
server_cmd("clockwindow 0.0")
}

public 
client_putinserver(id)
{
    
del_alive_property(id)
    
    if (
is_user_bot(id))
        
add_bot_property(id)
    else
        
del_bot_property(id)
    
    
gF_CountStart[id-1] = get_gametime()
    
gI_Counter[id-1] = 0
}

public 
client_disconnect(id)
{
    
del_alive_property(id)
    
del_bot_property(id)
}

public 
tsk_ChacheCvars(id)
{
    
// The !! means that we want or 0 or 1 not 34183 values
    
gCV_enable =     !!get_pcvar_num(gPV_enable)
    
gCV_limit =     get_pcvar_num(gPV_limit)
    
gCV_loss =         get_pcvar_num(gPV_loss)
    
    return 
PLUGIN_CONTINUE
}

public 
tsk_GetLoss()
{
    new 
players[32], numidping
    get_players
(playersnum)
    
    for (new 
i=0;i<num;i++)
    {
        
id players[i]
        
get_user_ping(idpinggI_Loss[id-1])
    }
}

public 
pfw_CmdStart(idpUCseed)
{
    if (!
gCV_enable)
        return 
FMRES_IGNORED
    
    
if (!has_alive_property(id) || has_bot_property(id))
        return 
FMRES_IGNORED
    
    gI_Counter
[id-1]++
    
    if (
get_gametime() - gF_CountStart[id-1] > 0.5)
    {
        
del_speed_property(id)
        
gF_CountStart[id-1] = get_gametime()
        
gI_Counter[id-1] = 0
    
}
    
    if (
float(gI_Counter[id-1]) > (gCV_limit*(get_gametime() - gF_CountStart[id-1]) + gCV_loss gI_Loss[id-1]))
    {
        if (
gI_Counter[id-1] > 3)
        {
            
add_speed_property(id)
            
set_uc(pUCUC_Buttonsget_uc(pUCUC_Buttons) & ~IN_ATTACK)
        }
    }
    else
    {
        
del_speed_property(id)
    }
    
    return 
FMRES_IGNORED
}

public 
pfw_PlayerHandleAD(id)
{
    if (
is_user_alive(id))
    {
        
gF_CountStart[id-1] = get_gametime()
        
gI_Counter[id-1] = 0
        
        add_alive_property
(id)
    }
    else
        
del_alive_property(id)
    
    return 
HAM_IGNORED


Navegando encontré esto, lo veo bastante completo y adecuado a una de las formas que se comentó en el primer post.

Al menos lee la sección dónde está y el motivo por el cual está desaprobado, tiene demasiados falsos-positivos y varios errores y problemas.
Responder
#23
Esta desaprobado hasta la version 2.0 pero de donde sale la 3.0?
[Imagen: b_350_20_323957_202743_f19a15_111111.png]

(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:
Responder
#24
(10/12/2018, 08:21 PM)OsweRRR escribió: Esta desaprobado hasta la version 2.0 pero de donde sale la 3.0?

https://www.extreamcs.com/forum/cereri-p...83879.html
Responder
#25
@4evergaming

Es como el 3er método que expliqué en el thread, si tengo más de 100 FPS me estarías trabando el juego sin motivo alguno ... y por otro lado, suponiendo que le aumentás el límite a 500 FPS, entonces yo puedo usar un SpeedHack que suba el procesamiento de CmdStarts hasta 480 y listo (osea, cambiar la velocidad del speed y ya) ...

Hay que hacer un anti-speed con el primer método y alguna forma de computar el ping como el Injected tiene echo ...
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)