PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cheat-verhinderung bei opensource?



BLUESCREEN3D
27-12-2003, 03:04
Wenn es hier schon einen Spiele-Programmierungs-Thread gibt erstelle ich doch gleich mal passend dazu diesen :D

Also: Wie werden bei Opensource-Multiplayer-Spielen eigentlich Cheats verhindert?
Theoretisch könnte doch jeder seinen Quellcode etwas modifizieren...

SeeksTheMoon
27-12-2003, 09:57
Bei opensource kannst Du das eigentlich vergessen.
Man sollte kontrollieren können, dass alle binaries und Spieldaten der Spieler korrekt sind (z.B. Checksummen, Netzprotokoll-Version, gleiches Patchlevel, usw.). Wenn der aber den Code hat und ihn sogar selber kompiliert, dann kann er das aber alles leicht manipulieren.
Allerdings muss sich erstmal jemand die Mühe machen und durch den Code durchblicken, den ganzen Code richtig manipulieren usw.
Das setzt natürlich voraus, dass diese Person ein Programmierer ist und dass er bereit ist, so viel Arbeit für ein bissel fuschen zu erledigen.
Wenn der Admin oder die anderen Spieler das merken, kicken sie den Cheater eh. Das dürfte auch die einzige Möglichkeit sein um mit Cheatern fertig zu werden; Softwaremäßig ist das bei opensource wirklich schlecht.

tuxipuxi
27-12-2003, 11:40
hi,


ein sehr bekanntes multiplayer opensource game ist bzflag( http://www.bzflag.org ).
du kannst ja mal auf deren page gucken wie sie cheaten verhindern oder mal die entwickler fragen.


gruss,
tuxipuxi.

samsara
27-12-2003, 18:00
Grundlegend kann cheaten bei oeffentlichen Wettbewerben verhindert werden, indem der Veranstalter die Hardware inklusive Software bereitstellt. Es liegt also im Interesse aller, die erfolgreich an solchen Wettbewerben teilnehmen wollen, schon beim ueben nicht zu schummeln! ;)

Allerdings mag das Zustandekommen solch oeffentlicher Wettbewerbe unwahrscheinlich sein, wenn das Spiel als leichte Cheaterbeute verschrien ist.

Samsara

RapidMax
27-12-2003, 19:56
Es dürfte schwierig sein, das zu verhindern. Zudem hängt es stark von der Art des Spiels ab.

Werden z.B. bei einem Shooter alle Spielentscheidenden Berechnungen auf dem Server durchgeführt (ich gehe davon aus der man dem Server trauen kann), können Client-seitig immernoch eine Vielzahl von Cheats eingesetzt werden: Durch Wände schauen, Radar mit Feinden, Aim-Hilfen, Automatisches Ausweichen usw.

Bei Spielen wie z.B. Schach kann man sich wesentlich besser vor Cheater schützen, allerdings kann hier natürlich ein Schachprogramm zu Hilfe gezogen werden.

Opensource Macht das Cheaten einfacher, aber führt keine neuen Probleme hinzu: Selbst kommerzielle Spiele haben massive Probleme mit Cheater.

Man kann hier die Erfahrungen der IT-Security gut anwenden: Programme wie Cheating Death (CS) erkennen auch nur bekannte Cheats, genau wie Antiviren-Programme nur bekannte Viren erkennen (ja es gibt natürlich Heuristiken, aber auch die lassen sich einfach austricksen).

Ein Möglichkeit Cheater auffliegen zu lassen sehe ich über statistische Auswertung des Spielers. Das bedingt aber dass der Cheater eine gewisse Zeit lang spielt. Und auch False-Positive sind vermutlich immer wieder mal zu erwarten.

Gruss, Andy

anda_skoa
27-12-2003, 19:58
Original geschrieben von BLUESCREEN3D
Also: Wie werden bei Opensource-Multiplayer-Spielen eigentlich Cheats verhindert?
Theoretisch könnte doch jeder seinen Quellcode etwas modifizieren...

In den meisten Spielen hat der Server die Kontrolle über den Spielzustand und kann daher plausible Befehle/Daten von den Clients erkennen, bzw erkennen, wenn es keine glaubwürdigen Daten sind.

Ist also mehr eine Frage des Designs der Kommunikation, bzw der Spielarchitektur.

Ciao,
_

Alex_K
27-12-2003, 20:09
Original geschrieben von RapidMax
Werden z.B. bei einem Shooter alle Spielentscheidenden Berechnungen auf dem Server durchgeführt (ich gehe davon aus der man dem Server trauen kann), können Client-seitig immernoch eine Vielzahl von Cheats eingesetzt werden: Durch Wände schauen, Radar mit Feinden, Aim-Hilfen, Automatisches Ausweichen usw.


durch wände schauen, und radar mit feinden könnte man leicht abstellen. denn das sind infos die der client im normalfall nicht braucht, und wenn der client nicht weiß das ein gegner hinter einer wand steht kann er auch nichts zeigen auch wenn die wand unsichtbar ist. dadurch würde aber wahrscheinlich der server stärker belastet.
das gößere problem sind aimhilfen usw.

BLUESCREEN3D
27-12-2003, 23:42
Original geschrieben von RapidMax
Werden z.B. bei einem Shooter alle Spielentscheidenden Berechnungen auf dem Server durchgeführt (ich gehe davon aus der man dem Server trauen kann), können Client-seitig immernoch eine Vielzahl von Cheats eingesetzt werden: Durch Wände schauen, Radar mit Feinden, Aim-Hilfen, Automatisches Ausweichen usw.
Jo, genau sowas meinte ich...


Original geschrieben von Alex_K
das sind infos die der client im normalfall nicht braucht
Die Clients mit möglichst wenig Informationen versorgen, wäre eine Möglichkeit

Es ist nur die Frage wie ein Aimbot funzt - holt der sich die Daten aus dem Speicherbereich des Spieles oder liest er die empfangenen Daten mit?
Je nachdem ließe sich mglw. mit Verschlüsselung was machen, oder bringt das eher nichts, weil der Client die Daten eh entschlüsseln muss?

SeeksTheMoon
28-12-2003, 10:52
man kann sich als aimbot eine Funktion schreiben, die die Waffe direkt auf das nächste Ziel ausrichtet und bei Bewegung dran bleibt (oder vorhält). Der Client kennt die Position des Zieles, denn er muss es ja anzeigen.
Dann schickt man die Daten für den Schuß an den Server. Dieser merkt natürlich nicht dass die Daten berechnet wurden...

Das kann man höchstens als Spieler irgendwann bemerken.

Silver
28-12-2003, 11:30
Original geschrieben von SeeksTheMoon
man kann sich als aimbot eine Funktion schreiben, die die Waffe direkt auf das nächste Ziel ausrichtet und bei Bewegung dran bleibt (oder vorhält). Der Client kennt die Position des Zieles, denn er muss es ja anzeigen.
Dann schickt man die Daten für den Schuß an den Server. Dieser merkt natürlich nicht dass die Daten berechnet wurden...


über die Sinnhaftigkeit eines solchen Spielens lässt sich streiten. Das hält man vielleicht eine Stunde durch, danach schlafen einem die Füße ein *g*!

mfG

BLUESCREEN3D
28-12-2003, 17:14
Original geschrieben von SeeksTheMoon
man kann sich als aimbot eine Funktion schreiben, die die Waffe direkt auf das nächste Ziel ausrichtet und bei Bewegung dran bleibt (oder vorhält). Der Client kennt die Position des Zieles, denn er muss es ja anzeigen.
Dann schickt man die Daten für den Schuß an den Server. Dieser merkt natürlich nicht dass die Daten berechnet wurden...

Das kann man höchstens als Spieler irgendwann bemerken.

ja, so kann man es bei opensource-games machen
aber wie funzt das bei games ohne offenen sourcen?
wird da die executable verändert oder läuft das nebenbei oder wie?
eigentlich verhindert doch das os, dass ein programm auf den speicherbereich eines anderen zugreift!?

peschmae
28-12-2003, 17:32
Ja, aber du kannst dir ja auch den Netzwerk-Traffic zurechtbiegen. Oder dann halt Änderungen an den Spieldateien.

MfG Peschmä

oracle2025
29-12-2003, 07:25
Hm, also ich würde es mit signierten Binarys und ein bisschen Verschlüsselung probieren, und mir halt von jemandem helfen lassen, der ein bisschen was von Kryptographie-Theorie versteht.

Wer dann cheaterfrei spielen will nimmt die vorkompilierten signierten Binarys, und alle anderen könnten immer noch mit dem Quellcode rumspielen. :)

Alex_K
29-12-2003, 09:02
an dass hab ich auch schon gedacht, aber die frage ist ob es wirklich so leicht möglich ist die signatur sicher zu machen. denn das programm selber muss ja die signatur zurück schicken. und ich denke es wird nicht so schwer sein das zu manipulieren.

peschmae
29-12-2003, 13:02
ja, auch mit Checksummen lässt sich wohl kaum etwas machen - dann kann man ja einfach das Programm, das man eh schon geändert hat, so zuerchtbiegen, dass es die Checksummen der Original-Binary rüberschickt.

MfG Peschmä

oracle2025
30-12-2003, 07:32
Ich glaube schon, das sich da was machen lässt,
indem ich irgendwie einen Kryptografischen Schlüssel ins Binary implantiere, und der Server schickt halt jedesmal einen Zufallswert, den der Client signieren und zurückschicken muss.

Das ganze muss halt irgendwie so gemacht werden, das man den Schlüssel nicht so ohne Weiteres aus dem Binary herausbekommt.

Das ist halt nur so ne Idee für mir, wie man das dann implementiert, ???

peschmae
30-12-2003, 09:45
für möglich halte ich das schon - von Kryptografie hab ich nicht wirklich ne Ahnung. Aber dann könnte man auch sicher eine art Aufgabenteilung machen - die original-Binary ist fürs signieren zuständig und die Fälschung fürs Spielen

MfG Peschmä

samsara
30-12-2003, 15:20
Letztlich gibt es natuerlich die Moeglichkeit, nur einen Teil des Quellcodes zur Verfuegung zu stellen, und die Authentifizierung von einem separaten binary durchfuehren zu lassen, dessen Funktionsweise dann streng geheimzuhalten waere.

Natuerlich stehlen letzten Endes alle Massnahmen der Cheatpraevention Rechenzeit des Spielers, den Grossteil davon wahrscheinlich am Start der Session (Zigarettenpause-Syndrom).

Vorvorletzter Gedanke: Entspricht es wirklich dem open-source Gedanken, alle Spieler mit modifizierten clients aus dem Wettbewerb auszuschliessen?

Vorletzter Gedanke: Man koennte natuerlich ein Netzwerkspiel programmieren im Stile des Prisoner's Dilemma - da waere dann selber modifizieren positiv erwuenscht. Wichtig ist eben, wie Vorredner schon erwaehnten, dass man dem Client keine Information zukommen laesst, die der Spieler nicht nutzen soll. Bei open-source besteht dann leider das Problem, wie man den Server finanziert, auf dem nun auch noch berechnet wird, welche Information der Spieler erhalten darf.

Letzter Gedanke: Jemand erwaehnte Schach. Das laege nahe am Prisoner's Dilemma. Schachprogramme zu Hilfe zu nehmen sehe ich nicht als Problem an, denn es steht jedem frei, dies zu tun oder nicht, und als entsprechend starker Gegner in den Ranglisten gefuehrt zu werden. Solange die Rangliste keine Auswirkungen im RL hat, stoert das sicher keinen. Die ehrlichen Gegner, die noch lernen wollen, werden sich meist am unteren Ende der Rangliste treffen. Und bei Fernschach durch Brief oder Telefon haelt man ja auch niemanden davon ab, in Schachbuechern zu schmoekern oder nebenher Simulationen zu spielen.

Gruss,

Samsara

oracle2025
30-12-2003, 17:20
Da fällt mir noch ein Aspekt ein,

und zwar zwei psyschologische ;) Anticheatmassnahmen:

Opensource games haben viel eher ne kleine eingeschworene Community, in der Cheaten dann ohnehin verpönt ist.

Und wenn es aufgrund des Quellcodes so einfach ist Cheats zu bauen, dann macht es ja eh gar keinen Spass das zu tun :)

nobody0
30-12-2003, 17:46
Das ist prinzipiell unmöglich, denn man kann ja mit einem anderen Programm den Framebuffer auslesen und Bildauswertung betreiben (z. B. Fadenkreuz auf Gegner ausrichten); notfalls kann man eine Kamera u. einen Roboter (für Tastatur/Maus) nehmen. Das ist eine Frage des Geldes; ab ca. 1 Mio EUR Aufwand (vom Cheater) kann man keinen Cheat verhindern.

tuxipuxi
30-12-2003, 18:21
Original geschrieben von nobody0
Das ist prinzipiell unmöglich, denn man kann ja mit einem anderen Programm den Framebuffer auslesen und Bildauswertung betreiben (z. B. Fadenkreuz auf Gegner ausrichten); notfalls kann man eine Kamera u. einen Roboter (für Tastatur/Maus) nehmen. Das ist eine Frage des Geldes; ab ca. 1 Mio EUR Aufwand (vom Cheater) kann man keinen Cheat verhindern.

verwechselst du vielleicht gerade "cheaten" mit "industriespionage" :rolleyes:
1 mio euro aufwand? :rolleyes:

Alex_K
30-12-2003, 19:02
Original geschrieben von samsara
Vorvorletzter Gedanke: Entspricht es wirklich dem open-source Gedanken, alle Spieler mit modifizierten clients aus dem Wettbewerb auszuschliessen?


also ich sehe da kein problem darin.
wenn es wirklich möglich ist nur den schlüssel zu verstecken mit dem das binary überprüft wird, kann man ja den kompletten quellcode (nur halt ohne schlüssel) zur verfügung stellen, somit kann jeder der will den quellcode einsehen, und ändern. wenn es wirklich sinnvolle änderungen sind (also keine cheats) gibt es ja keine gründe warum sie nicht in das original spiel aufgenommen werden sollen.
wenn jemand meint er hat wirklich genaile änderungen gemacht, und diese werden nicht aufgenommen, kann er jederzeit einen fork machen, und seinen eigenen server und binarys zur verfügung stellen (dann halt mit geänderten key).


Original geschrieben von nobody0
Das ist prinzipiell unmöglich, denn man kann ja mit einem anderen Programm den Framebuffer auslesen und Bildauswertung betreiben (z. B. Fadenkreuz auf Gegner ausrichten);
sowas ähnliches gab es schon mal bei couterstrike/halflife. da wurden einfach andere skins installiert (was erlaubt ist) welche eine "eindeutige" farbe haben (also z.b. reines gelb, oder rot), und das cheat programm hat so einfach die gegner finden können.

aber ich sags mal so, man kanns den cheatern einfach machen dass man mit wenig arbeit perfekte ergebnisse erziehlen kann, oder sehr schwer, dass man nach sehr viel aufwand auch nur 2. klassige ergebnisse erziehlt.

tuxipuxi
30-12-2003, 19:55
Original geschrieben von Alex_K



sowas ähnliches gab es schon mal bei couterstrike/halflife. da wurden einfach andere skins installiert (was erlaubt ist) welche eine "eindeutige" farbe haben (also z.b. reines gelb, oder rot), und das cheat programm hat so einfach die gegner finden können.

aber ich sags mal so, man kanns den cheatern einfach machen dass man mit wenig arbeit perfekte ergebnisse erziehlen kann, oder sehr schwer, dass man nach sehr viel aufwand auch nur 2. klassige ergebnisse erziehlt.

ich glaube es gab sogar ein dämliches anticheat programm, was jemanden gekickt hat, wenn er zu schnell getroffen hat... was natürlich fehleranfällig ohne ende ist, schliesslich kann man ja auch zufällig schnell treffen. einige server haben auch skins verboten, aber wie es aktuell ist, weiss ich nicht, da ich kein cs mehr spiele.

RapidMax
31-12-2003, 02:44
Original geschrieben von nobody0
Das ist prinzipiell unmöglich, denn man kann ja mit einem anderen Programm den Framebuffer auslesen und Bildauswertung betreiben (z. B. Fadenkreuz auf Gegner ausrichten); notfalls kann man eine Kamera u. einen Roboter (für Tastatur/Maus) nehmen. Das ist eine Frage des Geldes; ab ca. 1 Mio EUR Aufwand (vom Cheater) kann man keinen Cheat verhindern.
Irgend eine deutsche Uni forscht an autonomen Auto-Fahrer. Um ihre Software zu testen und zu verbessern ohne grossen Aufwand und ohne Menschen zu gefährden, lassen sie ihre Software mit "Need For Speed" (frag mich nicht welches ;) ) trainieren. Dazu haben sie zwei Rechner: einer auf dem NFS läuft und einer mit der Steuer-Software. Verbunden sind die Rechner nur durch ein VHS-Kabel für das Bild und den Gameport für die Steuerung.

zum Thema Binary
IMO sind alle Lösungen die ein Binary erfordern falsch am Platz wenn es um Opensource geht. Es muss eine Lösung her, welche nicht auf einem signierten Binary basiert.

Man sollte nicht nur technische Lösungen anstreben sondern auch nicht technische die Cheaten unpopulär machen, wie es oracle2025 vorher auch schon angedeutet hat. Wie überall wird man hier nicht eine 100% erreichen können und diese auch gar nicht anstreben: Wenn nur vereinzelt Cheater auftreten, dann stört das niemanden gross.

Eine mögliche Lösung währe es spezielle Server anzubieten, bei denen bewusst "gecheatet" wird und das eigentliche Ziel darin besteht mit den eigenen Cheats den anderen überlegen zu sein.

Oder man konzipiert das Spiel so, dass ein bestimmer Gegnertyp durch Bots vertreten werden, welche von den Spieler programmiert werden.

Ob diese Massnahmen helfen, muss sich erst zeigen. Offensichtlich gibt es Leute die um keinen Preis verlieren wollen und deshalb Cheats einsetzen.


Noch eine Story am Rande: Ich war mal zu Unreal Tournament Zeiten (nicht UT2k3) auf einem Server, als ein offensichtlicher Cheater eingeloggt ist: Er hat mit der Zoom-Riffle nur Head-Shots gelandet. Selbst auf grosse Entfernungen wenn er am rennen war und ich gerade von einem Jump-Brett abgesprungen bin.

Leider war er sonst zu blöde für das Spiel: Ich konnte ihn oft genug austricksen: Unkonventionelle und versteckte Wege, lange in der gegnerischen Base verstecken und dann von hinten erledigen, usw. Schlussendlich hat unser Team gewonnen. Irgendwie hat er das Spiel interessanter gemacht und eine gute Abwechslung geboten :D

Gruss, Andy

BLUESCREEN3D
31-12-2003, 14:19
Original geschrieben von RapidMax
Eine mögliche Lösung währe es spezielle Server anzubieten, bei denen bewusst "gecheatet" wird und das eigentliche Ziel darin besteht mit den eigenen Cheats den anderen überlegen zu sein.
Das Problem daran ist, dass die Leute, die cheaten wohl eh wenig Ahnung haben und deshalb keine Cheats schreiben könnten...

Zum Thema Binary kontrolliert das Spiel: Damit wird das Problem nur verlagert - sobald die Binary daraufhin modifiziert wird, dass sie das Spiel immer als gültig erkennt kann man das auch vergessen...



Was für Cheat-Arten gibt es eigentlich so?
Mir fallen spontan
-Wallhack (durch Wände gucken)
-Aimbot (automatisches Zielen und mglw. auch Schiessen)
-und Speedhack (sich übermäßig schnell bewegen)
ein

RapidMax
01-01-2004, 04:18
Original geschrieben von BLUESCREEN3D
Das Problem daran ist, dass die Leute, die cheaten wohl eh wenig Ahnung haben und deshalb keine Cheats schreiben könnten...
Das habe ich auch schon befürchtet...


Was für Cheat-Arten gibt es eigentlich so?
Mir fallen spontan
-Wallhack (durch Wände gucken)
-Aimbot (automatisches Zielen und mglw. auch Schiessen)
-und Speedhack (sich übermäßig schnell bewegen)
ein

Obwohl ich auch zu der Sorte First-Person-Shooter-Only gehöre: Es gibt auch noch andere Spiele ;)
- Ressourcen-Hacks und alles Aufdecken bei Strategie-Spielen
- Fahrhilfen bei Rennspielen
- Rollenspiele: Kürzlich behauptete ein Chinese, ihm sei ein Gegenstand geklauft worden und zog damit vor RL-Gericht :rolleyes:

Gruss, Andy

samsara
02-01-2004, 03:18
Original geschrieben von RapidMax
Eine mögliche Lösung währe es spezielle Server anzubieten, bei denen bewusst "gecheatet" wird und das eigentliche Ziel darin besteht mit den eigenen Cheats den anderen überlegen zu sein.

Oder man konzipiert das Spiel so, dass ein bestimmer Gegnertyp durch Bots vertreten werden, welche von den Spieler programmiert werden.

Das meinte ich mit meinen Bemerkungen ueber das Prisoner Dilemma, weiter oben.

Ich fuerchte aber, dass das Programmieren von bots fuer Spiele wie CS nicht wirklich interessant ist, da man schnell das maximale Ergebnis erreicht - was kommt nach dem aimbot mit 100% Trefferquote innerhalb der generellen Datenuebertragungsverzoegerung? (Na ja, es gaebe noch den Server crack, aber das ist nun sehr viel mehr Aufwand und basiert auf der Annahme von bestehenden Sicherheitsluecken!)

Gruss,

Samsara

PS: Zum besseren Cheaten sollte man vermutlich das Rendern der Szene abschalten (Rechenzeit sparen zu Gunsten des Cheatmoduls) - und wo bleibt dann der Spass?

scar
27-05-2004, 21:41
Noch eine Story am Rande: Ich war mal zu Unreal Tournament Zeiten (nicht UT2k3) auf einem Server, als ein offensichtlicher Cheater eingeloggt ist: Er hat mit der Zoom-Riffle nur Head-Shots gelandet. Selbst auf grosse Entfernungen wenn er am rennen war und ich gerade von einem Jump-Brett abgesprungen bin.

Leider war er sonst zu blöde für das Spiel: Ich konnte ihn oft genug austricksen: Unkonventionelle und versteckte Wege, lange in der gegnerischen Base verstecken und dann von hinten erledigen, usw. Schlussendlich hat unser Team gewonnen. Irgendwie hat er das Spiel interessanter gemacht und eine gute Abwechslung geboten


Das muss nich unbedingt cheaten sein :D
In meiner UT höchstzeit habe ich mit der sniperrifle auch immer auf jede Entfehrnung headshots geben können.
Das ging damit sehr gut, da die immer sehr genau trauf und kaum verzog.