[Aportes indexados] AntiSpeedHack

Estado
Cerrado para nuevas respuestas.

Lagalot

Newbie Lvl 6
Objetivo del codigo: Eliminar finalmente todo tipo de speedhack que sirva para atacar mas rapido.

Aclaraciones: El lag no influye en este codigo, ya que es desde el cliente donde se consigue el tiempo, y este no cambia al ser enviado al servidor.

Versiones: 0.11.5, facilmente adaptable a 0.11.2

Procedimientos en el Cliente.

Antes que nada, agregamos este sub:
Código:
Sub SendSH()
 
Dim I
Dim Minutos
Dim Segundos
Dim Fase As Boolean
 
For I = 4 To Len(Time) - 5
    If Not Mid$(Time, I, 1) = Chr(58) Then
        If not Fase = True Then
            Minutos = Minutos & Mid$(Time, I, 1)
        Else
            Segundos = Segundos & Mid$(Time, I, 1)
        End If
    Else
        If not Fase = True Then
            Fase = True
        End If
    End If
Next I
 
Call SendData("SHX" & Minutos & Segundos)
 
End Sub

Con esto enviamos el tiempo en el que el ataque se realizo.

Despues en la frmmain, en el sub:
Código:
Sub Form_Click
abajo de donde dice:
Código:
SendData "WLC" & tX & "," & tY & "," & UsingSkill
ponemos:
Código:
Call SendSH

Finalmente en el mod tcp, arriba del case:
Código:
Case "EST
<ol><li style="" class="li1"><span style="color: #b1b100;">Case "SHX"
            Call SendSH
            Exit Sub

En estas 2 lineas hacemos una llamada al sub EnviarSH.

Procedimientos en el Servidor.

Arriba de todo el case:
Código:
Case "/MEDITAR"
creamos este nuevo case:
Código:
Case "SHX"
            Dim LagaMin
            Dim LagaSeg
            Dim Math
            LagaMin = Right$(rData, Len(rData) - 3)
            LagaSeg = ReadField(1, rData, 32)
            
            If UserList(UserIndex).AntiSh.LastMin = LagaMin Then
                If LagaSeg - UserList(UserIndex).AntiSh.LastSeg = 1 Or 0 Then
                    Call Ban(UserList(UserIndex).name, "Servidor", "Uso de speedhack")
                    Call CloseSocket(UserIndex)
                    Exit Sub
                End If
            ElseIf UserList(UserIndex).AntiSh.LastMin + 1 Or UserList(UserIndex).AntiSh.LastMin - 1 = LagaMin Then
                Math = LagaSeg - 60
                Math = Math / -1
                If Math - UserList(UserIndex).AntiSh.LastSeg = 0 Or 1 Then
                    Call Ban(UserList(UserIndex).name, "Servidor", "Uso de speedhack")
                    Call CloseSocket(UserIndex)
                    Exit Sub
                End If
            End If
            UserList(UserIndex).AntiSh.LastMin = LagaMin
            UserList(UserIndex).AntiSh.LastSeg = LagaSeg
            Exit Sub

Con esto buscamos la diferencia entre el ultimo ataque, y el actual, y si esta es menor a 2, entonces banea al usuario.

Ahora vamos al sub:
Código:
Sub UsuarioAtaca
y abajo de:
Código:
If IntervaloPermiteAtacar(UserIndex) Then
ponemos:
Código:
Call SendData(SendTarget.ToIndex, UserIndex, 0, "SHX")

Esto es para que no banee a la gente que ataca con CNTR si el intervalo no les permitia atacar.

Luego vamos al sub:
Código:
Sub ConnectUser
y abajo de donde dice:
Código:
UserList(UserIndex).Password = Password
Ponemos:
Código:
UserList(UserIndex).AntiSh.LastMin = 77
UserList(UserIndex).AntiSh.LastSeg = 77

Solucionamos cualquier posible bug.

Finalmente, en las declaraciones, arriba del type:
Código:
Type UserStats
creamos este nuevo type:
Código:
'Contadores de speedhack
Public Type UserSh
    LastMin As Integer
    LastSeg As Integer
End Type

y tambien abajo de:
Código:
Stats As UserStats
ponemos:
Código:
AntiSh As UserSh

Y Definimos todo lo que vamos a nesesitar.

Suerte, y espero que les sirva.
 

Tavo

[color=#BF0000]Lucha por tus ideales![/color]
No sirve, tenes que usar el GetTickCount para tomar el tiempo... el Time se puede cambiar facilmente.
 

Shura

Dragón Ancestral Lvl 2
[vb]<div class="vb" id="{CB}" style="font-family: monospace;"><ol><li style="" class="li1"><span style="color: #b1b100;">function</span> SH<span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span> <span style="color: #b1b100;">as</span> <span style="color: #b1b100;">boolean</span> </li><li style="" class="li2"><span style="color: #b1b100;">dim</span> Tick <span style="color: #b1b100;">as</span> <span style="color: #b1b100;">long</span> </li><li style="" class="li1"><span style="color: #b1b100;">dim</span> <span style="color: #b1b100;">Timer</span> <span style="color: #b1b100;">as</span> <span style="color: #b1b100;">long</span> </li><li style="" class="li2">Tick = GetTickCount<span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span> </li><li style="" class="li1"><span style="color: #b1b100;">Timer</span> = <span style="color: #b1b100;">Time</span> * <span style="color: #cc66cc;">86400000</span> </li><li style="" class="li2"><span style="color: #b1b100;">while</span> Tick - GetTickCount<span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span> <> <span style="color: #cc66cc;">1000</span>: <span style="color: #b1b100;">Wend</span> </li><li style="" class="li1"><span style="color: #b1b100;">If</span> <span style="color: #b1b100;">not</span> <span style="color: #cc66cc;">900</span> < <span style="color: #b1b100;">Time</span> * <span style="color: #cc66cc;">86400000</span> - <span style="color: #b1b100;">Timer</span> < <span style="color: #cc66cc;">1100</span> <span style="color: #b1b100;">then</span> SH = <span style="color: #b1b100;">true</span> </li><li style="" class="li2"><span style="color: #b1b100;">end</span> <span style="color: #b1b100;">function</span></li></ol></div>[/vb]

Posteado Por Integer Si No Me Falla La Memoria
 

Lagalot

Newbie Lvl 6
Tavo dijo:
No sirve, tenes que usar el GetTickCount para tomar el tiempo... el Time se puede cambiar facilmente.

Cambiar facilmente? acaso alguien va a abrir el administrador de tiempo para cambiarlo cada vez que le pegue a un npc o user?
O si se crease un programa que cada segundo cambiara el tiempo de la computadora lagueria todo, aparte de hacerte tener que configurar todo el reloj denuevo.

Decime a que te referis con el cambiar facilmente :S
 

Tavo

[color=#BF0000]Lucha por tus ideales![/color]
Se puede cambiar por un usuario no avanzado, es facil de crackear, y no creo que la tilde la computadora por eso.
La funcion eficaz es la uqe puso Shura que la hizo Nacho (Integer).
 

Loopzer

Oráculo Lvl 2
(HINT) al tick count le afecta el SH , pero al timer no mucho

emo78qj4.gif


ahora que lo pienso

if FPS > 18 then CHIETER XD
 

Zy

Newbie Lvl 2
No se puede verificar desde el server?

Le agregamos contadores en el tipo del user con el tiempo desde que atacó/movió/etc por última vez. Y si no supera el intervalo no lo dejamos realizar la acción. (Tmb controlamos en el cliente para que no flodee el server)

Creería que ya se le ocurrió a alguien y no funcó XD pero bue
 

Tavo

[color=#BF0000]Lucha por tus ideales![/color]
Hacelo y vas a ver como se te tilda todo el servidor y anda lento...
 
Estado
Cerrado para nuevas respuestas.
Arriba