[C++] auf Teamspeak connecten?

11/24/2009 20:01 Zerokiller123#1
Hallo, mich würde mal interessieren wie man auf einen Teamspeak-Server connecten kann? Wie funktioniert z.B. so ein ts-flooder wo mehrere User connecten und wieder leaven?

-Ich habe nicht vor Server zu flooden. Es wäre kein Problem einen flooder zu laden, sowas habe ich aber nicht nötig. Mich interessiert nur wie es funktioniert, da ich in dem Bereich noch nie etwas mit C++ gemacht habe.

Mich würde interessieren wie man auf einen ts-server connectet, wie man daten ausliest (usernamen, channelnamen,...) oder wie man etwas in den chat schreiben kann.

Wäre super wenn ihr mir ein kleines Beispiel geben könntet oder einen Hinweis gebt wie ich vorgehen kann.

Gruß, z3r0

(Bei der SuFu habe ich leider nix gefunden, nur Leute die an einem Flooder interessier waren, darunter war nur einer der so wie ich wissen wollte wie sowas funktionert, ist leider im geflame der anderen untergegangen.)
11/24/2009 22:19 MoepMeep#2
Interessante frage, ich würde einach versuchen, die connect funktion von teamspeak zu hooken.
11/24/2009 22:24 wurstbrot123#3
UDP ist das Stichwort. Die Pakete sind auch nicht verschlüsselt.
11/25/2009 14:59 Zerokiller123#4
Danke für die Antworten!
Ich hab zwar noch keine Ahnung wie das geht aber dafür weiss ich jetzt was ich lernen muss :)

Danke euch beiden :handsdown: :D
11/25/2009 15:21 ms​#5
Wenn du dich noch nicht so mit Winsock auskennst, dann kannst du ja z.B. ollydbg mit dem [Only registered and activated users can see links. Click Here To Register...] benutzen und damit die Winsock-Calls aufzeichnen und nachmachen.
11/25/2009 16:36 Zerokiller123#6
Ich habe gestern mit Winsock angefangen und schon Server und Client gebastelt die Nachrichten austauschen können (aber mit TCP). Werd mir dann mal das ganze mit UDP anschauen :D

Werd mir auch mal das ollydbg-plugin anschauen, danke für den Hinweis!
11/25/2009 18:44 Zerokiller123#7
Ich habe das UDP-Packet vom connecten abgefangen und versucht es mit meinem Programm zu senden, leider erhält mein Programm keine Antwort vom Server und es connectet auch kein user. (Der Teamspeak-client selbst erhält immer eine Antwort nachdem das connect gesendet wurde(willkommen auf dem Teamspeak... und so))

Abgefangen habe ich beim connecten:
Code:
----[ sendto( 1028, 0x058C78C4, 180, 0x0, 0x0018F788, 16 ) == 180
0000  F4 BE 03 00 00 00 00 00 00 00 00 00 01 00 00 00  ................
0010  1B C7 39 2F 09 54 65 61 6D 53 70 65 61 6B 00 00  ..9/.TeamSpeak..
[...]
Das senden habe ich dann so versucht:

Code:
sprintf(buf,"..................9/.TeamSpeak...[...]");
    rc=sendto (s,buf,180,0,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));

Ich habe das gefühl das ich das falsche sende, kann das sein? Wobei ich beim abfangen meines Tools das gleiche abfange wie beim Teamspeak-client
11/25/2009 19:00 ms​#8
Du musst das in dem Format schreiben:

Code:
sprintf(buf,"\xF4\xBE\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x1B\xC7\x39\x2F\x09\x54\x65\x61\x6D\x53\x70\x65\x61\x6B\x00\x00[...]");
Immer wenn du einen Punkt schreibst, dann wird der nämlich in den dazugehörigen ASCII-Werten (0x2E oder so) umgewandelt.
11/25/2009 19:24 Zerokiller123#9
Erstmal ne grundlegende Frage, muss ich ascii oder hex senden? Wenn ich das so mache wie in dem Beispiel:
Quote:
sprintf(buf,"\xF4\xBE\x03\x00\x00\x00\x00\x00\x00\ x00\x00\x00\x01\x00\x00\x00\x1B\xC7\x39\x2F\x09\x5 4\x65\x61[...]");
habe ich das Problem das es beim ersten \x00 abbricht. Es wird also nur bis \xF4\xBE\x03 in buf geschrieben (gesendet).
11/25/2009 19:29 ms​#10
Die ASCII-Zeichen kannst du so nicht darstellen, allein schon wegen den Werten unter 0x21.

Habe vorhin nicht daran gedacht, dass sprintf beim Nullbyte abbricht. Verwende stattdessen memcpy:

Code:
memcpy(buf, "\xF4\xBE\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x1B\xC7\x39\x2F\x09\x54\x65\x61\x6D\x53\x70\x65\x61\x6B\x00\x00[...]", 180);
11/25/2009 20:47 Zerokiller123#11
Danke, hat geklappt! Connectet zwar leider nicht aber ich bekomm jetzt ne Antwort vom Server mit dem wilkommens Text und so.
11/29/2009 03:01 flo8464#12
Quote:
UDP ist das Stichwort. Die Pakete sind auch nicht verschlüsselt.
Die Verbindungshandshakes werden sicher nicht über eine UDP-Verbindung ausgeführt.
11/30/2009 14:25 rEdoX#13
Quote:
Originally Posted by flo8464 View Post
Die Verbindungshandshakes werden sicher nicht über eine UDP-Verbindung ausgeführt.
Doch, werden sie. Dafuer hasht TS die Packete natuerlich selber ..
12/09/2009 19:39 Medix#14
Quote:
Originally Posted by Zerokiller123 View Post
Danke, hat geklappt! Connectet zwar leider nicht aber ich bekomm jetzt ne Antwort vom Server mit dem wilkommens Text und so.
Gibts ne Möglichkeit an den Sourcecode ran zu kommen ?

Lese mich auch gerade etwas in UDP Sockets ein und da würde so ein Beispiel sehr gut helfen zum Lernen.


Habe jetzt einen UDP socket erstellt bin jedoch etwas ratlos wie ich das ganze weiter angehen soll.

Direkt mit sendto die anfrage zum connecten senden und mit recvfrom auf antwort warten?

Wär nett wenn jemand einen kleinen Beispielcode hat. :)