# Zugriff von externe Programme verhindern



## Zodiak707 (24. Jul 2012)

Hallo, 

Ich bin momentan dabei ein kleines spiel in java zu basteln und wollte mal fragen ob es möglich ist das spiel gucken zu lassen ob ein anderes programm (beispielsweise Cheat Engine) darauf zugreift?
Einfach aus dem grund das ich ja irgendwie verhindern will das man bei meinem spiel cheatet 

Gruß Zodiak


----------



## Bile Demon (24. Jul 2012)

Wäre das nicht Aufgabe des Betriebssystems, zu verhindern, dass irgendein Programm XY in den reservierten Speicherbereich der JavaVM schreibt? Wenn das Betriebssystem sowas zuließe, würde ich mir ernsthaft Gedanken machen.

Oder ist sowas tatsächlich üblich?

Edit: Machbar wäre das höchstens, wenn die JavaVM selbst nur innerhalb des Cheatprogramms ausgeführt wird, und so die Hoheit über den Speicherbereich behält. Bleibt aber die Frage, wieso jemand sich die Mühe machen sollte, ein eigenes aufwändiges Cheat-Tool für ein kleines Java-Spielchen zu schreiben.


----------



## Network (24. Jul 2012)

[STRIKE]Ich weiss nicht ob es etwas hilft, habe Ansatzweise mal gehört, das als final deklarierte Variablen nicht mehr geändert werden können, egal von wem.
Das wäre dann eine Möglichkeit bestimmte Bereiche zu schützen.[/STRIKE]

An sich gibt es jedoch viele Tipps und Tricks sich vor Programmen wie Cheat Engine zu schützen.
In jedem Fall ist Google dein Freund - Aber für die Antwort biste natürlich nicht hergekommen 

- Dein Programm könnte natürlich abfragen ob der Prozess CheatEngine gerade läuft und den Dienst solange verweigern.
- Ganzzahlen als floats oder doubles abspeichern. Bspw. hat man in vielen Spielen ja Geld, speichert man das Geld als Double ab (am besten noch mit Nachkommazahlen) zeigt es aber als Integer an, so kann man danach nicht direkt suchen. Auch muss erstmal auf die Idee gekommen werden, nach float und double zu suchen.
- Und das selbe auch anderst herum, Zahlen mit Komma, als 2 Integers speichern. Und fals gebraucht dann als Kommazahl umrechnen.
- Wechseln der verwendeten Variable. Also immer eine andere Variable initialisieren und verwenden, dadurch ändert sich die Zugriffsaddresse. Und kaum hat der Cheater die Variable gefunden, ist sie auch schon wieder woanderst gespeichert 

Mit diesen paar einfachen Tricks, die am besten zum Ende der Entwicklung angewandt werden sollten, lässt sich die Verwendung von Cheat-Engine also sehr gut abhalten.

@BileDemon
Google mal nach CheatEngine  Ist ein Programm


----------



## Tomate_Salat (24. Jul 2012)

Network hat gesagt.:


> Ich weiss nicht ob es etwas hilft, habe Ansatzweise mal gehört, das als final deklarierte Variablen nicht mehr geändert werden können, egal von wem.



Nein. Du kannst sie via reflektion und/oder JNI-zugriffen ändern.


----------



## Bile Demon (24. Jul 2012)

Hallo Network,

dass das ein Programm ist, habe ich mir schon gedacht. Habe mir jetzt mal ein paar Zeilen zu dem Programm durchgelesen. Scheint tatsächlich ganz simpel zu funktionieren.

Da habe ich Windows mal wieder für sicherer gehalten als es ist, wenn Programme wild durcheinander in irgendwelche fremden Speicherbereiche schreiben können.


----------



## Zodiak707 (24. Jul 2012)

auch wenns so ist das sich jemand nicht die mühe macht dafür ein tool zu schreiben gibt es trotzdem immer noch tools wie "Cheat Engine" mit denen man das trotzdem machen könnte 

und da das tool ja in der lage ist auf die werte in einem programm zu zufreifen muss es doch auch ein weg geben zu verhindern das das passiert


----------



## Zodiak707 (24. Jul 2012)

sorry für doppelpost ._. aber hab langsamer geschrieben als die antworten kamen^^ und editieren ... also entweder bin ich blind oder man kann hier nicht editieren  
also danke für die tips Network ich werd die gleich mal umsetzen ^^

[edit]: ok musste noch email bestätigen ._. nochmal sorry fürs doppelposten


----------



## Empire Phoenix (25. Jul 2012)

man könnte sich zb für alle objecte (die logic enthalten) einen hash generieren über alle variablen. Wenn nun plötzlich der inhalt nichtmehr zum hash passt jvm crashen (muss so aussehen als ob das cheatprogramm schuld ist, zb nen directbuffer nehmen über reflection den cleaner benutzen und dann drauf zugreifen, dann gibts nen crash im nativen code).


----------



## Templarthelast (25. Jul 2012)

Empire Phoenix hat gesagt.:


> man könnte sich zb für alle objecte (die logic enthalten) einen hash generieren über alle variablen. Wenn nun plötzlich der inhalt nichtmehr zum hash passt jvm crashen (muss so aussehen als ob das cheatprogramm schuld ist, zb nen directbuffer nehmen über reflection den cleaner benutzen und dann drauf zugreifen, dann gibts nen crash im nativen code).



Theoretisch kann man über den decompilten Quellcode auf den Hashalgorithmus stoßen und dann mit diesem sowohl den Hashwert, als auch den eigentlichen Wert zeitgleich ändern.


----------



## Empire Phoenix (25. Jul 2012)

Jup, das können aber die 08/15 standart tools nichtmehr, dafür ist schon handarbeit nötig.


----------

