Autor Beitrag
Sithlord
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 172



BeitragVerfasst: So 10.07.11 17:49 
Hallo liebes Forum,

nach langer, langer Zeit mal wieder eine Frage.
Ich betreibe Gameserver eines älteren Spieles ( Star Wars Battlefront 2) und
wollte dafür nun ein kleines Tool schreiben, welches mir alle Spieler ausließt.
Da ich den Server mit wine unter Linux betreibe, ist eine Remoteadministration nicht möglich.
Es ist aber möglich, im Spiel mit Adminbefehlen alle Spieler ausgeben zu lassen.
Da diese aber in einem Chat ausgegeben werden und die Namen + ID nur ca. 1/2 Sekunde da steht,
dachte ich mir, versuchst du alles mitzusniffen und dann einfach auszugeben.

Aber pustekuchen...

Was ich sende ist halbwegs klartext, ich benutze Delphi 7 mit folgender Komponentenpackung:
Magenta Systems Internet Packet Monitoring Components v1.2

Senden tu ich solch einen String:

ausblenden Quelltext
1:
17:24:08:473 UDP   135  192.168.178.30:3659  > 93.***.***.***:3659  <3659>         93 [ Ą   lį O Øņh"“q" Tųt $cŁŻ+–‡÷   4 ’’                ’’’’/ a d m i n   / p l a y e r s   š   ]					

Das sieht soweit auch völlig in Ordnung aus, ingame bekomme ich die Antwort, natürlich vernünftig entschlüsselt und in Klartext, aber der Sniffer natürlich nicht:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
17:24:08:561 UDP   467  93.***.***.***:3659  > 192.168.178.30:3659  <3659>        425 [ w   Æ t         žaā  “f˜’ū†Q„DšĪ@Y$ƒę‹ ÷ IeüŠ’-ż”%šGDŁ€©   š             Pe   €ƒ  > lą’ ō £ ‰]
17:24:08:681 UDP   529  93.***.***.***:3659  > 192.168.178.30:3659  <3659>        487 [ x   ¶ t          žĀ  “f˜’Į'R„*QŖ Ä.ƒ^)æö •ĆüŹ÷Žüč&šGDō€©   š             Pe   €ƒ  >  ją’ €O¤ U]
17:24:08:790 UDP   511  93.***.***.***:3659  > 192.168.178.30:3659  <3659>        469 [ y   ½ t         žĀ  “f˜’ĻÖR„<9y P:ƒj|öPÄüüžK¤üH(šG„ ©   š             Pe   €ƒ  > gą’ œ­„ y]
17:24:08:903 UDP   549  93.***.***.***:3659  > 192.168.178.30:3659  <3659>        507 [ z   Ä t          Ś‚  “f˜’«“S„üÅc–ĪGƒ Ź5÷    ¤Õśżš¦ūGŠ €©   š             Peå)AŸƒ’’?  eą’ V'§ ł]
17:24:09:127 UDP   165  93.***.***.***:3659  > 192.168.178.30:3659  <3659>        123 [ {   Ó t         &Ś‚ ų1Įņū’ļ üž’ū  æ’’ž Į’÷æ’  €  „ œĘ  @uf   08   * ’’        ž’’’’’’’’’’’1 0]
17:24:09:280 UDP   195  93.***.***.***:3659  > 192.168.178.30:3659  <3659>        153 [ |   į t         ^Ś‚ ų1Įņūżļ üž’ū  æ’’ž Įļ’æ’  ć„! „  Ē  @NK   08   H ’’        ž’’’’’’’’’’’1 1]

Natürlich sollte da drin doch nun der Spielername + ID existieren, oder irre ich mich da?
Jedenfalls habe ich nicht jede Ausgabe hier gepostet, wäre zu viel gewesen - da ich es nicht lesen kann sehe ich natürlich auch nicht,
was die richtigen Daten sind.

Die zweite möglichkeit wäre natürlich direktes auslesen aus dem RAM des spiels, doch davon habe ich noch weniger Ahnung...

Kann mir jemand den Stupser in die richtige Richtung zur Entschlüsselung der UDP Pakete geben?

P.S. Mir ist klar das man Spiele ja eigentlich nicht entschlüsseln darf (oder darf man das doch?), aber ich betreibe mehrere Server mit 64 Slots und
brauche fast 10 Minuten, um eine Person vom Server auszusperren. Und das geht mir auf Dauer auf die Nerven... Gesupported wird es von LucasArts leider auch nicht mehr.
Somit kann ich von dort aus auch auf keine Hilfe hoffen.

Lg
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 10.07.11 20:05 
Kannst Du bitte mal einen kleinen mit ZIP gepackten Wireshark-Dump anhängen? Und kurz die Paket-Nummern was Anfrage und Antwort ist? Ggf. seh ich da gleich was.

Alternativ einfach mal bei gameq.sourceforge.net/ Dir den Source unter GameSpy2 anschauen (und den anderen Source, der da so aufgerufen wird). HTH.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Sithlord Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 172



BeitragVerfasst: Mo 11.07.11 02:53 
Hallo,

erst einmal vielen Dank, den Wireshark Dump gibt es in knapp 10-12 Stunden, sitz grad nur am Laptop, da habe ich die Daten nicht.
Der gameq Sourcecode ist mir bekannt, benutze ich auch für mein eigens geschriebenes Webinterface um darin die Server auslesen zu können. Gleiches habe ich auch schonmal mit Delphi gemacht - dies stellte für mich kein Problem dar, da ja nichts verschlüsselt ist.

Leider bekomme ich über eine Query Abfrage nicht die ID des Users zurück, und dann auch noch nichtmal alle User. Leider ist Battlefront 2 in der Richtung ziemlich verbuggt. Deshalb wird mir das Gamespy2 Protokoll leider hier nichts bringen - oder wolltest Du auf etwas anderes hinaus?

Wäre ja auch zu schön, wenn es darüber klappen würde, aber "berechnen" kann man die IDs ja auch nicht, auch wenn es nach einem bestimmten System läuft. Bzw. nicht sehr zuverlässig.
Sithlord Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 172



BeitragVerfasst: Mo 11.07.11 10:00 
So,

ich habe nun mit Hilfe von Wireshark mal den kompletten UDP Stream aufgezeichnet, einmal von der Query (Wobei da ja nichts über die IDs drin steht) und einmal von der Verbindung + Eingabe des Admin PWs etc.
Folgende Eingaben wurden getätigt:
ausblenden Quelltext
1:
2:
3:
/admin /login test
/admin /ban 2
/admin /players


Der erste Befehl loggt ein,
der zweite (nur als test) kickt den Spieler mit der ID2
und der dritte listet alle Spieler auf.
Mein Name war "Spieler 1" und ich alleine auf dem Server.

Anscheinend scheint aber alles verschlüsselt zu sein oder so,
denn gefunden habe ich meine eingegeben Befehle nicht - oder nur
falsch gesucht. Ergibt aber für mich leider (noch) keinen Sinn,
der UDP Stream... Jedenfalls nicht so richtig.
Einloggen, um Attachments anzusehen!
_________________
Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mo 11.07.11 10:10 
Das ist nicht der Wireshark-Dump, sondern irgend eine Text-Repräsentation davon... :roll:

Aber versuchs mal ab 00004464 bzw für dich interessanter: 0000608B

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Sithlord Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 172



BeitragVerfasst: Mo 11.07.11 11:35 
So, die Befehle, welche ich geschrieben habe, sind nun die gleichen.
Und entschuldige, ich dachte es wäre nur der UDP Stream selbst nötig...
Angehängt ist nun die hoffentlich richtige Datei mit dem kompletten Traffic.

Danke für die Tipps, ich schaue mir das mal an.

Edit1:
Zu doof zum finden -.- Wirklich... (also ich, nicht du ^^)
0000D4C3 ab dort finde ich den "1 - Spieler 1"...
nun müsste ich das nur noch auf mein Delphi - Programm übertragen.
Ich hoffe das klappt und melde mich, wenn jemand Tipps hat, gerne.
Aber selber probieren ist oftmals die beste Lösung.

Edit2:
In der .pcap heiße ich übrigens [Kandru] Kalle, also nur falls ihr
euch wundert wieso Spieler 1 nicht gefunden worden ist. Hatte keine
Lust mich extra umzubenennen. Reicht so ja auch vollkommen
Einloggen, um Attachments anzusehen!
_________________
Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 11.07.11 13:11 
Ich hab mir den Dump einmal kurz angeschaut und mit folgendem Filter die angezeigten Pakete etwas aufgeräumt:

ausblenden Quelltext
1:
udp && !(udp.length == 157) && !(udp.length == 49)					


Deine Befehle sind im Dump (Siehe Paket-Nummern ganz links in der Liste):
313, beantwortet durch 316
428, scheinbar unbeantwortet.
626, beantwortet durch 631

Das günstigste für deine Herangehensweise wäre nun, wenn Du kurz den Source von GameQ mal anschaust (Gamespy2-Protokoll) und versuchst, ab welchem Offset du die Daten dieser Pakete lesen musst, damit die in den genannten Paketen enthaltenen Daten exakt zum Liegen kommen.

Bzgl. der Strings: Das sind Unicode-Strings, also mit 2 Byte je Zeichen. In Delphi hierfür WideString verwenden (bei neueren Versionen von Haus aus String).

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Sithlord Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 172



BeitragVerfasst: Mo 11.07.11 13:29 
Hey Leute,

ihr seid so toll!
Ich schaffe es nun spielend alle Spieler auszulesen.
Andere Sache wäre nun, auch noch was zu senden, ist aber nun nebensache.

Ich würd euch am liebsten irgendwie anders Danken, jedoch geht dies leider
nur über das Forum hier!
Danke, Danke, Danke.
Dieses Problem ging mir so auf die Nerven und nun innerhalb 24 Stunden gelöst!

Hier ein kleines Beispiel von unserem Kandru.de Todesstern Server (Battlefront2 1.0):
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
1    -  [ K a n d r u ]   K a l l e 
2    -  H 1 7 _ m @ n 
3    -  . @ . C h A o S . @ ]
5    -  S u n r i s e 
6    -  [ A d l e r a u g e ] l o l 
7    -  s a m m y 
8    -  O v e r D o ]
1 1    -  A i r b o r n e 
1 2    -  [ D U N K E L ] D R A C H E ! 
1 4    -  C O M M A N D E R     C O O Y 
1 5    -  S t a r E g g s s 
1 6    -  W a r h a m m e r 
1 7    -  [ S F F ] Y a n n i c k 
1 8    -  L e o n 
1 9    -  M A S T E R _ D E ` S E L L 
2 0    -  D a r i k a k a 
2 3    -  ( e s p ) = E x T r E m E = ( e d u ) 
2 4    -  B I G   M A S T E R 
2 5    -  K i n g 
2 9    -  M a s t e r 
3 1    -  | W i s d o M | C H A R I S M A 
3 2    -  B a s i a 
3 3    -  D a r t h   J u s t i n 
3 5    -  M r L a z y J H N 
3 6    -  c o m m a n d e r   S k a n 
3 7    -  . 
3 8    -  D I E   K A C K W U R S T 
3 9    -  d i e   w i l d e   w u r s t 
4 0    -  C a p t a i n   P a p a 
4 1    -  V i d a k o v i c 
4 2    -  P e t e r 
4 3    -  c o d y 2 2 1 
4 4    -  S p i e l e r   1 
4 5    -  c r e e d 
4 7    -  L o r d   o f   C h a o s 
4 8    -  M a l t e 
4 9    -  F o r c e 
5 1    -  C o m m a n d e r   S a l v o 
5 2    -  k u b a 
5 3    -  L G 
5 4    -  s e b i 
5 5    -  L i m i 
5 6    -  r e x 0 1 
5 7    -  . . $ c H A R F e . . $ a L $ a . . { 9 1 % } P o O W E R 
5 8    -  c y b r a x 
5 9    -  c a n e r 
6 0    -  ( J e d i ) T h o m a s 
6 1    -  K i l k e n n y _ P r o 
6 3    -  d o m i n i k l a m 
6 4    -  M a t h i e u


P.S. Nun fehlt noch ein Ingame overlay, aber das ergoogle ich oder schaue hier in der Forensuche,
wenn ihr trotz dessen was hilfreiches habt, wäre nett...

_________________
Heut ist nicht alle Tage, ich hab wieder ein Problem, keine Frage...