ACHTUNG: Dieses Tutorial hat keinen Sinn! Bitte nicht nachmachen, nur zum Testen! Und selbst dann nicht, wenn ihr nicht wisst, was ihr tut.
Moin Jungs,
Knuddels verwendet offiziell - sollte bekannt sein - die Huffmankomprimierung. Flav hat diese aus dem Bananachat entfernt, weil sie noch nicht reversed werden konnte.
Auch jetzt ist der Verwendungszweck mir nicht genau bekannt, aber okay. Keiner und Keiner hatten versucht, die Huffmankomprimierung einzubauen, erhielten dann aber nur noch "unbekannte operatorcodes".
Ich möchte euch kurz erläutern, wie ich es gemacht habe.
Vorraussetzungen:
- Netbeans
- knuddels.jar von Flav aka. Dustin (
http://www.file-upload.net/download-4147…uddels.jar.html)
Hinzufügen der knuddels.jar:
1. Netbeans öffnen
2. Euer Projekt öffnen
3. Im "Projects"-Explorer befindet sich das Symbol Libraries (unter Source Packages). Rechtsklick drauf und "Add Jar/Folder".
4. Fügt die runtergeladene knuddels.jar hinzu.
Abändern des Sources:
1. Ab in die SessionHandler.java (run-Methode)! Folgendes wird umgeändert:
|
PHP-Quelltext
|
1
2
3
4
|
while (run) {
byte[] buffer = Protocol.decode(in);
validSocket = true;
String[] tokens = new String(buffer, "UTF8").split("\u0000");
|
Hier müssen wir die Huffman-Dekomprimierung einbauen, denn wie ihr seht wird bei dieser Methode aus einem Byte-Array einfach ein String gebastelt,
ohne das die Huffman-Decomprimierung benutzt wird. So...
|
PHP-Quelltext
|
1
2
3
4
|
while (run) {
byte[] buffer = Protocol.decode(in);
validSocket = true;
String[] tokens = knuddels.Huffman.decode(buffer).split("\0");
|
Euer Server kann jetzt schonmal das gesendete lesen, nur noch nicht richtig senden! Wird sofort geändert:
2.Ab in die Client.java (Send-Methode):
|
PHP-Quelltext
|
1
2
3
4
5
6
7
|
if (socket != null && socket.isConnected()) {
try {
out.write(Protocol.encode(message.getBytes("UTF8")));
} catch (Exception e) {
e.printStackTrace();
}
}
|
Hier das selbe: Flav generiert aus der eigentlichen Nachricht ein Byte-Array und sendet dies dann. Die Huffman-Komprimierung wird eingesetzt:
|
PHP-Quelltext
|
1
2
3
4
5
6
7
|
if (socket != null && socket.isConnected()) {
try {
out.write(Protocol.encode(Huffman.encode(message)));
} catch (Exception e) {
e.printStackTrace();
}
}
|
That's it. Wie kann ich testen, ob alles geklappt hat? Lade dir ein unmanipuliertes Knuddels-Applet runter und lass dieses zu deinem Server verbinden.
Es sollten keine Fehler auftreten - außer, dass du dich nicht einloggen kannst. Dies liegt daran, dass dein Passwort anders gehasht wird.
Das muss man dementsprechend umändern. Ich würde so weit gehen und das Passwort ungehast verschicken, denn selbst das sollte nun einigermaßen sicher sein!
Ich werde gleich mal ein Applet von Knuddels manipulieren, so dass das PasswortHashing nicht mehr stattfindet.
Javassist code:
(Entnommen aus den bereitgestellten Applets, die hier veröffentlicht wurden)
MfG Mentos