Gameserver selber schreiben



  • Hallo

    mal angenommen es giebt ein Online Spiel, für den es nur einen Server gibt.
    Man möchte nun (aus welchem grund auch immer) für dieses Spiel einen eigenen Server schreiben.

    Ich es möglich, wenn man sich mit einen Netzwerksniffer (z.B. etherael) den Gameclient<->Gameerver Datenverkehr ansieht, sich mit den Daten (Wie z.B. der Client sich am Server anmeldet, wie er Daten austauscht usw.) so einen Server nachzu bauen?

    Oder wie geht man da vor?



  • ja das ist möglich, so hat man es meines wissens nach mit UO gemacht. aber in einigen ländern ist das wohl illegal.
    Wenn es ein kommerzielles spiel ist, dann wird die kommunikation eventuell verschlüsselt sein.
    Eine alternative zu Netzsniffern wären portmapper oder ein router der die kommunikation zwischen client-server speichert. wenn man sich sowas codet, dann kann man versuchen stück für stück die daten zu entschlüsseln z.b. könnte man sich für den anfang einfach nur daten herausschreiben lassen und sehen ob sie mit den daten auf dem client übereinstimmen.

    rapso->greets();



  • Genau UO und Sphereserver
    so ein Prinziep meine ich auch. Die idee mit dem portmapper ist gut.
    Da zahlt es sich wieder einmal aus das ich kein Mini-Fertigrouter habe.
    Wie könnte so eine verschlüsselung aussehen? Eine art SSL-Übertragung?



  • @rapso
    warum sollte eine Spiele Firma die Daten verschlüsseln? Vielleicht Passwörter zur Anmeldung bei irgend welchen Servern wobei ich selbst das bezweifle.



  • kingruedi schrieb:

    @rapso
    warum sollte eine Spiele Firma die Daten verschlüsseln? Vielleicht Passwörter zur Anmeldung bei irgend welchen Servern wobei ich selbst das bezweifle.

    weil viele leute die packete sniffen und dadurch cheaten, z.b. kann man jemanden nicht anvisieren wenn er hinter einer wand ist oder invisible ist, es gibt snifferprogramm die nennen sich "radar" die zeigen dir die ganze umgebung an und schwache unsichtbare leute sind dann leichte opfer.
    wenn man nicht nur snifft sondern aktiv cheatet, dann kann man leute anvisieren welche der client nicht erlaubt (wichtig bei z.b. einem Fort) und sie so durch wände angreifen (der server kann ja unmöglich für alle player die visibility aller anderen player testen).
    es gibt desweiteren leute die bots coden damit sie die spielerischen (absichtlichen) limitierungen eines spiels exploiten.

    deswgen gibt es bei den meißten onlinespielen in den AGBs auch den text, dass sich der betreiber das recht nimmt einen account zu sperren wenn er manipulationen des traffic oder clients vermutet. DAOCs client konnte man am anfang nichtmal mit alt+tab vom fullscreen umschaltet, weil der dann wohl gleich disconnectete (ich weiß nicht wie das jetzt ist)

    zur verschlüsselung. da gibt es effektive einfache methoden die nach der on-time-pad methode arbeiten. Zur beginn der sitzung wird ein zufallsgenerator initialisiert (z.b. mittels der md5 summe des heutigen datumstrings) und xort dann den ganzen traffic, das gleiche ist auf der serverseite (natürlich). es ist dann recht schwer den zufallsgenerator nachzubilden (wenn das überhaupt mögilch sein sollte ohne den passenden assemblersource zu rippen)

    rapso->greets();



  • rapso schrieb:

    DAOCs client konnte man am anfang nichtmal mit alt+tab vom fullscreen umschaltet, weil der dann wohl gleich disconnectete (ich weiß nicht wie das jetzt ist)

    Jetzt geht das. Man kann DAOC mittlerweile sogar im Fenster spielen, neben 20 anderen Charakterbuildertools, Craftbots und was weiss ich fürn Firlefanz. Tja, da kommt richtig Rollenspielfeeling auf....



  • also ich hab vor, ein Server zu schreiben für StarWars Galaxies. Da bin ich mir wohl bewust das es wenn es denn überhaupt möglich währe ein langer weg werden wollte. Hat das wohl aussichten? Hätte jemand intresse das mit mir zusammen zu versuchen?



  • frag im projekte forum nach, da hast du besser aussichten connections zu knüpfen. Ob das ein erfolg wird hängt wohl am meißten von dir ab.

    rapso->greets();



  • Ich habe rausgefunden, dass die Daten, die gesendet werden verschlüsselt sind.

    Bzw. wenn ich mehrmals die gleichen daten sende (z.B. username und passwort zum anmelden), sieht das entsprechende IP-Packet immer anders aus (natürlich mein ich den Datenteil, nich der header).

    Die client exe ist kanappe 20MB gross
    Hatt es da erfolgsaussichten, die verschlüsselung rauszubekommen?
    ((de-)Assembler)



  • uh, hier wird es interessant. Am besten schaust du mal ob Symboltabellen und ähnliches in den Binärdateien vorhanden sind, vielleicht kann man ja von den Namen der ein oder anderen Funktion darauf schließen, dass es sich um die Verschlüsselungsfunktion handelt. Dann schau einfach, wie die Verschlüsselung abläuft, irgend wo muss ja ein Schlüssel erzeugt werden, den du dann theoretisch aus dem Speicher auslesen könntest. Naja, dass ist eben ein wenig frimelig, aber auch anspornend 😉



  • hi,
    und wenn man versucht sowas wie einen proxyserver zu schreiben und den dazwischen setzt und alles mitloggt???

    gruss
    msp



  • @msp sowas ähnliches wurde schon vorgeschlagen
    @michi nimm dir mal die dlls vor, manchmal sind solche verschlüsselungsfunktionen irrsingerweise in dlls enthalten(starcraft...).



  • Leider hab ich persönlich von assembler keine ahnung

    Aber wenn ich es Disassemblire finde ich stellen wo was steht von ServerLog und Connection und solche sachen... Nach ein Assebler-guru müsst ich mich erst umsehen... Wollt eigentlich nur wissen obs möglich währe.



  • Man kann in dll auch Funktionen aufrufen ohne zu wissen was die Funktion macht. Musst nur herausfinden wie die Funktion heist, welche Parameter sie erwartet und was sie zurückgibt. Ist nicht schwierig



  • Also in DLLs musste nur mal nach der Export Tabelle suchen da findest alle Namen, aber wenn die sich etwas gedacht haben heißen die nicht encrypt und decrypt.

    Und bevor du wild durch den Assemblercode gehst würd ich dir eh zu nem Debugger (Z.B. SoftIce) raten, sonst suchst du dich zu tode.



  • wenn es ein kommerzielles spiel ist, dann hat es einen kopierschutz, dieser wird den grossteil der exe verschlüsselt rumliegen haben und nur auf die pages auf die zugegriffen wird, wird der kopierschutz unverschlüsselt liegen haben (damit meine ich auch codepages)

    somit ist disasseblen nicht wirklich möglich, mehr als den source vom kopierschutz wird man erstmal nicht finden. man müßte das programm zur laufzeit an der nötigen stelle einfrieren und dort dann schauen wo der code-pointer liegt und diese stelle versuchen nach einem verschlüsselungssource zu durchsuchen.
    das könnte aber auch nicht einfach werden, denn für verschlüsselung (beim kopierschutz) werden oft die komischten komponenten verwendet. es kann sein dass ein teil davon im mit dem spiel installiertem cd-rom treiber berechnet wird (also ring-0, darauf kann man nur schwer zugreifen), es kann sein dass ein teil davon auf der graka berechnet wird (da müßte man genau mitloggen was geschrieben und was wieder ausgelesen wird), es kann sein mit einem raw-pointer einfach die daten der cd mit xor zu den datenpacketen durchgegangen werden.

    sowas ist wahrlich garnicht so einfach zu hacken, weil die spielecoder mittlerweile paranoid genug geworden sind um jegliche möglichkeit auszunutzen es den cheatern,hackern,kiddis zu vereiteln dass sie ihnen ihr gehalt wegnehmen.

    rapso->greets();


Anmelden zum Antworten