Programm Cheatengine, was kann alles verändert werden?
Übersicht

MynBetreff: Programm Cheatengine, was kann alles verändert werden? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 ![]() Ich freue mich übrigends drauf, mal ein OnlineSpiel aus dem hause BBP zu Spielen ^^ Halt uns auf dem laufenden ![]() |
||
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group