Im Post zuvor habe ich beschrieben wie ich darauf gekommen bin welches Protokoll Crysis, bzw. Crysis Wars verwendet, um die Serverstatistiken ab zu fragen. Da habe ich dann raus gefunden dass es etwas mit Gamespy zu tun hat. Nur Gamespy selber hat keine Dokumentation zu ihren Protokollen, und das Protokoll Version 1 und 2, die man im Internet finden, werden nicht bei Crytek verwendet. Auf der Unreal Turnament 3 Wiki-Seite stand zwar dass das Protokoll Version 4 sein soll, aber ich habe jetzt häufig genug Anhaltspunkte gefunden dies es teilweise oder sogar vollständig wiederlegen.
Einmal im LGSL-Script sind die Protokolle mit 1, 2 und 3 bezeichnet. Wobei hier die 3 das Protokoll ist, mit dem der Crysis Wars Server abgefragt wird. So würde ich eher sagen dass es sich um Version 3 handelt. Über das UT3 AdminWiki bin ich auf ein Programm namens QStat gekommen. Es wird zwar gesagt dass man zum Abfragen des UT3 Server einfach das Kürzel -gs4 beim Programmstart hinten dran hängen soll, aber wenn man sich den Quelltext etwas genauer anschaut, kommt etwas anderes zu Tage. Hier werden nämlich für die GS4 Abfragen die selben Funtkionen verwendet wie bei einer GS3 Abfrage. Und diese sieht genausp aus wie das beschriebene Protokoll auf der Wiki-Seite und dem mitgesnifften Traffic eines Crysis Wars Spiels. Somit ist für mich noch immer nicht entschieden welches Gamespy Protokoll wirklich verwendet wird und wer nur Mist verzapft. Eine Anfrage bei Gamespy könnte das Problem lösen, aber ich denke nicht dass sie ihre Protokolle der Öffentlichkeit zeigen wollen, damit diese jeder verwenden könnte.
Posts mit dem Label Crysis Wars werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Crysis Wars werden angezeigt. Alle Posts anzeigen
Mittwoch, 7. Juli 2010
Crysis Wars Serverstats Query mit PHP abfragen
Ich habe mich schon vor einem Jahr mal dafür interessiert die Game-Stats von einem Crysis Wars Server ab zu fragen. Dabei habe ich mich gedacht dass ich einfach mit Wireshark den Traffic anschauen müsste und diesen dann in einem PHP-Script selber senden müsste. Da ist mir dann aber aufgefallen dass ich nicht einfach kopieren kann was bein sniffen gesendet wurde. Irgendwie musste meine Anfrage auf die Antwort des Server stimmen, und dann erst würde ich die Gameliste bekommen. Ingame lief dass ja alles wunderbar, nur ich habe nicht rausgefunden was wann wohin gesendet werden muss.
Kurze Zeit später wurde ich Admin auf dem Obositii.ro Server. So hatte ich Zugang zu einem Rcon Server. Dazu gab es leicht Scripte zu finden, bzw. den Traffic mit zu schneiden und dann daraus ein PHP-Script zu basteln mit dem ich mich auf dem Server einloggen konnte und dann die Playerliste abfragen kann. Hier war nur dass Problem, dass ich meine Zugangsdaten verwenden musste. Wenn also jemand mein Script hacken konnte oder irgendwie an meine Zugangsdaten kam, hätte ich ein Problem. Darum habe ich dass gleich gelassen. Eine bessere Idee wäre es aber gewesen eine Klasse zu schreiben die andere Programmierer verwenden könnte um sich mit PHP auf einem Rcon-Server ein zu loggen. So könnte man all die normalen Serverbefehle über einen Webbrowser erreichen und jederzeit etwas ändern. Es sollte sogar fast möglich sein dass man den Chat Ingame abfängt, in eine Datenbank schreibt und dieses dann wieder auf der Website ausgibt.
Gestern habe ich mich aber doch noch mal ran gesetzt um diese einfache Statistik-Abfrage zu bewältigen. Und DA! - ich habe es geschafft. Zwar habe ich es weniger alleine geschafft, aber mit der Hilfe von anderen Scripts konnte ich verstehen wie was wann gesendet werden muss, damit ich letztendlich eine Playerliste und Serverinfo abfragen konnte.
Angefangen hat alles damit, dass ich auf ein PHP-Script namens LGSL (Live Game Server List) gestoßen bin. Insgesamt bietet diese Paket aktuell die Unterstützung für über 90 Spiele. Das ließ mich zu erst stutzig reagieren. Ich hatte dann nämlich als Idee dass dieses Script auf andere Seiten zugreift, wie Gamespy oder Gametracker, und sich von da die Infos holt. Diese sind aber nicht immer so ganz aktuell und es werden auch häufig nicht alle Server gelistet die man haben will. Aber nachdem ich zwei Stunden lang etwas tiefer gegraben habe, konnte ich dann doch rausfinden dass (auf jedenfall Crysis Wars) die einzelnden Gameserver direkt abgefragt werden. Wenn ich also dieses Script kopieren würde könnte ich mein eigenes daraus basteln und dann selber Server abfragen. Aber da mich noch mehr interessiert hat, was zum Beispiel wirklich gesendet wird, habe ich weiter Nachforschugen angestellt.
So wollte ich wissen ob irgendwo eine Dokumentation zum "Crysis Wars Gameserver Protokoll" vorliegt. Aber gefunden habe ich nicht wirklich etwas. Dann ist mir im Script aufgefallen dass dort etwas von wegen Generic Gamespy Protokoll 1 & 2 & 3 steht. Dazu kam dass das Gamespy Protokoll 3 die selbe Protokollnummer (06) bekam wie Crysis und Crysis Wars. Somit dachte ich also ich hätte mein Ziel gefunden, aber dem war leider nicht so. Über Google konnte ich überhaupt nichts dazu finden. Nur das erste und zweite Gamespy Protokoll konnte ich im Internet finden. Diese waren aber beide anders aufgebaut als das welches ich benötigte. Dann habe ich mich mal etwas doofer mit der Google-Suche angestellt und nur nach "Gamespy Protocol" gesucht. Da die ersten Ergebnisse wieder auf LGSL und diese zwei ersten Protokolle gezeigt haben, bin ich etwas weiter in der Liste runter gegangen. Und siehe da, nach ein paar Forenseiten und anderen Shootergames bin ich auf einem UT3 (Unreal Turnament 3) Wiki auf der richtigen Seite gelandet. Hier wird ein Protokoll beschrieben dass gleich dem ist, was ich im LGSL-Script gefunden habe und wo die Pakete genauso aussehen und aufgebaut sind wie das mitgesniffte von Crysis Wars. In der Beschreibung stand etwas dabei von wegen Gamespy Protokoll v4. Dies werde ich dann im nächsten Post genauer beschreiben.
Aber nach einem langen Tag Arbeit habe ich doch letztendlich mein Ziel erreicht und kann jetzt Server succsessfull querien.
Kurze Zeit später wurde ich Admin auf dem Obositii.ro Server. So hatte ich Zugang zu einem Rcon Server. Dazu gab es leicht Scripte zu finden, bzw. den Traffic mit zu schneiden und dann daraus ein PHP-Script zu basteln mit dem ich mich auf dem Server einloggen konnte und dann die Playerliste abfragen kann. Hier war nur dass Problem, dass ich meine Zugangsdaten verwenden musste. Wenn also jemand mein Script hacken konnte oder irgendwie an meine Zugangsdaten kam, hätte ich ein Problem. Darum habe ich dass gleich gelassen. Eine bessere Idee wäre es aber gewesen eine Klasse zu schreiben die andere Programmierer verwenden könnte um sich mit PHP auf einem Rcon-Server ein zu loggen. So könnte man all die normalen Serverbefehle über einen Webbrowser erreichen und jederzeit etwas ändern. Es sollte sogar fast möglich sein dass man den Chat Ingame abfängt, in eine Datenbank schreibt und dieses dann wieder auf der Website ausgibt.
Gestern habe ich mich aber doch noch mal ran gesetzt um diese einfache Statistik-Abfrage zu bewältigen. Und DA! - ich habe es geschafft. Zwar habe ich es weniger alleine geschafft, aber mit der Hilfe von anderen Scripts konnte ich verstehen wie was wann gesendet werden muss, damit ich letztendlich eine Playerliste und Serverinfo abfragen konnte.
Angefangen hat alles damit, dass ich auf ein PHP-Script namens LGSL (Live Game Server List) gestoßen bin. Insgesamt bietet diese Paket aktuell die Unterstützung für über 90 Spiele. Das ließ mich zu erst stutzig reagieren. Ich hatte dann nämlich als Idee dass dieses Script auf andere Seiten zugreift, wie Gamespy oder Gametracker, und sich von da die Infos holt. Diese sind aber nicht immer so ganz aktuell und es werden auch häufig nicht alle Server gelistet die man haben will. Aber nachdem ich zwei Stunden lang etwas tiefer gegraben habe, konnte ich dann doch rausfinden dass (auf jedenfall Crysis Wars) die einzelnden Gameserver direkt abgefragt werden. Wenn ich also dieses Script kopieren würde könnte ich mein eigenes daraus basteln und dann selber Server abfragen. Aber da mich noch mehr interessiert hat, was zum Beispiel wirklich gesendet wird, habe ich weiter Nachforschugen angestellt.
So wollte ich wissen ob irgendwo eine Dokumentation zum "Crysis Wars Gameserver Protokoll" vorliegt. Aber gefunden habe ich nicht wirklich etwas. Dann ist mir im Script aufgefallen dass dort etwas von wegen Generic Gamespy Protokoll 1 & 2 & 3 steht. Dazu kam dass das Gamespy Protokoll 3 die selbe Protokollnummer (06) bekam wie Crysis und Crysis Wars. Somit dachte ich also ich hätte mein Ziel gefunden, aber dem war leider nicht so. Über Google konnte ich überhaupt nichts dazu finden. Nur das erste und zweite Gamespy Protokoll konnte ich im Internet finden. Diese waren aber beide anders aufgebaut als das welches ich benötigte. Dann habe ich mich mal etwas doofer mit der Google-Suche angestellt und nur nach "Gamespy Protocol" gesucht. Da die ersten Ergebnisse wieder auf LGSL und diese zwei ersten Protokolle gezeigt haben, bin ich etwas weiter in der Liste runter gegangen. Und siehe da, nach ein paar Forenseiten und anderen Shootergames bin ich auf einem UT3 (Unreal Turnament 3) Wiki auf der richtigen Seite gelandet. Hier wird ein Protokoll beschrieben dass gleich dem ist, was ich im LGSL-Script gefunden habe und wo die Pakete genauso aussehen und aufgebaut sind wie das mitgesniffte von Crysis Wars. In der Beschreibung stand etwas dabei von wegen Gamespy Protokoll v4. Dies werde ich dann im nächsten Post genauer beschreiben.
Aber nach einem langen Tag Arbeit habe ich doch letztendlich mein Ziel erreicht und kann jetzt Server succsessfull querien.
Mittwoch, 10. Februar 2010
Crysis (Wars), Freelancer, C/C++ und LUA, hooking, hacking und injekten
Ich spiele seit dem erscheinen von Crysis Wars regelmäßig ein paar Stündchen online. Zwar muss ich zugeben dass ich dadurch nicht der Überflieger geworden bin, da dieser Ego-Shooter sogesehen mein erster richtiger Ego-Shooter ist aber ich bin überall dabei. Ich habe kein super Aiming, ich höre nicht auf jedes kleinste Schrittgeräusch. Dafür kenne ich schon den ein oder anderen Trick wie zum Beispiel das Circle Jumpen um mit einem Sprung möglichst weit zu kommen. Aber hierauf werde ich in diesem Posting nicht eingehen. Mir geht es eher ums Modden und hooking, speziell das Scripten neuer Dinge im Multiplayer.
C/C++ und/oder LUA
Ja, das ist eine gute Frage. Für mich war eigentlich klar dass ich mich ins LUA-Scripten einarbeiten muss, weil mit diesem fast alles am Spielgeschehen ändern lässt. Egal ob nur neue Befehle wie Teleporten oder Kill/Death Statiskien, oder das verhindern von Cheaten. SubmEntor, der leiter das Scripten aufgegeben hat, genauso wie seinen Server gehörte bezogen auf Anti-Cheating und Spezial-Features meiner Meinung nach zu den besten, wenn nicht sogar der beste.
Jetzt wo das SDK für Crysis Wars draußen ist, konnte man auch viel mit C++ anfangen, aber hierfür sind wohl tiefere Kenntnisse im Programmieren nötig. Dafür kann man aber auch viel mehr Dinge ändern die normaler Weise hardcoded sind, wie zum Beispiel die maximale Spieleranzahl höher als 32 zu setzen. Ich habe mir vorgenommen mich vielleicht langsam ins LUA-Programmieren ein zu arbeiten, aber da ich noch überhaupt nicht das System des Crysis-Servers verstehe, werde ich wohl noch etwas länger brauchen.
hacking, hooking und injekting
Auf hooking und injekten bin ich eigentlich durch das alte Spiel Freelancer gekommen. Hier konnte man nämlich eigentlich nur sehr schlecht modden. Man konnte nicht ins aktive Spielgeschehen eingreifen und irgendwie Chat-Nachrichten ändern/abfangen/senden. Skins, neue Welten und neue Schiffe waren ja kein Problem. Alles war hardcoded. Da haben wir ja mit Crysis wirklich noch Glück, dass jetzt sogar das SKD-Kit rausgekommen ist, mit der man den Code ändern konnte Crysis sogesehen auf der niedrigsten Ebene ändern konnte. Bei Freelancer hat sich Microsoft aber nie dazu umgeringt etwas gutes zu dem Spiel bei zu tragen. 2008 oder 2009 wurde sogar der Server off genommen, von dem man die Liste mit allen Servern bekommen konnte. Jetzt darf man zu erst im Internet nach einer IP für einen beliebten Server raussuchen und muss diesen dann richtig in die Verlinkung zum Spiel eintragen.
Mit ging es jetzt aber darum den Spielfluss wie bei Crysis zu ändern.
Dafür muss man eine DLL in den Freelancer-Server injekten, was schon sehr aufwendig ist, da man auf LOW-Lever (Assembler) arbeiten muss und Speicheradressen rausfinden und ändert. Das ist glücklicherweise mit C++ möglich gewesen, jetzt kann man Chatmessages abfangen und sogesehen Befehle ausführen. Es gibt jetzt viele coole Erweiterungen zu dem online Spielen von Freelancer. Das ist wahrscheinlich auch der Grund warum noch ein paar sehr aktive Server vorhanden sind. Die Community bringt immer wieder neues und lässt das Spiel ansich nicht untergehen. Nur Microsoft sieht das nicht und gibt keine Unterstützung.
C/C++ und/oder LUA
Ja, das ist eine gute Frage. Für mich war eigentlich klar dass ich mich ins LUA-Scripten einarbeiten muss, weil mit diesem fast alles am Spielgeschehen ändern lässt. Egal ob nur neue Befehle wie Teleporten oder Kill/Death Statiskien, oder das verhindern von Cheaten. SubmEntor, der leiter das Scripten aufgegeben hat, genauso wie seinen Server gehörte bezogen auf Anti-Cheating und Spezial-Features meiner Meinung nach zu den besten, wenn nicht sogar der beste.
Jetzt wo das SDK für Crysis Wars draußen ist, konnte man auch viel mit C++ anfangen, aber hierfür sind wohl tiefere Kenntnisse im Programmieren nötig. Dafür kann man aber auch viel mehr Dinge ändern die normaler Weise hardcoded sind, wie zum Beispiel die maximale Spieleranzahl höher als 32 zu setzen. Ich habe mir vorgenommen mich vielleicht langsam ins LUA-Programmieren ein zu arbeiten, aber da ich noch überhaupt nicht das System des Crysis-Servers verstehe, werde ich wohl noch etwas länger brauchen.
hacking, hooking und injekting
Auf hooking und injekten bin ich eigentlich durch das alte Spiel Freelancer gekommen. Hier konnte man nämlich eigentlich nur sehr schlecht modden. Man konnte nicht ins aktive Spielgeschehen eingreifen und irgendwie Chat-Nachrichten ändern/abfangen/senden. Skins, neue Welten und neue Schiffe waren ja kein Problem. Alles war hardcoded. Da haben wir ja mit Crysis wirklich noch Glück, dass jetzt sogar das SKD-Kit rausgekommen ist, mit der man den Code ändern konnte Crysis sogesehen auf der niedrigsten Ebene ändern konnte. Bei Freelancer hat sich Microsoft aber nie dazu umgeringt etwas gutes zu dem Spiel bei zu tragen. 2008 oder 2009 wurde sogar der Server off genommen, von dem man die Liste mit allen Servern bekommen konnte. Jetzt darf man zu erst im Internet nach einer IP für einen beliebten Server raussuchen und muss diesen dann richtig in die Verlinkung zum Spiel eintragen.
Mit ging es jetzt aber darum den Spielfluss wie bei Crysis zu ändern.
Dafür muss man eine DLL in den Freelancer-Server injekten, was schon sehr aufwendig ist, da man auf LOW-Lever (Assembler) arbeiten muss und Speicheradressen rausfinden und ändert. Das ist glücklicherweise mit C++ möglich gewesen, jetzt kann man Chatmessages abfangen und sogesehen Befehle ausführen. Es gibt jetzt viele coole Erweiterungen zu dem online Spielen von Freelancer. Das ist wahrscheinlich auch der Grund warum noch ein paar sehr aktive Server vorhanden sind. Die Community bringt immer wieder neues und lässt das Spiel ansich nicht untergehen. Nur Microsoft sieht das nicht und gibt keine Unterstützung.
Labels:
C/C++,
Crysis Wars,
Freelancer,
hacking,
hooking,
injekting,
LUA
Abonnieren
Posts (Atom)