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.