Game-Maker-Spiele Cheatschützen

    • GM 8

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Bei den neueren Versionen (GM:Studio, hoffentlich) wird der Code direkt in nativen Code umgewandelt, d.h. die Variablen werden nicht nach einem Key-Value Prinzip abgespeichert, sondern direkt im Speicher (also nurnoch eine Addresse). Bei den den HTMl5 Spielen muss man aber aufpassen, mit einem Debugger (Firebug für Firefox) kann man z.B. direkt Variablen verändern oder auch direkt den Code.
      wupto.net/ Nicht meine Seite!
      We love Koalas.

      GM-D-Spam-o-Meter: 32%
    • kann man nicht eigentlich mit dem programm was ich gepostet habe die lizenz von game maker standart knacken? 8o
      Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
      Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

      Willst du mit mir auf Discord Chatten/Quatschen?
      Meine Husi's Tutorial Reihe
    • kann man nicht eigentlich mit dem programm was ich gepostet habe die lizenz von game maker standart knacken? 8o


      ich würde darüber nicht sprechen. @Huso Zum Glück erwähnst du das nicht zu dem Besitzer des YoYoGames :)
      Info: Game Maker kann man natürlich das Lizenz hacken, aber es ist Illegal und ist Strafbar.
    • Ich weise hier mal im übrigen darauf hin, dass es - zumindest für die GM-Versionen vor Studio - ein Rückinterpretiertool gibt, dass die exe wieder in eine vollständig editierbare gmk/gmd/gm81/etc. umwandelt. Wenn jemand dieses Tool benutzt, hat er euren Code direkt vor Augen und sämtliche Anti-Cheat-Maßnahmen eurerseits sind für den Abfluss. Je nach Komplexität eurer Engine könnte es eventuell schwierig für den Angreifer werden, die Funktionsweise zu verstehen, was unerfahrene "Skript-Kiddies" erstmal ausbremsen dürfte, aber wenn sich da jemand ransetzt, der das Knacken eures Punktesystems als Herausforderung und nicht als Hürde sieht, dann kriegt der das früher oder später auch raus. Obfuscating (das Umbenennen von Variablen in völlig unzusammenhängenden Stuss) bringt da auch nur begrenzt was, es erhöht nur den Zeitaufwand. Sobald der erste rausgefunden hat, wofür welche Variable steht, kann er ihnen einfach neue Namen verpassen und diese veränderte gmk rumschicken.
      Ich würde mir also an eurer Stelle, vor allem bei kleinen Arcade-Spielen, wie sie im GM häufig gebastelt werden, nicht zu viele Gedanken um das Verhindern von Cheating machen. Ich würde mich eher fragen, wie ich den Schaden begrenzen kann - z.B. sollte es dem Angreifer auf keinen Fall möglich sein, irgendwelche wichtigen Passwörter (für den Webserver mit der OHS-Tabelle drauf zum Beispiel) direkt aus der gmk auslesen zu können - und wenn doch, dann sollte das ein Passwort sein, das ihr nirgendwo sonst verwendet.
      Ihr schreibt hier immerhin keine AAA-Titel, hinter denen ernsthafte Geldsummen stecken - da bin ich zumindest der Meinung, man kann ein paar Vollflöten, die sich an der Spitze irgendeines Scoreboards sehen wollen, schon verkraften. Man sollte ihnen nur keine Mittel und Wege geben, euch als Person zu schaden.
    • auch egal lass uns nicht weiter rein vertiefen.
      ich habe im code ein fehler entdeckt ich behebe ihn:

      Quellcode

      1. plusgeld = false
      2. geld = 0 //ist zu anfangs ja immer so
      3. uberprufung = 10
      4. if ((uberprufung = > geld - 10) or (uberprufung = < geld - 10))
      5. if plusgeld = false// oder wo man geld bekommt muss man das geld erhöhen und die variable auf true setzten
      6. {
      7. // error code
      8. geld = uberpufung -10
      9. }
      10. else
      11. uberprufung = geld + 10
      12. if plusgeld = true
      13. plusgeld = false
      Alles anzeigen
      Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
      Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

      Willst du mit mir auf Discord Chatten/Quatschen?
      Meine Husi's Tutorial Reihe
    • nur komischer weise zeigt der mir immer nur zugriff verweigert (error code)
      obwohl ich nichts dazu tue also es kommt direkt und wenn ich das -10 weg mache geht es
      Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
      Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

      Willst du mit mir auf Discord Chatten/Quatschen?
      Meine Husi's Tutorial Reihe
    • Du weist in deine script den Variablen ja jedesmal vor den Überprüfungen default-Werte zu. Also geld wird bei jeder Scriptausführung 0, uberprufung 10 und plusgeld ist immer false.
      In deiner ersten If-Abfrage prüfst du, daher ob 10 größer oder gleich 0-10 (also -10) ist. Da dies immer der Fall ist, läuft das Programm dann in die zweite If-Abfrage.
      Diese prüft dann immer ob false gleich false ist, dies ist auch immer der Fall und darum wird dein error code auch jedesmal ausgeführt.

      Abgesehen davon solltest du etwas an deinem Coding-Style arbeiten, imho ;-)
      www.glowingorb.de
      „Wenn es im Universum noch irgendwo intelligente Lebewesen gibt, dann kennen sie vielleicht Schach, höchstwahrscheinlich jedoch GO

      (Schachweltmeister Emanuel Lasker)
    • schreibe doch den code richtig hin
      ich habe das deklarieren in create geschrieben
      Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
      Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

      Willst du mit mir auf Discord Chatten/Quatschen?
      Meine Husi's Tutorial Reihe
    • @husi
      Ich glaube, er meint Einrücken bei if, geschweifte Klammern...
      und das ganze nicht in den Quellcode sondern in den GML-Code, wär irgendwie sinnvoll :)
      GML lernen geht leicht :)
      1. http://www.gm-d.de/help/ (deutsch)
      2. gm-d.de/wbb/index.php/Thread/2270/ (Einsteiger-Referenz)
      3. docs.yoyogames.com/ (Hilfe auf Englisch von GM:S)
    • Hi Leute,
      Sorry das ich diesen Thread hier nochmal auskrame,
      aber ich hab 2 tricks gefunden, es den Hackern schwer zu machen:
      1: Soviel variablen wie möglich lockal machen.
      2: Variablen nach dem gebrauch in einen string verwandeln.
      Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
      Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
      Nach langer zeit wieder im Forum aktiv :D
    • Zu 1:
      Ich sehe nicht, wie das helfen soll. Ja, die Position der Variable im Speicher ändert sich so theoretisch recht häufig - nichtsdestotrotz sind die interessanten Variablen meistens in Objekten, die immer präsent sind. Zumindest innerhalb eines Raumes wird es daher nach wie vor möglich sein, den Speicher nach entsprechenden Werten zu durchsuchen, wie z.B. der Lebensenergie des Spielers.

      Zu 2:
      Es macht dein Spiel unnötig langsam und macht es nicht in allen Fällen schwerer, nach den entsprechenden Variablen im Speicher zu suchen, sofern der String nicht ständig seine Position ändert (ich weiß nicht, wie das beim GM funktioniert). Denn: Auch die Buchstaben werden in irgendeinem Encoding im Speicher festgehalten und ironischerweise ist z.B. der ASCII-Code für eine 8 um eins größer als für der für eine 7. Sucht man also nach wachsenden/schrumpfenden Werten, kann man schnell erfolgreich sein, solange sich die Zahl sich nur im Einerbereich verändert. Mehr Erfolg hätte man da vielleicht mit einer Bitwise-"Verschlüsselung", sofern man doch dafür sorgt, dass willkürlich das Vorzeichen-Bit gekippt wird.
      Zugegeben, viele Tools und Scriptkiddies wird das wahrscheinlich aufhalten, aber es gibt bestimmt clevere Tools, die auch einfach mal willkürlich Segmente des Speichers einfrieren/schreibschützen oder so, und wenn man dabei den String-Pointer erwischt und damit z.B. die Lebensanzahl einfriert, dann hat man auch gewonnen, ohne zu verstehen, was der Programmierer da gemacht hat.


      Nochmal:
      Solange ihr keine Online-Highscore oder Multiplayer habt, ist es vollkommen egal, ob der Spieler cheatet. In Multiplayerspielen allerdings ist es meistens einfacher, den Netzwerk-Traffic zu manipulieren. Da muss man sich dann sehr individuell Lösungen einfallen lassen, die auf das eigene Spiel zugeschnitten sind. Bedenkt, dass viele große Online-Spiele heutzutage primär auf Reports durch andere Spieler setzen.
      Kurz: In fast allen Fällen verschwendet ihr mit diesem Kram eure Zeit.
    • Jetzt schreibe ich auch mal meinen Senf dazu:

      Ich habe ja zwei Spiele die ich erfolgreich verkaufe und die über einen Online Highscore verfügen. In diesem Fall hat es sehr wohl Sinn gemacht, mein Spiel vor Cheatern zu schützen, da die Leute ja Geld dafür bezahlen, und somit auch einen fairen Online Highscore wollen, da es in dem Spiel auch hauptsächlich darum geht.

      Am Anfang habe ich mich garnicht mit dem Anti Cheat System beschäftigt, bis mir irgendwann in meinen online abgespeicherten Daten, aufgefallen ist, dass sich der Punktestand von einen auf den anderen Moment enorm erhöht hat. Und somit war der erste Punkt den ich prüfen lasse:

      1. Score alt und Score Neu. Score alt hat immer den Wert, den der Score vor der neuen Erhöhung hatte. Das heißt, wenn man den Score durch irgendwelche Erfolge maximal um 100 erhöhen kann, sollte Score alt 0 sein und der wirkliche Score 100. Dann 100 und 200, usw. Das heißt wenn die beiden Werte weiter auseinander als 100 sind, wurde gecheatet und man kann die Anti Cheat Maßnahmen ausführen.

      Das allein ist schon mal ziemlich zuverlässig, da der Cheater dann mühselig immer den Score ganz langsam erhöhen müsste, außer er findet das mit dem Score alt heraus und erhöht beide Werte gleichzeitig.

      Dann hab ich noch so kleine Spielerein drin, wie z. B. nicht den tatsächlichen Score zu anzuzeigen, sondern eine Variable die den gleichen Wert wie der Score hat, nur *10 genommen, und der Score wird erst beim Senden tatsächlich *10 genommen, somit kann er die angezeigte Zahl im Spiel ändern wie er will, es wird sich nicht auf den tatsächlichen Score auswirken.

      Ich weiß natürlich, dass es bei weitem noch nicht reicht um ernstzunehmende Cheater abzuwehren, aber das ist sowieso so gut wie nicht möglich. Für meine Zielgruppe reicht es auf alle fälle.

      Gruß,
      Shari

      (Jetzt hoffe ich nur noch, dass keiner meiner Spieler das hier lesen wird :D)
      Dieser Beitrag wurde bereits 1909 mal editiert, zuletzt von »Sharivari« (Morgen, 19:89)
    • Meine Meinung dazu:
      Singleplayerspiele muss man nicht schützen, da der Spieler selbst schuld ist, wenn er cheated, und sich damit das Spiel versaut.

      In Onlinegames ist das Alles ein wenig anders:
      Da würde ich (bzw. diese Methode wende ich immer an) einfach alles über den Server laufen lassen.
      Der Client selbst ist nur eine "Steuereinheit" für den Server,
      wenn der Spieler z.B. ein Monster am Client töten will, checkt der Server erst ob dies auch so funktioniert,
      und gibt dem Spieler dann mehr Geld. (Welches natürlich auch am Server gespeichert wird.)

      Grundlegendes Prinzip:
      Client: Darf ich das?
      Server: Ja/Nein
      Falls ja: Aktion wird am Server ausgeführt und sendet die Informationen an den Client.
      Fall nein: Aktion wird am Server abgebrochen, und der Client erhält keine Information, eine Warnung, o.ä.

      Falls es sich nur um eine Online Highscore handelt,
      wäre die einzige Möglichkeit die, dass das Programm prüft, ob ein Zugriff von außen auf das Programm besteht,
      oder eben Adressenwerte verändert werden. (Weiß aber nicht ob das mit GM selbst möglich ist.)
      Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
    • levarris07 schrieb:

      Falls es sich nur um eine Online Highscore handelt,
      wäre die einzige Möglichkeit die, dass das Programm prüft, ob ein Zugriff von außen auf das Programm besteht,
      oder eben Adressenwerte verändert werden. (Weiß aber nicht ob das mit GM selbst möglich ist.)


      Das Hilft auch recht wenig, wenn man einfach den Traffic ausliest, da man das machen kann, ohne dass das Spiel davon was merkt. Die POST/GET Variablen zum Beispiel kann man ohne großen Aufwand auslesen und sich auf Basis der ausgelesenen Informationen, ohne das Spiel überhaupt gestartet zu haben, ganz oben im Highscore eintragen
    • also wo ich den code gepostet habe war ich noch nicht so gut ich
      glaube so müsste es gehen:
      im create:

      GML-Quellcode

      1. plusgeld = false
      2. geld = 0 //ist zu anfangs ja immer so
      3. uberprufung = 10

      im step:

      GML-Quellcode

      1. if uberprufung < geld + 10
      2. {
      3. if plusgeld = false// oder wo man geld bekommt muss man das geld erhöhen und die variable auf true setzten
      4. {
      5. show_error("du wolltest cheaten....",true)
      6. geld = uberprufung -10
      7. }
      8. if plusgeld = true
      9. {
      10. uberprufung = geld + 10
      11. plusgeld = false
      12. }}
      Alles anzeigen
      Dateien
      • cheatangriff.zip

        (13,79 kB, 87 mal heruntergeladen, zuletzt: )
      Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
      Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

      Willst du mit mir auf Discord Chatten/Quatschen?
      Meine Husi's Tutorial Reihe

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von husi012 ()