[Discusión] Bloqueos vía cmd. (Anti San Juan)
#1
No me voy a poner a explicar que hace cada función, porque se supone que es un nivel más alto y avanzado.
Bueno, esto es para abrir una discusión. En este caso, bloquear un cheat vía un comando de este.
La idea o el método, es el siguiente:
Vía servidor voy a detectar los comandos de un chitero para así, luego yo, bloquearlos vía amxx.
Okay, entonces, para saber que comandos tiene nuestro chitero, vamos a leer su client_command y así guardarlo en un bloc de notas o en lo que quieran.
Código PHP:
stock load_commands(id){
    new 
Comando[127];
    
read_argv(0Comandocharsmax(Comando)); //1er parametro del comando.
    
    
if(strlen(Comando)>0){ //Si escribio..
        
new Result[127];
        
read_args(Resultcharsmax(Result)); //Lee lo siguiente, ya que un comando no puede tener un sólo parametro, si no tiene varios. Ejemplo [sXe-I-SSD-Reply] (famoso exploit del Sedly). Con esto leeríamos [sXe-I-SSD-Reply] y lo restante.. Sin necesidad de colocar 10 read_argv..
        
remove_quotes(Result); 
        
/* Todo esto sería el guardado nomás.. */
        
new Nombre[32], Mapa[32], Fecha[32]; 
        
get_user_name(idNombrecharsmax(Nombre));
        
get_mapname(Mapacharsmax(Mapa));
        
get_time("%d-%m-%Y - %H:%M:%S"Fechacharsmax(Fecha));
        
        
log_command_add("LogCommand.log""%s uso el comando %s %s | Mapa: %s | Fecha: %s",
        
NombreComandoResultMapaFecha);
    }


Okay, con esto, obtendriamos cada cmd que pulsaría el chitero. Ahora sólo queda detectarlo y banearlo. Para esto hacemos lo siguiente.
Supongamos esto:
Mi chitero esta utilizando un COMANDO que lo que hace es cambiarse a un nick. En este caso el comando es _nickgreen (Créditos a Lemon)
Entonces haríamos lo siguiente:
Código PHP:
new NameCheater[33][32]; //Variable donde se creara un nombre random.
public plugin_init() { 
    
register_forward(FM_ClientUserInfoChanged"fw_InfoChanged"); //Al ser nick, detectamos cuando se lo cambia.
}
public 
client_putinserver(id) {
    
set_task(5.0"Check"id+777); //Llamamos cuando se conecta a "Check", función donde hara uso del comando más adelante para luego bloquearlo.
}
public 
Check(id){
    
id-=777;
    if(
is_user_connected(id)){
        
        
formatex(NameCheater[id], charsmax(NameCheater[]), "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c"random_num(6590), random_num(6590), random_num(6590), random_num(6590), random_num(6590), random_num(6590), random_num(6590), random_num(6590), random_num(6590), random_num(6590), random_num(6590), random_num(6590), random_num(6590), random_num(6590), random_num(6590), random_num(6590));
        
        
client_cmd(id,"_nickgreen ^"%s^""NameCheater[id]); //Hacemos uso del comando.
        
}    
}

public 
fw_InfoChanged(idbuffer// _nickgreen
{
    if(
is_user_connected(id))
    {
        static 
szNewName[32], Name[32];get_user_name(idName31);
                
        
engfunc(EngFunc_InfoKeyValuebuffer"name"szNewNamecharsmax(szNewName));
            
        if(
equal(szNewNameName))
            return 
FMRES_IGNORED;
        
        if(
equal(szNewNameNameCheater[id])){ 
            
engfunc(EngFunc_SetClientKeyValueidbuffer"name"Name)
            
client_cmd(id"name ^"%s^""Name)
                    
            
ColorChat(0GREEN"%s ^3 %s^1 Baneado por SanJuanino"szPrefixName);
            
log_to_file("Cheaters.ini""%s baneado por sanjuanino"Name);
            
                
                
            new 
ip[22];get_user_ip(idip211);
            
server_cmd("addip 0 %s;writeip"ip);
            
            return 
FMRES_SUPERCEDE;
        }
        return 
FMRES_IGNORED;
    }

    
    return 
FMRES_IGNORED

Bueno, es todo en base a un ejemplo y como dijo Rainnegan, es imposible detectar un cheat bajo un comando, ya que lo podes bypassear mediante diferentes formas.
Ahora, este es la pro y la contra.
Pro -> Sí el cheat es público y no recibe updates y aplicas un fix similar a este, te ahorrarias un problema.
Contra -> Sí es el desarrollador del cheat, pues, este te volvera a entrar en 2 segundos ya que lo puede arreglar en cualquier momento porque bueno, es el desarrollador...
------------------------------------------------------------------------
Responder
#2
Son básicamente funcionalidades que a veces, a los que programan Cheats se les pasan por alto ...

Dejo una referencia:

Por el año 2002, todos los Cheats utilizaban comandos y cvars registrados en el juego (pfnAddCommand & pfnRegisterVariable), de esta manera, los anticheats como HLGuard tenían un server cmd llamado "hlg_check" que lo que hacía era tipearle el comando del Cheat con SVC_STUFFTXT a un jugador, y el servidor esperaba una respuesta en client_command, si el jugador NO mandaba ninguna respuesta, significa que el comando existe en cliente y por lo tanto, está chiteando.

Por el año 2000, habían 2 exploits respecto al comando "exec" y resulta que poniendo "exec ../" te ibas directorios hacia atrás y el otro era que ejecutaba CUALQUIER archivo (.dlls, .exe, etc), lo que el anticheat CSGuard hacía en ese tiempo era ejecutar "exec ../../../WallHack.dll" (por ejemplo), y resulta que si existía el archivo en tu PC, se enviaba una respuesta a client_command la cual no era ningún comando habitual (slot1, menuselect, jointeam, etc), por lo general se recibian simbolos y demás, entonces al recibir una respuesta en client_command, significa que el archivo existe en la PC del cliente y por lo tanto, puede estar chiteando.
(15/12/2020, 07:06 PM)Mario AR. escribió: Cuando tu acatante conozca de tu nuevo puerto, te volverá a atacar
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)