Der Launcher - Ein Konzept

  • Guten Morgen,


    da aktuell das Thema "Lauchner für SA:MP Server" sehr beliebt ist, und auch schon einige danach suchen, habe ich gestern an einem Konzept gearbeitet, und möchte es gerne hier in Text-Form präsentieren und Feedback dazu erhalten.
    Ich werde hier keine großen Fakten o. Ä. schreiben, sondern in einer Art "Beschprechungs-Stil" schreiben.


    Zunächst stellt man sich sicher die Frage, wieso man überhaupt einen zusätzlichen Launcher für den eigenen Server herstellen und die User verpflichten soll, diesen zu nutzen.
    Bei Servern, die gerade erst wenige (10-20) User habe, ist das sicher nicht fördernd und am Anfang somit auch nicht empfehlenswert.


    Der Nutzen sollte ja sein, Hacks, Cheats, Modifikationen des Clients und Änliches zu verhindern.
    Jedoch sollte man nicht außer Acht lassen, dass man mit einem Launcher viel mehr zerstören kann, als er nützt.
    Beispielsweise durch unzureichende Sicherheit (Vulnerability), durch eine SQL-Injection, ...
    Deswegen sollte man einen Launcher genau planen und ausreichend testen.


    In welcher Programmiersprache man einen Launcher schreibt, ist eigentlich egal.
    Jede bietet verschiedene (wenn manche auch komplizierter sind) Methoden, um den selben Sinn zu erfüllen.
    Am besten wäre es, wenn man C beherrscht (OOP muss nicht sein) - Man kann einfach und schnell auf Prozesse zugreifen, den Speicher verändern bzw. überwachen und hat den größten Spielraum im Windows-API Bereich.
    .NET ist natürlich auch nicht schlecht. Man kann mit C# und VB im Prinzip das selbe machen wie mit C, man muss nur eben auf andere Methoden zurückgreifen.


    Wenn man sich nun entschieden hat, kann man mit der Planung beginnen. Welche Features soll der Launcher haben? Was soll er alles können? Ich kann dazu nur sagen, das ein Chat mit Super-Smilies sinnlos ist.
    Nach meiner Sicht wäre das:

    • Verhinderung von Injections (würde bspw. s0beit unterbinden)
    • Überprüfung der GTA-Dateigröße bzw. CRC-Hash mit dem Server (verhindert Mods bzw. erlaubt nur Mods die vom Server genehmigt sind)
    • Überwachung von anderen Prozessen mittels Patten Search (verhindert Cheat Engine, TSearch, ..)
    • Überwachung von Debuggern (verhindert OllyDBG, IDA - Es gibt übrigens mehr Methoden als IsDebuggerPresent)

    Um das Ganze technisch umzusetzen, wird natürlich das benötigte Know-How erfordert.
    Es heißt, wenn man weiß, wie man am besten Sicherheitsmaßnahmen umgeht, kann man die besten machen.


    Injections lassen sich ziemlich einfach verhindern.
    Bspw. mit einer Whitelist, welche nur Standard Librarys zulässt.
    Zusätzlich müsste man das mit einem Hash/CRC Check absichern.


    Die Dateigröße in Bytes einer Datei auszulesen und zu hashen ist mit ein bisschen Google in jeder Programmiersprache auch kein Problem.
    Somit hätte man das 2. Feature auch implementiert.
    Die Kommunikation sollte man übrigens nicht über PHP laufen lassen, da man dies sonst bspw. über Man-In-The-Middle manipulieren könnte.
    Sicherer wäre es per TCP-Server. Dort würde das ganze zwar auch funktionieren, allerdings lässt sich da die Quelle des Packets leichter überprüfen.


    Der dritte Punkt ist schon schwieriger.
    Hier müsste man mindestens mittlere Kenntnisse im Game-Hacking Bereich haben.
    Außerdem muss man eine Liste aus Patterns anlegen und diese ständig aktualisieren (evntl. eigene Team-Mitglieder die das anstellen).


    Überwachung von Debuggern ist sehr simpel.
    IsDebuggerPresent (Windows-API Funktion aus der Kernelbase wenn's mich nicht täuscht) ist ein guter Ansatz, kann jedoch leicht umgangen werden.
    Besser ist auch hier eine Kombination aus dieser Funktion und Pattern Search/Scan.


    Somit hätten wir unsere Features implementiert.
    Doch was, wenn der Spieler einfach ohne den Launcher auf den Server verbindet?
    Dazu müsste der Launcher mit einem PHP-Script oder Server kommunizieren und diesem mitteilen, das der Launcher läuft, und wer ihn benutzt (bspw. IP-Adress Check).
    Wenn der Spieler dem Server beitritt, überprüft das Script, ob das Spiel für diese IP-Adresse freigeschalten ist.


    Außerdem sollte der Launcher ca. alle 15 Sekunden einen Heartbeat (Ping) an den Server schicken, damit der Server weiß, das der Launcher noch läuft.
    Diesen sollte man allerdings verschlüsseln (mit Salt), damit dieser nicht manipuliert werden kann.
    Wenn der Server nicht alle 15 Sekunden einen Heartbeat erhält, wird der Spieler einfach vom Server gekickt.


    Zum Schluss sollte man sich noch ein ansprechendes Design ausdenken (Nein, man braucht keine Timer, welche den Wert einer Progressbar erhöhen, um den Launcher "professioneller" wirken zu lassen) und den Launcher von einigen Usern testen lassen.


    - Soviel zu meinem Konzept, über Feedback würde ich mich freuen.
    Lg, namespace.


    #Brotfischbaron


    In schā'a llāh

  • Hatte ich mal in nativem C++ umgesetzt (Der alte Multi:Reallife Launcher).
    Das ganze ansich ist selbst als Anfänger doch recht Simpel umzusetzen. Viel Know How im TCP/IP Bereich wird nicht benötigt. Basics reichen da vollkommen aus.


    Nen schnicken Designer und ne sauber angepasste Oberfläche und schon hat man den perfekten AC Launcher für den eigenen Server.

  • Guten Morgen,


    ich hatte dies auch schon einmal in C# umgesetzt, jedoch bin ich an der überwachung des Prozesses gescheitert.
    Ich habe das alles über MySQL gehandhabt somit war auch kein Serverplugin nötig. Genaue angaben wie z.B. welcher Prozess injected wurde war möglich.
    s0beit hatte ich so gehandhabt -> es wird injected, jedoch die Funktionen werden unterdrückt und man sofort gebannt.
    Hat einigermaßen gut funktioniert.


    Dein konzept finde ich SEHR gut! Weiter so!

  • Es läuft nicht alles wie man denkt, bzw wie man es sich in der Theorie ausmalt, ich sage nur SA:MP Extensions es gibt IMMER ein weg die Funktionen rauszupatchen, was ist zB wenn man "vor" dem Startup rein hängt und die bestimmten Regionen für den Memory Check etc. rauspatcht ?
    Ist alles möglich... Vor allem in Bereich Game-Hacking hätte man Probleme mit SA:MP man muss in samp eine bestimmte Memory Region komplett PATCHEN damit man an den Game Memory mehrere Werte lesen / verändern kann ohne Probleme zu haben denn SA:MP hat eine "low-level" Memory Editing Protection...


    Also, völlige Sicherheit hat man nicht aber es gibt ja auch nicht so viele Erfahrene "Cheater" die meisten ziehen sich die Cheats sowieso oft und durch kleine Updates lassen sich Publizierte "Patcher" für den Anticheat / Launcher ausschalten.


    Da, ist meine Meinung aber soweit ist dein Konzept schon okay : )


    /E: Ich würde UDP bevorzugen auch wenn es keinerlei Fehlerbehandlung bietet oder anderes, aber durch UDP hätte man mehr Kontrolle über den Header etc.

  • Ach bitte, den GRP Launcher zu umgehen ist eine Arbeit von 2 Minuten.


    Ja, ich weiß, es gibt auch einige Methoden, Injections vor dem Start zu verhindern (bspw. mit einem Treiber).
    Allerdings ist nichts zu 100% sicher.


    #Brotfischbaron


    In schā'a llāh

  • Ach bitte, den GRP Launcher zu umgehen ist eine Arbeit von 2 Minuten.


    Ja, ich weiß, es gibt auch einige Methoden, Injections vor dem Start zu verhindern (bspw. mit einem Treiber).
    Allerdings ist nichts zu 100% sicher.

    aber ein ring0 AntiCheat wäre am sichersten, jedoch gibt es wieder ring0 Hacks für GTA (Payment Royalhack z.B.)