Haii!
Zur grundursache:
Es wird die funktion zum wechseln des aktiven Items (das was man in der Hand hält) manipuliert.
Es wird im Source ein Array mit 8/9 ? (ka grad wieviele slots es da gibt) erstellt.
Der Client sendet ein Packet an den Server mit der ID des Slots welchen er grad aktiv hat (type: short). Wenn man jetzt diesen wert über 8/9 treibt in meinem Fall 255 fragt der Server informationen aus einem Array bereich ab den es nicht gibt. Somit kackt der Server ab.
Was ist zu tun?
Wir öffnen die Datei (decompiliert) "Packet16BlockItemSwitch.java"
Dort suchen wir die Funktion "func_22918_a" (könnte bei euch "readPacket" heisen).
Dort sehen wir die Zeile: "field_23030_a = datainputstream.readShort();"
Das heist er liest aus dem Packet einen Short (2bytes) raus und packt es in die variable "field_23030_a".
Nun müssen wir verhindern das der Angreifer einen Wert über 8/9 an den Server sendet!
DIes machen wir mit:
if ( (field_23030_a < 0) || (field_23030_a > 8 )
field_23030_a = 0;
Heist für dummies :
ist der Wert kleiner als 0 oder größer als 8 fülle ihn mit 0.
Es kann sein das ihr ihn anderst deobfuscatet hat und deswegen andere variablen hat. Es kann aber auch sein das der Syntax nicht der exakte ist wie man ihn bei Java benutzt.
Da der Supercoole Synaptic eh wieder rausfindet das ich das Fixx tutorial nicht selber gemacht hast:
Credits gehen an mein Fachinformatik freund Klaus van Freudehaus!
Zur grundursache:
Es wird die funktion zum wechseln des aktiven Items (das was man in der Hand hält) manipuliert.
Es wird im Source ein Array mit 8/9 ? (ka grad wieviele slots es da gibt) erstellt.
Der Client sendet ein Packet an den Server mit der ID des Slots welchen er grad aktiv hat (type: short). Wenn man jetzt diesen wert über 8/9 treibt in meinem Fall 255 fragt der Server informationen aus einem Array bereich ab den es nicht gibt. Somit kackt der Server ab.
Was ist zu tun?
Wir öffnen die Datei (decompiliert) "Packet16BlockItemSwitch.java"
Dort suchen wir die Funktion "func_22918_a" (könnte bei euch "readPacket" heisen).
Dort sehen wir die Zeile: "field_23030_a = datainputstream.readShort();"
Das heist er liest aus dem Packet einen Short (2bytes) raus und packt es in die variable "field_23030_a".
Nun müssen wir verhindern das der Angreifer einen Wert über 8/9 an den Server sendet!
DIes machen wir mit:
if ( (field_23030_a < 0) || (field_23030_a > 8 )
field_23030_a = 0;
Heist für dummies :
ist der Wert kleiner als 0 oder größer als 8 fülle ihn mit 0.
Es kann sein das ihr ihn anderst deobfuscatet hat und deswegen andere variablen hat. Es kann aber auch sein das der Syntax nicht der exakte ist wie man ihn bei Java benutzt.
Da der Supercoole Synaptic eh wieder rausfindet das ich das Fixx tutorial nicht selber gemacht hast:
Credits gehen an mein Fachinformatik freund Klaus van Freudehaus!