Comu (31.05.2012), Dbzfreak1337 (31.05.2012), DnL (03.06.2012), Gangstersheep (21.07.2012), Mentos (01.06.2012), Pwned (21.07.2012), rVs14 (31.05.2012), Saad (07.12.2012), x failstar (07.06.2012)
-
31.05.2012, 21:53 #1
- Registriert seit
- 15.11.2011
- Beiträge
- 6.145
- Blog Entries
- 5
Thanked 9.130 Times in 3.005 Posts[Paper #2] Zugriff auf den Knuddelsclient aus Java heraus
1. Vorwort
Der Knuddelsclient selbst ist in Java geschrieben. Es liegt also nahe, dass wir Java nutzen, um den Client zu unseren Gunsten zu manipulieren.
Unser Ziel wird es sein, eine Java-Anwendung zu entwickeln, die zwischen dem originalen Knuddels-Client und dem Chatserver steht.
So kommuniziert der Knuddels-Client normal:
Da wir diesen Datenverkehr kontrollieren, manipulieren und ggf. auch selbstständig erzeugen wollen, sitzt unsere Java-Anwendung später dazwischen:
Wenn unser Client ein Paket zum Server senden will (z.B. wenn wir eine Nachricht senden), landet dieses Paket nicht direkt beim Server, sondern erst beim Client.
Haben wir im Client festgelegt, dass dieses Paket okay ist, wird es zum Server weitergeleitet.
Unsere Java-Anwendung stellt also eine Art Brücke zwischen Client und Server da, mit der wir alles kontrollieren können.
2. Vorbereitungen und Werkzeuge
2.1 Java Umgebungsvariablen registrieren
Dieses Tutorial baut auf dem ersten Teil http://u-hacks.net/tutorials-90/pape...mmierung-8629/ auf.
Ihr solltet also wie dort beschrieben das Java-SDK zusammen mit einem Texteditor eurer Wahl besitzen.
Da wir später Java-Programme konsolenbasiert sowohl ausführen als auch kompilieren werden, müssen die Umgebungsvariablen angepasst werden.
Wie das genau funktioniert, könnt ihr hier nachlesen: Installation des Java SDK / JDK (ab Punkt 8).
2.2 Knuddels Applet herunterladen
Da wir mit dem Knuddels-Applet arbeiten und es später sogar manipulieren wollen, benötigen wir dies natürlich erst einmal.
Die aktuellste Version bekommen wir relativ einfach von der Knuddels-Homepage, wir müssen dazu nur den Login aufrufen: Chat - Knuddels.de
Auf der Loginseite öffnen wir nun den Quelltext (Firefox: [STRG] + [U]) und suchen darin nach ".jar" (Firefox: [STRG] + [F].
Damit sollten wir diese Zeile finden:
PHP-Code:<applet id="chatapplet" name="chatapplet" width="100%" height="100%" code="Start.class" archive="knuddelsk90alw.jar"
codebase="http://chat.knuddels.de/"
alt=" " mayscript="yes" scriptable="true" >
PHP-Code:archive="knuddelsk90alw.jar"
Dies können wir nun einfach herunterladen, indem wir chat.knuddels.de/ davorsetzen: http://chat.knuddels.de/knuddelsk90alw.jar
Dazu benötigen wir noch das zur Version passende ani-Archiv. Der Archivname lautet gleich wie der des Applets, nur wird knuddelsk durch ani ersetzt: http://chat.knuddels.de/ani90alw.jar
2.3 Java Decompiler
Um den compilierten Javacode von Knuddels wieder in eine einigermaßen lesbare Form zu bringen, brauchen wir einfen Decompiler.
Es gibt hier ein paar verschiedene zur Auswahl. Dabei ist jedoch kein universeller, der alles perfekt decompilieren kann: Der eine compiliert diesen Teil des Applets besser, der andere den anderen.
Für komplexere Vorhaben macht es daher Sinn, mehrere decompiler zu nutzen.
Anfangs spielt das aber keine große Rolle, daher nehmen wir JD in der Gui-Version.
Download: JD-GUI | Java Decompiler
3. Erstes decompilieren des Applets
Wir öffnen nun JD-GUI und ziehen das Applet, also knuddelsk90alw.jar, hinein (alternativ auch über File => Openfile öffnen).
Links sehen wir nun die ganzen Klassen des Applets. Wie man sieht, sind die Namen nicht sehr aussagekräftig (OI, Z1, I5 etc).
Dieses Kunstwerk haben wir dem vom Knuddels eingesetzten obfuscator zu verdanken. Zum einen soll uns dies das Reversen des Applets erschweren, zum anderen ist das Applet durch das obfuscaten kleiner.
In der linken Leiste suchen wir nun eine Klasse mit dem Namen 'Start'. Diese Klasse wird, wie der Name schon sagt, beim starten des Applets geladen.
Die Start-Klasse erbt immer von der sogenannten 'GroupChat-Klasse', zu erkennen direkt an der ersten Zeile:
Code:public class Start extends dO [...]
In der Start-Klasse sehen wir noch weitere Methoden. Die für uns relevanten sind vorallem init() und start().
Der Code sieht ziemlich chaotisch und kryptisch aus:
Spoiler:
Für die Klasse interessieren wir uns aber erstmal gar nicht, unsere Aufmerksamkeit gilt der GroupChat-Klasse dO.
4. Den Client aus Java heraus starten
Nun geht es an das eigentliche coden in Java.
Zuerst einmal erstellen wir ein leeres Textdokument mit dem Namen Client und der Datenendung .java.
Dazu müsst ihr entweder in Windows das Anzeigen von Dateierweiterungen aktivieren, oder im Texteditor beim Speichern-Dialog als Dateiname Client.java und als Dateityp Alle Dateien auswählen.
Ansonsten kommen so gebilde wie Client.java.txt heraus, die wir natürlich nicht wollen.
Nachdem wir diese Datei in einem Texteditor geöffnet haben, fügen wir das Grundgerüst von so ziemlich jeder Java-Anwendung ein:
Code:public class Client { public static void main(String[] args) { } }
Wenn wir uns die sehr umfangreiche Klasse im Decompiler anschauen, sehen wir, dass der Konstrukteur 2 Argumente aufnehmen kann:
Code:// ERROR // public dO(String paramString, int paramInt) { // Byte code: // 0: aload_0 // 1: invokespecial 1333 java/applet/Applet:<init> ()V // 4: aload_0 // 5: sipush 445 // 8: invokestatic 1334 t5:a (I)Ljava/lang/String; // 11: putfield 2295 dO:h Ljava/lang/String;
Der erste Parameter des Konstrukteurs ist der Chathost, der zweite der entsprechende Port.
Mit diesen Daten wird angegeben, zu welchem Chatsystem (DE, AT, CH, ...) sich das Applet verbinden soll. Knuddels nutzt für diese Chatsysteme jeweils den selben Client.
Von Knuddels.de lauten diese Daten wie folgt:
Host: chat.knuddels.de
Port: 2710
Wir erstellen also eine neue Instanz der GroupChat-Klasse und übergeben dieser im Konstrukteur Host und Port:
Code:dO groupChat = new dO("chat.knuddels.de", 2710);
Dafür sehen wir uns mit dem obfuscator erneut die Start-Klasse an und suchen nach den Methoden init() und start:
Spoiler:
Hier sehen wir, dass init() als erstes die Methode f() aufruft. Start ruft auch eine Methode auf, die jedoch r() heißt.
Beide gehören zur GroupChat-Klasse. Diese Methoden müssen wir auch aufrufen, um das Applet zu initialisieren und anschließend zu starten:
Code:dO groupChat = new dO("chat.knuddels.de", 2710); groupChat.f(); groupChat.r();
Da dieser Zustand zur Eingabe von Logindaten ziemlich ungeeignet ist, erzeugen wir ein Fenster, in Java ein sogenanntes JFrame, auf dem wir das Applet plazieren.
Dafür müssen wir zuerst mal javax.swing.JFrame importieren, in dem wir ganz oben vor allem anderen folgende Zeile einfügen:
Code:import javax.swing.JFrame;
Code:JFrame mainFrame = new JFrame("Knuddels-Client");
Nun müssen wir das Applet natürlich noch unserem JFrame hinzufügen:
Code:mainFrame.add(groupChat);
Code:mainFrame.pack(); mainFrame.setLocationRelativeTo(mainFrame.getRootPane()); mainFrame.setVisible(true);
Der gesamte Code sollte nun so aussehen:
Spoiler:
Damit sich das Programm starten lässt, müssen wir es compilieren und anschließend starten.
Da wohl keiner darauf steht jedes mal einzelne Befehle dafür einzugeben, erstellen wir uns eine Batch-Datei, die wir dafür dann nur noch öffnen müssen.
Also wieder dasselbe Spiel wie vorher bei der Client.java-Datei: Wir erstellen eine neue Datei mit der Dateiendung .bat. Idealerweise nennt man sie start.bat, da sie zum starten des Clienten dient.
In die Datei kommt folgendes:
Code:javac Client.java pause java Client pause
Dazwischen warten wir mit Pause auf einen Tastendruck, falls beim compilieren etwas schiefläuft. Wenn nämlich beim compilieren was schiefläuft, wird die Java-Datei logischerweise nicht compiliert, und java guckt dumm wenn nix zum ausführen da ist.
Bei komplexeren Projekten könnte man sich damit auch etwas zerschießen.
Jetzt ist soweit alles fertig, es fehlt nur noch eine Sache, und zwar eine wichtige: Das Applet.
Wenn wir kein Applet haben können wir logischerweise auch keines starten, daher ändern wir das jetzt:
Am Anfang haben wir das Applet (knuddelsk90alw.jar) und das dazu passende ani-Archiv heruntergeladen.
Beide Archive entpacken wir nun in den selben Ordner, in dem sowohl Client.java als auch start.bat liegen.
Die Archive dürfen sich jedoch in keinem Unterordner befinden, sonst müssen wir den Classpath von Java anpassen, das lasse ich in diesem Tutorial absichtlich weg.
Dann muss noch der netscape-Ordner rein (befindet sich unten im Anhang, einfach runterladen und entpacken) und der Client ist soweit fertig.
Wenn euer Client-Ordner nun aus einem Durcheinander von vielen class- und diversen anderen Dateien besteht, ähnlich wie dem folgenden:
solltet ihr alles richtig gemacht haben.
Jetzt könnt ihr start.bat starten und testen, ob alles funktioniert.
Nachdem sich ein schwarzes Fenster geöffnet hat, compiliert Java die Datei Client.java.
Wenn euer Code nicht fehlerhaft ist, sollte Java nichts dazu sagen und direkt zu der pause-Anweisung in der Batch-Datei springen:
Nachdem ihr irgendeine Taste gedrückt habt, wird der Client gestartet:
Ihr habt nun einen lokalen Knuddels-Client, mit dem ihr euch normal in Knuddels einloggen könnt.
Der hier erstellte Client befindet sich in der momentan aktuellsten Version (90alw) zusätzlich im Anhang!
5. Nachwort
Im nächsten Tutorial kommt der interessante Teil, nämlich die eigentliche Manipulation des Clienten, dazu. Der hier erzeugte Client ist praktisch der originale Knuddelsclient, der einfach nur lokal gestartet wird.
Er bildet aber die Grundlage für spätere Clientmanipulationen.
Im nächsten Teil werde ich auch zeigen, wie man das ganze übersichtlicher lößt. In diesem Teil wird einfach alles in einen Ordner geklatscht. Für Anfänger gut, da sie schnell zum Ergebnis kommt weil sie unterschiedliche Pfade nicht beachten müssen (was auch einige Fehlerquellen ausschließt).
Für produktives Entwickeln ist so ein chaos natürlich absolut ungeeignet, erst recht bei der Manipulation, mit der ab dem nächsten Teil begonnen wird.
Ausserdem gibt es noch ein paar Tricks, wie man seine Anwendungen dynamischer entwickeln kann, um so wenig wie möglich Variablen bzw Klassennamen zu verwenden, die sich bei einem Appletupdate ändern.
Ein Beispiel wäre das verwenden der Start-Klasse (die ja von der GroupChat-Klasse erbt) anstatt direkt der GroupChat-Klasse.
Das fällt hier aber alles bewusst weg, damit auch Anfänger schnell mit möglichst wenig Fehlerquellen zu einem Ergebnis kommen.
-
The Following 9 Users Say Thank You to DMW007 For This Useful Post:
-
07.12.2012, 15:23 #2
- Registriert seit
- 15.11.2011
- Beiträge
- 6.145
- Blog Entries
- 5
Thanked 9.130 Times in 3.005 PostsAW: [Paper #2] Zugriff auf den Knuddelsclient aus Java heraus
Screens neu hochgeladen, da der Großteil down war.
-
The Following User Says Thank You to DMW007 For This Useful Post:
Minecraft (07.12.2012)
-
25.10.2016, 18:59 #3
- Registriert seit
- 15.11.2011
- Beiträge
- 6.145
- Blog Entries
- 5
Thanked 9.130 Times in 3.005 PostsAW: [Paper #2] Zugriff auf den Knuddelsclient aus Java heraus
Der Java-Compiler fehlt oder dessen Pfad ist nicht korrekt in den Umgebungsvariablen eingetragen. In der normalen Java-Runtime ist er nicht enthalten, dafür muss das Entwickler-Kit (JDK) installiert werden: Java Downloads
Ob die Anleitung hier anschließend funktioniert, ist allerdings höchst fraglich:
1. Wird XP seit über 2 Jahren nicht mehr unterstützt - Damit im Internet zu surfen ist grob fahrlässig, außerdem wird Java seit dem nicht mehr mit XP getestet und es finden keine Fehlerbehebungen statt - siehe Warum Windows XP fahrlässig und nicht mehr zeitgemäß ist
2. Ist der Artikel über 4 Jahre alt, das Applet wird sich seit dem verändert haben und möglicherweise nur mit größeren Modifikationen wie gezeigt funktionieren
3. Hat Knuddels seit Jahren mit Nutzerverlusten zu kämpfen, daher wird sich kaum jemand die Mühe machen, an #2 viel zu ändern
-
The Following User Says Thank You to DMW007 For This Useful Post:
xX PRiNCE LUBiNAZ Xx (25.10.2016)
Ähnliche Themen
-
Win7 Java in Safari ausführen (Fehlermeldung Java nicht installiert)
Von Silverstar im Forum WindowsAntworten: 8Letzter Beitrag: 02.12.2013, 23:41 -
[Java] Aus Klasse heraus auf Applet zeichnen
Von !lkay im Forum JavaAntworten: 11Letzter Beitrag: 19.04.2013, 21:26 -
[Paper #3] Saubere Struktur bei der Entwicklung
Von DMW007 im Forum TutorialsAntworten: 1Letzter Beitrag: 21.07.2012, 01:54 -
2 Fragen bzgl. des Knuddelsclient
Von rVs14 im Forum Knuddels ProgrammierungAntworten: 3Letzter Beitrag: 01.06.2012, 21:57 -
[Paper #1] Erster Einstieg in die Knuddels-Programmierung
Von DMW007 im Forum TutorialsAntworten: 0Letzter Beitrag: 07.03.2012, 23:31
Stichworte
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.