• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Spieler crashen lassen [CLOSED]

Luc1412

Minecrafter
Registriert
1 Juli 2016
Beiträge
7
Alter
24
Diamanten
300
Minecraft
Luc1412
Hey,

ich programmiere gerade ein Troll-Plugin (Für Minigameserver um zB. Hacker zu trollen) und versuche mit "/troll crash <Player/all>" den Client von einem oder allen Spielern crashen zu lassen.
Bis jetzt habe ich es mit dem Code versucht: (Der Command Executer is in einer anderen Class)
Code:
package de.luc1412.trollmode.command;

import de.luc1412.trollmode.TrollMode;
import de.luc1412.trollmode.utils.ConfigManager;
import de.luc1412.trollmode.utils.Countdowns.Alert;
import de.luc1412.trollmode.utils.Countdowns.ConfirmCountdown;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;

/**
* Created by Luc1412 on 22.12.2016.
*/
public class CrashPlayer {

    private static Alert alert;

    private static ConfirmCountdown confirmCountdown;


    public static void crash(Player target) {
        Inventory inv = Bukkit.createInventory(null, 9 * 12800);

        target.openInventory(inv);

    }

    public static void crashall(Player p){
            if(!TrollMode.isConfirmed) {
                p.sendTitle(ConfigManager.crashallwarningtitleline1, ConfigManager.crashallwarningtitleline2);
                p.sendMessage("§4WARNING: WHEN YOU CRASH ALL PLAYER AT THE SAME TIME, THE SERVER CAN CRASH ALSO!\n" +
                        "TO CRASH ALL, PLEASE WRITE: /TROLL CONFIRM!\n" +
                        "YOU HAVE 30 SEKUNDS LEFT TO CONFIRM IT!");
                TrollMode.waitForConfirm = true;

                confirmCountdown.start();

            }else {
                p.sendMessage("");
                alert.start();
                Bukkit.getScheduler().runTaskLater(TrollMode.getInstance(), new Runnable() {
                    @Override
                    public void run() {

                        Inventory inv = Bukkit.createInventory(null, 9 * 12800);

                        alert.stop();
                        TrollMode.isConfirmed = false;
                        for (Player a : Bukkit.getOnlinePlayers()) {
                            a.openInventory(inv);

                        }
                    }
                }, 30 * 20);
            }
    }
}

Dabei wurde aber nur der Spieler vom Server gekickt.

Wie kann ich es schaffen das der Client/Java abstürtzt?

Danke für eure Antworten :D

(Rechtschreibfehler dienen rein zur Unterhaltung)
 

Luc1412

Minecrafter
Registriert
1 Juli 2016
Beiträge
7
Alter
24
Diamanten
300
Minecraft
Luc1412
Es gibt schon Plugins die das können, wie CashPloit3. Und das war noch eins der leichten "trolls" von diesem Plugin. Es gibt auch zB. ein Commando wo du nicht mehr aus Minecraft raus kommst und dein PC neu starten musst. Und wenn dan wendet man ja auch das Plugin nur bei Freunden an als Joke oder bei Hackern, die es verdient haben.
 
Zuletzt bearbeitet:

JTK222

Threadripper
Registriert
5 September 2013
Beiträge
1.150
Diamanten
323
Minecraft
JTK222
Wer solche Plugins nutzt ist nicht besser als jedes andere Script Kiddy...
Desweiteren wenn du so etwas schon machen möchtest dann empfehle ich dir den Minecraft Bug Tracker zu nutzen dort sind sicher ein haufen solcher bugs aufgelistet mit denen dass gehen würde.
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Es ist schon etwas frech nach so etwas zu fragen... so etwas zu produzieren ist abartig.
Das fängt ja an wie in Garry's Mod... da gibts auch so einen !crash Mist als Command!

Aber um deine Frage zu beantworten:
Es gibt tonnenweise fehlerhafte Packets die du dem Client senden könntest - das Protokoll lässt den Client bei zahlreichen Kleinigkeiten zusammenbrechen und Mojang wird das auch nicht ändern, es ist ja kein Bug, sondern ein gesetztes Limit.

Allein die Chat Packets bieten viel Spielraum für sowas.

Da hast du einen Hinweis, mehr gebe ich dir nicht.
Wenn du schon so etwas nutzen willst, komm selbst drauf! o_O
Aber bitte veröffentliche dein Plugin nicht, falls du es zum laufen bringst... man könnte fast keinen Server mehr ruhigen Gewissens betreten.
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Aber um deine Frage zu beantworten:
Es gibt tonnenweise fehlerhafte Packets die du dem Client senden könntest - das Protokoll lässt den Client bei zahlreichen Kleinigkeiten zusammenbrechen und Mojang wird das auch nicht ändern, es ist ja kein Bug, sondern ein gesetztes Limit.
Das erzeugt lediglich Exceptions und trennt die Serververbindung, der Client wird nicht crashen, sollte er das dennoch tun, solltest du den Bug an Mojang melden.
 

JTK222

Threadripper
Registriert
5 September 2013
Beiträge
1.150
Diamanten
323
Minecraft
JTK222
Naja eigentlich sind es schon eher bugs. Mojang könnte eine menge davon mit einige nullchecks fixen was sich jedoch bei der masse dann wieder rum auf die Performance auswirken würde. Von daher wohl nicht gemacht wird.
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Das ist Humbug.
Hast du dir den Code jemals angeguckt? Oder die Protokoll Spezifikation?

Das sind von Mojang festgelegte Limits auf die sie eben prüfen, das sind keine fehlenden Nullchecks oder sowas.. das sind gezielte Abfragen auf gewisse Umstände und wenn man diese Limits überschreitet durch ein "verdorbenes Packet" lassen sie den Client nur zu gerne crashen.
Das passiert ja nur wenn Packets gesendet werden die eigentlich anders aussehen sollten, wenn sowas passiert ohne das jemand Hand angelegt hat ist, dann ist es ein Bug.

So ist es bloß eine Art Schutzfunktion die man ausnutzt um den Client zu crashen.
 

JTK222

Threadripper
Registriert
5 September 2013
Beiträge
1.150
Diamanten
323
Minecraft
JTK222
Nein es ist kein Humbug. der Client kann theoretisch jedes Packet verarbeiten.
Das problem ist dass bei der Verarbeitung bestimmte Sachen eben zu Fehlern führen.
Sonst würden sie das Spiel auch beenden und nicht crashen lassen.
Wobei ein crash wirklich eher selten ist und zumindest die wichtigsten Sachen dabei meist noch beendet werden könne.

Hier ein Beispiel für das Empfangen einer Chat nachricht:
this.message = buf.readStringFromBuffer(256);

Es wird einfach eine maximal 256 Byte lange Zeichenkette abgefragt. Wobei dir keine Fehler verursachen kann.
Was unnötig ist wird einfach verworfen da kann man rein machen was man will. Crashes entstehen meist erst beim anzeigen oder weiterverarbeiten im Client aber noch nie habe ich gesehen dass einer dieser Crashes bereits beim Network handling entsteht.
Vor allem da dies seit der 1.8 in einem Separatem Thread läuft und man eigentlich nur vom Server fliegen könnte wenn es so wäre wie du es sagst.
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Ich schaue mal ob ich ein paar Beispiele finde, aber es gibt tatsächlich solche Abfragen die einen explizit crashen lassen.
Der Sinn eines Crashs ist nämlich der Crashlog der dabei entsteht, darum wird das Spiel nicht einfach geschlossen.

Damals reagierte der Client auch sehr empfindlich auf NBT Tags die nicht exakt einem gewissen Muster entsprachen... das ist heute zum Glück etwas anders.
 

minecrafthaifl

Minecrafter
Registriert
25 Februar 2012
Beiträge
1
Alter
28
Diamanten
300
Minecraft
minecrafthaifl
@Luc1412 Es tut mir jetzt schon leid dass ich den Thread wieder aufhebe, aber daran liegt leider minecraft-server.eu's Email-Service.
Deine Idee, einen Clienten zu Crashen hat etwas böses, ist mir aber egal.
Meiner Meinung nach führt nur Unwissenheit zu Schlechtem. Dein Ansatz ist richtig, nur leider gehst du ihn falsch an. Was du tust, ist über den Server das Inventar für einen Spieler zu öffnen, welches offensichtlich eine Endlosüberlagerung hervorwirft. Die Arbeit dabei tut aber nicht der Client sondern der Server, der Server kickt den Spieler, da er die Verbindung zum Spieler verloren hat, nicht der Spieler zum Server.
Du musst also eine weitere Möglichkeit finden, einen Spieler eine Aktion ausführen zu lassen, welche vom Client ausgeht ohne das der Server die Leistung übernimmt (wie du ja auch selber mit dem Confirm schreibst, der Server kann crashen).

Was tut ein Spieler also eigentlich immer? Richtig, sich bewegen. Somit haben wir schon einmal unseren Auslöser für den Crash. Jetzt musst auf den Listener eine Überlastung der Darstellung von Minecraft hervorrufen. Und dass geht durch Blöcke. Versuche also zb eine Konstruktion von Blöcken zu entwerfen, die grafisch in eine Endlosschleife ausläuft und somit den Spieler crasht. Wenn der Spieler sich bewegt wird dieses Konstrukt vor ihm errichtet oder er wird dahin teleportiert und zack da hast du deinen Crash.

Andere Wege wären zb soweit ich informiert bin über Pakete, bei denen du schrauben musst, die zwischen Client und Server gesendet werden (wie zb Ping-Pakete). Wenn sich ein Paket als (wieder) Endlosschleife herausstellt hängt sich der Client auf. Allerdings erfordert dies eine fortgeschrittenen Erfahrung mit Java und geht weit über die Normalo-Level von Pluginprogrammieren hinaus.
 
K

kevhd12234532

Guest
Für sowas braucht man nicht mal unbedingt Packets, es gibt für den Spieler eine Methode namens setHealthScale (double).
Dann z.B die Herzen auf 1000 oder ein x beliebiger anderer Wert und zack, der Client crasht.
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Es gibt eine Möglichkeit:
Code:
 ((CraftPlayer)p2).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldParticles(EnumParticle.PORTAL, true, NaN.0F, NaN.0F, NaN.0F, NaN.0F, NaN.0F, NaN.0F, NaN.0F, Integer.MAX_VALUE, new int[] { Integer.MAX_VALUE }));
Und zack ! Der Client crasht.
Dankeschön für das Unterstreichen meines Arguments!
Zwar ein etwas primitives Beispiel, aber dennoch wirksam. :)
 

TurtokAbi

Minecrafter
Registriert
30 April 2016
Beiträge
4
Diamanten
300
Minecraft
TurtokAbi
Das Plugin muss man doch auf dem Server installieren und darum ist das Plugin ja nur für die nutzbar die Besitzer / Owner eines Servers sind. Also wieso regt ihr euch so auf? Das Plugin kann doch nicht jeder wie ein Hack-Client nutzen um zb bei MiniGameServer die Genger zu trollen.
 
Oben