Einzelnen Beitrag anzeigen
Alt
  (#29)
Jeix
Benutzerbild von Jeix
 
Status: Offline
Beiträge: 874
Registriert seit: 22.08.2009
Standard 20.09.2010, 16:32

So, ich hab mir mal Exolents Plugin angesehen und ausgehend davon, dass xPaw dieselbe Technik benutzt, es analysiert.

Die ganze Logik findet im client_PreThink Forward statt:
Code:
0x14BC      PROC                        ; client_PreThink
Er benutzt die bekannte Methode, um zu prüfen, ob ein Spieler Jump gedrückt hat via EV_INT_oldbuttons und EV_INT_flags, um zu prüfen, in welchem Status sich ein Spieler befindet und wann er genau Jump gedrückt hat.

Insgesamt zählt er also wenn ein Spieler springt und wieder landet, die Anzahl der Frames, wann der Spieler das nächste mal wieder springt. Ein perfekter Bhop ist, wenn man genau 2 Frames nach dem Landen wieder springt. Ist dies der Fall, dann werden zwei interne Zähler erhöht (g_iTotalPerfectBhops und g_iRowPerfectBhops). Macht man einen nicht perfekten Bhop wird der der letztere Zähler logischerweise zurückgesetzt.

So wie ich das bis jetzt sehe (und ich werde es mir nicht genauer ansehen), prüft das Plugin nur die Anzahl der perfekten BHops in Reihe und bannt dann. Das andere wäre ja auch unlogisch.

Proof:
get_entity_int mit EV_INT_flags
Code:
 0x14F8      PUSH.C                 0x1B    ; push EV_INT_flags (27d / 0x1B) auf den Stack (für FL_JUMPING etc)
 0x1500      PUSH.S                  0xC    ; push CLIENT ID auf den Stack
 0x1508      PUSH.C                  0x8    ; (2 parameter?) 
 0x1510      SYSREQ.C      entity_get_int   ; PRI enthält rückgabewert
 0x1518      STACK                   0xC    ; stack aufräumen 
 0x1520      STOR.S.pri             -0x4    ; rückgabewert der funktion in LOCAL1 speichern
get_entity_int mit EV_INT_oldbuttons
Code:
 0x1534      PUSH.C                  0x1    ; push EV_INT_oldbuttons auf stack (0x2, für IN_JUMP etc)
 0x153C      PUSH.S                  0xC    ; push CLIENT ID auf stack 
 0x1544      PUSH.C                  0x8    ; (2 parameter?)
 0x154C      SYSREQ.C      entity_get_int
 0x1554      STACK                   0xC
 0x155C      STOR.S.pri             -0x8    ; rueckgabewert in LOCAL2 speichern
Wenn JUMP gedrückt wird:
Code:
 0x1568      LOAD.S.pri             -0x4    ; FLAGS (LOCAL1) in PRI
 0x1570      CONST.alt             0x200    ; #define IN_JUMP (1<<1) in ALT
 0x1578      AND                            ; PRI = Flags & IN_JUMP
 0x157C      JZER              jump_0047    ; wenn NICHT IN_JUMP (PRI=0), dann jump
 
 0x1588      CONST.alt            0x22C4    ; g_iGroundFrames in ALT
 0x1590      LOAD.S.pri              0xC    ; CLIENT_ID in PRI
 0x1598      BOUNDS                 0x20    ; wenn CLIENT ID invalid, dann brech ab (max. 32)
 0x15A0      IDXADDR                        ; indexiere g_iGroundFrames => Adresse vom wert in PRI
 0x15A4      INC.I                          ; PRI += 1
 0x15A8      LOAD.I                         ; PRI = g_iGroundFrames[CLIENT_ID]  (hole den wert von der addresse)
 0x15AC      EQ.C.pri                0x2    ; PRI = true(=1), wenn g_iGroundFrames=2 ist
 0x15B4      JZER              jump_0048    ; g_iGroundFrames[CLIENT_ID] != 2     (wenn PRI == FALSE(=0), dann jump)
^-- Oben: wenn g_iGroundFrames[CLIENT_ID] == 2, dann unten: --v

Code:
 0x15C0      PUSH.S                  0xC    
 0x15C8      PUSH.C                  0x4
 0x15D0      CALL               CheckRow    ; checkRow: prüft die anzahl der perfekten jumps und bannt, wenn es zuviele in einer Reihe sind
Ich gucke noch mal eben wie viele perfekte Jumps man machen muss und editiere das dann hier rein, falls ich es finde.

Ansonsten werden mit dem Ding nur die alten Skripte erkannt und vermutlich der private KZHack, da ich davon ausgehe, dass dieser genau die Frames berechnet und jedes mal einen perfekten Bhop macht.

Da es jedoch auch KZHacks mit Streuung geben soll, wird er auch von diesem Detektor nicht erkannt.

Je nachdem wie viele perfekte Jumps in Reihe man machen muss bis man gebannt wird, kann man dann über den Bann von FIREonTOUR diskutieren. Weil ein paar perfekte hintereinander ist bestimmt machbar.

greets
   
Mit Zitat antworten