Ranter
Join devRant
Do all the things like
++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatar
Sign Up
Pipeless API
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
Comments
-
donuts236722y@zlice running the chest tool is fine, but moment I do a search of the Java heap, the app crashes
-
donuts236722y@jespersh Android actually and to avoid the PID check it installed with a random name.
Only gets detected when it scans -
Root797772yDefending against memory manipulation is difficult, but there are a lot of ways you can make it work.
The simplest way is to just move your memory around periodically. This adds considerable overhead, though, so only use it for important values or for those that don’t change often. And I understand that you can’t always do this.
Another effective method is to monitor for manipulation. It’s not difficult, but it’s tedious and kind of annoying.
For ints, you store another value that’s tied to it in some way (e.g. always 2x) and compare them, or have both a string and int representation. For important values (e.g. player.hp), you can implement a running log of previous values and what modified the value, and see if the current value makes sense.
For strings, you can break them up and store them in pieces, which makes finding and the entire string (and manipulating it) much more difficult. Or storing multiple copies and making sure only the expected copy(ies) change. Or comparing against an expected checksum.
For clockrate manipulation, checking timestamps every e.g. 10 secs is simple enough, though there are a lot of edge cases and fudging here (e.g. low priority thread decreases interval accuracy) so this can only ever be so accurate. Need to check the counters for manipulation, too. You can also check server time vs local time, but this introduces yet more edge cases (overhead, latency, packet loss, time zones, …).
MITM attacks are much more difficult to detect, but fortunately web cryptography has made good progress there so you can just borrow from that.
So, are a lot of ways to detect manipulation. Some are simple, but most require a fair amount of effort.
Source: I worked as a game dev for over a decade, and some of that was on projects where much of the clientside code was stored in cleartext in memory and interpreted on the fly. That was a freaking nightmare to secure, and the above is what I found to work the best. -
donuts236722y@Root week I can't even get that far, the app just crashes when I try to read a value
-
As someone who used cheat in offline games pretty often, I can never understand why game developers tried their hardest to prevent cheating.
People cheating does not harm them in any way. I cheated because I am pretty busy and I can't afford to spend 50 hours to level up to 99. Also, I paid for your game.
[I am specifically talking about offline games here. We can't cheat values on online games anyway, since the real values are stored on the server.]
My suggestion, let them use any memory editor they want. Save you some extra work. Also saving a duplicate of all values in separate variable, encrypting them or storing them as string, adds extra CPU work which ruins your game's performance. -
Root797772y@daniel-wu Preventing cheating on multiplayer games preserves the game’s value and playability. Only cheaters and masochists will play games full of cheaters.
Preventing cheating on single-player games is a bit pedantic, but has its place, too. (Achievements, speedrunning, straight difficulty, etc.) But largely I agree with you that it’s not needed. A few messages telling the player the game knows they’re cheating is enough.
To be clear:
My post was about the ways I discovered/learned to prevent cheating in multiplayer games.
How do games know you're using a memory editor?
question