Programm Cheatengine, was kann alles verändert werden?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Myn

Betreff: Programm Cheatengine, was kann alles verändert werden?

BeitragDo, Sep 29, 2011 17:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Titel erklärt ja schon ungefähr meine Frage.
Und zwar möchte ich in der nächsten Woche mein Online Spiel
releasen, aber aus früheren Tests weiß ich das mit Programmen
wie Cheatengine (etc.) Werte von von Variablen verändert werden können,
was natürlich verhindert werden muss. Dazu muss ich aber erstmal wissen
was alles geht..?


Meine Frage lautet also welche Sachen veränderbar sind?
Nur Globale, oder auch Lokale Variablen und was ist mit Arrays (Dim) ..?

ToeB

BeitragDo, Sep 29, 2011 17:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Am besten zwei Variablen für alles wichtigen Bereiche (Punkte / Leben / Munition usw.).

Die erste speichert bspw. den Tatsächlichen wert, die zweite speichert den Wert etwas umgerechnet (bspw. mal 12 oder + 30 oder wie auch immer, aber so das der Wert wieder zurückgerechnet werden kann).

Dann kannst du immer prüfen, ob die Variablen nur noch gleich sind und wenn nicht, dann wurde etwas verändert (Aber dran denken: Veränderst du eine Variable, musst du die andere gleichsetzten und den Wert wieder entsprechen erhören / erniedrigen)

(Einfache Version davon ist das du einfach direkt nicht den "Richtigen" Wert in der Variable speicherst sondern direkt ein veränderter, allerdings kannst du so Veränderungen nicht mehr aufspüren.

Edit: Ja, alle Variablen, die Wichtig sind und das Spiel vorteilhaft manipulieren könnten, sollten so verändert werden. Und es ist bei Variablen egal ob es Arrays, Lokale oder Globale Variablen sind. Denn jede Variable (In Arrays sind ja nur mehrere zusammengefasst im Programm unter einen Bezeichner mit Index) hat einen Speicherplatz und ist somit mit der Cheatengine aufspürbar Wink

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

Myn

BeitragDo, Sep 29, 2011 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Toeb, auf die Idee bin ich so noch nicht gekommen.
Ich hatte das so ähnlich geplant, aber deutlich aufwändiger^^

Ich denke das hast sich dann hier geklärt ;D

ZEVS

BeitragDo, Sep 29, 2011 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Variablen sind Speicherbereiche (normalerweise im RAM) und damit auch durch andere Programme manipulierbar. Die einzige Ausnahme sind evtl. lokale Variablen, die manchmal wegrationalisiert werden.
Eine derartige Runtime-Cheat-Engine zu schreiben ist damit allerdings sehr kompliziert, andererseits kann ein Programm solche Variablen nicht verteidigen.

In Dateien gespeicherte Daten sind dagegen sehr leicht zu manipulieren. Wenn man z.B. eine Datei namens "player_01.dat" entdeckt, kann man diese durch einen HEX-Editor sehr leicht manipulieren. Es reicht ja, die Datei irgendwohin zu kopieren, ein Leben zu verlieren und wieder zu speichern, um anhand der Unterschiede den Speicherplatz der Leben auszumachen und aus Fantasiewerte zu setzen. Einziger Ausweg: derartige Dateien vermeiden. In einer Bitmap beispielsweise dürfen unbenutzte Speicherplätze auftreten, auf die man nicht so schnell kommt. Hier können die Daten versteckt werden. Alternativ kann man die Speicherdateien zusammenfassen, mit zufälligen Daten auffüllen und verschlüsseln.
All diese Verteidigungsmethoden sind nicht absolut sicher und verlangsamen die Performance beim Laden und Speichern. Man mus hier Prioritäten setzen.

Bei einem Online-Spiel weise ich hier besonders auf Hacker-Abwehr hin. Einerseits könte natürlich der Server lahmgelegt werden, andererseits muss man bei den Protokollen darauf achten, dass die Spieler nur ihre Aktionen und nicht deren Wirkungen senden. Sonst könnte man dem Server (und dem Gegner) permanente Upgrades etc. vorgaukeln.

Es stellt sich natürlich die Frage, ob überhaupt jemand Interesse hat, dein Spiel zu manipulieren. Eine einfache PreventCheat-Funktion gibt es natürlich nicht.

ZEVS

PS: Ich habe mit meinem Beitrag begonnen, bevor ToeB seinen sandte. Trotzdem halte ich ihn für sinnvoll.
 

PhillipK

BeitragDo, Sep 29, 2011 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Prinzipiell kann man mit einem solchen Tool alles verändern.

Toeb und ZEVS haben ja schon ein paar gute methoden genannt, um soetwas zu verhindern.
Aber eins ist klar: Der Client darf niemals Tatsächliche werte an den Server senden (Schadenspunkte, momentane Lebenspunkte, etc), das muss entweder der Server komplett verwalten (und dieser durch hackangriffe von aussen abgesichert sein) oder tausund und dreimal geprüft werden.

Man kann sagen, das alles was im RAM oder auf der Festplatte ist, verwendet werden kann um manipuliert zu werden.
Das beudetet das jeder Spieler bei dir Freien zugriff auf die geschehnisse hat, wenn er es schafft, die werte zu finden. Prinzipiell auch Lokale variablen, aber das ist äusser unwahrscheinlich, da diese nur so kurzlebig sind, das das auffinden quasie zu lange dauert.

Wenn du etwas mit zb Cheatengine rumgespielt hast, weißt du dies sicher. Im grunde durchsucht es den Speicherbereich eines ausgewählten Programmes nach einem angegebenen Wert und behält sie "im auge". Nun kannst du den Wert im Spiel verändern (zb ein Leben verlieren) und nach dem neuen wert prüfen.
Sollte dann aus dem "gemerkten" werten ein oder zwei auch den neuen wert aufweisen, hast du deine Suche extrem eingegrenzt - du kennst sehr wahrscheinlich die Position der Werte im RAM.

Soetwas kann man einfach nicht 100% umgehen, aber ich halte ToeB's idee als ziemlich sinnvoll.
Kombinier das doch ein wenig :

Halte für jeden Wert gleich 2 Werte. Nun rechnest du einen zb *20, den anderen "kodierst" du ein wenig - zb mach aus einem INT ein LONG indem du die Bits verschiebst. In wie weit das in BB performant oder gar möglich ist, weiß ich allerdings nicht.
(Bits verschieben: Schiebe den 32sten bit an 64ste stelle im Long, den 31sten an 62 stelle, etc - schon ist der wert schon enorm schwerer aufzuspüren!)

Andererseits könntest du dich auch auf die Suche machen und zumindest einmal die gängigsten Cheat-engines ausfindig machen. Wenn du dir nun noch die mühe machst und eine kleine Prüf-routine schreibst, die zb alle 2 sekunden einen weiteren Prozess unter die Lupe nimmt und prüft, ob diese eine der Cheatengines sein könnte, hast du schonmal gute karten. Wie genau man das realisieren könnte, kann ich dir allerdings nicht sagen, mit der Materie habe ich mich noch kein Stück befasst Sad

Speicherdaten die du Lokal auf der Festplatte ablegst, sollten auch eine art Verschlüsselung haben. Oder zumindest in einem Passwortgeschützten ZIP file abgelegt werden - aber auch hier ist die frage, welche möglichkeiten man durch BB da so bekommt :3

Einfache Methoden um zb etwas Verschlüsselt zu speichern, ist die werte zu Zerlegen. Ein Integer besteht aus 4 bytes, ein Short aus 2 Bytes. Wenn du nun in einem Integer beim Speichern die ersten 2 und die 2ten 2 bytes vertauscht und dann abspeicherst, ist es schonmal nichtmehr so leicht zu verändern. Auffinden ja, verstehen was da passiert - weniger schnell. Hier gibt es hunderete Variationen über die man Stunden diskutieren kann! ^^

Nun, ja.. Ich quassel mich mal wieder fest Smile
Ich freue mich übrigends drauf, mal ein OnlineSpiel aus dem hause BBP zu Spielen ^^ Halt uns auf dem laufenden Very Happy

ZaP

BeitragDo, Sep 29, 2011 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Soll der Client doch ändern, was er will - Der Host sagt, was zu tun ist. Du kannst deinen Netzwerkcode so ändern, dass die Clients nicht etwa sagen Hey, ich führe jetzt Aktion XYZ aus., sondern Darf ich Aktion XYZ ausführen? und der Host bestätigt das dann, wenn alles passt.
Starfare: Worklog, Website (download)
 

Myn

BeitragDo, Sep 29, 2011 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, eure Antworten waren nochmals hilfreich und "aufklärend" ^^

Ich denke ich werde mit einer Mischung aus den Ideen etwas zumsammen bauen...

Zum Spiel, es ist eine Pokemon Online und heißt "P-Online"...
Daran habe ich jetzt mehrere Monate gearbeitet und ich denke nächsten
Samstag gebe ich es dann mal als BETA 1 raus^^

mfg
Myn

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group