The Daily Click ::. Forums ::. Klik Coding Help ::. Anti-Cheat/Hack Systems for Multiplayer Games
 

Post Reply  Post Oekaki 
 

Posted By Message

Agent_K64



Registered
  17/03/2003
Points
  69
3rd April, 2005 at 13:34:37 -

Soo... it would seem that nobody has bothered with this, or at least there's not much info on the subject. I'm worried that once I make something worthy of attracting many people, cheats will start spreading.

I'm talking about those lame memory modification tools here; I'm sure at least some of you know what I'm talking about. Is there any way to protect a MMF application's memory from being tampered with from the "outsite"? A way to detect and kill the popular debuggers and search tools, perhaps? C# and other .Net applications, for example have their memory in a "sandbox" to make it quite difficult to mess with; do MMF applications have any kind of protection? DMA? Anything?
...
Sorry, I'm a bit desperate for information. ; It would suck if I released something good, only for it to be ruined by a bunch of cheating children...

 
Evil omg~!

Knudde (Shab)

Administrator
Crazy?

Registered
  31/01/2003
Points
  5125

Has Donated, Thank You!Clickzine StaffKlikCast StarVIP MemberGhostbuster!Dos Rules!I donated an open source project
3rd April, 2005 at 13:37:17 -

Not as far as I know. Head over to www.thegamespage.com and look for error on the forums. He might be able to help you out.

 
Craps, I'm an old man!

RapidFlash

Savior of the Universe

Registered
  14/05/2002
Points
  2712
3rd April, 2005 at 15:03:56 -

MMF encrypts lives and scores (and I think global values). Other than that, I don't know if MMF does anything else.

 
http://www.klik-me.com

Cybermaze



Registered
  03/04/2003
Points
  853
3rd April, 2005 at 16:05:37 -

Well ... I dont know but it may be possible that there exists a kind of object that encrypts data like an encrypted array or similar. You could always make one yourself

MMF games rarely become so popular someone does a lot of work to cheat.

You could guard yourself against some cheats by doing some server side checking.

 
If you knew, I would have to kill you...

Knudde (Shab)

Administrator
Crazy?

Registered
  31/01/2003
Points
  5125

Has Donated, Thank You!Clickzine StaffKlikCast StarVIP MemberGhostbuster!Dos Rules!I donated an open source project
3rd April, 2005 at 16:06:52 -

Then we end up with Half life 2. "Please wait while we verify yur game"

 
Craps, I'm an old man!

Kris

Possibly Insane

Registered
  17/05/2002
Points
  2017
3rd April, 2005 at 16:16:20 -

If everything happens on the server then it can't be hacked with memory editors. In games like MMORPGs nothing important is entrusted to the individual user, Everything happens on the server (movement, battles, experience, whatever). The players merely send commands and the server acts on them and sends them the result.

 
"Say you're hanging from a huge cliff at the top of mt. everest and a guy comes along and says he'll save you, and proceeds to throw religious pamphlets at you while simultaniously giving a sermon." - Dustin G

Agent_K64



Registered
  17/03/2003
Points
  69
3rd April, 2005 at 23:21:00 -

It seems that I wasn't specific enough in my first post. The game will have a central server, but it will only be used to store login and player stats data. Users will host games themselves. I do realise that some problems can be avoided by relying more on the server, but the problem is that this server happens to be another player as well. For instance: In a shooting game, he/she could disable collision detection for projectiles shot against him/her.

I guess one solution would be to make a variable mess, or "puzzle", which would make it a pain in the ass to isolate the correct memory addresses with which to tamper with. This, however, sounds very messy...


"MMF games rarely become so popular someone does a lot of work to cheat." Because you're all n00bs, heh heh... Kidding. For a game to be popular, it needs to have nice graphics in addition to an interesting theme. Many MMF games lack this. I honestly can't say whether or not mine will be any better, but at least that's my goal.

I have some nasty countermeasures in mind, but I'd rather not use those... unless I can't come up with a better solution. :/

 
Evil omg~!

Assault Andy

Administrator
I make other people create vaporware

Registered
  29/07/2002
Points
  5686

Game of the Week WinnerVIP Member360 OwnerGOTM JUNE - 2009 - WINNER!GOTM FEB - 2010 - WINNER!	I donated an open source project
4th April, 2005 at 03:45:10 -

For memory hacks there is the memory editor extension for MMF. But besides that you could always make the games verify their content with the player who is hosting the game, and if their content varies then disconnect them from the game.

But realisticaly, think about it when it happens. (Which it won't)

 
Creator of Faerie Solitaire:
http://www.create-games.com/download.asp?id=7792
Also creator of ZDay20 and Dungeon Dash.
http://www.Jigxor.com
http://twitter.com/JigxorAndy

Kris

Possibly Insane

Registered
  17/05/2002
Points
  2017
4th April, 2005 at 11:38:03 -

I bet it would

 
"Say you're hanging from a huge cliff at the top of mt. everest and a guy comes along and says he'll save you, and proceeds to throw religious pamphlets at you while simultaniously giving a sermon." - Dustin G

DeadmanDines

Best Article Writer

Registered
  27/04/2006
Points
  4758
4th April, 2005 at 11:41:48 -

Another method you can use, which takes more memory but can often help, is duplication.

Hex editors (or at least the ones I've used) look for a certain value, and you keep looking until you've narrowed it down to one. For example, if you want to find the memory address of the ammo counter, you search for the value of the counter. Then you shoot once and search for the value of the counter minus one. Keep doing that, changing the value, until you find just one which always matches. And that is the memory address you want.

To make this harder, you can use an array and store each important value three times. That way you have three duplicates of the same number. The person has to try changing all three before they find the right one.

Once they have to do that, you can weave checks in with your events to ensure that all three counters are always the same. You may also be able to have a small array that I call an Audit Trail. It lists abbreviated data to tell you how key variables have changed and why. The idea is that if any changes don't add up, then it's been tampered with. (eg: ammo counter. The player loses 1 bullet each time he shoots. He has fired the gun 6 times. So his ammo should be [original value]-6. If it isn't, then something's been tampered with).


You can also store boolean values. These are a bit harder for some hex editors to deal with, because they usually set a whole byte's value. With a boolean value, you only want to change 1 bit of it - whilst allowing all the others to alter themselves happily.


That may help a bit.

But remember, a certain degree of editting and hacking simply makes people love your game more. Make it secure enough to be played safely, but not so secure that it's untweakable.

Image Edited by the Author.

 
191 / 9999 * 7 + 191 * 7

Wicked Studios



Registered
  25/10/2004
Points
  460
4th April, 2005 at 13:37:22 -

Have you tried using the save game object to make it a custom file that might not be tampered with instead of .inis? Or you could encode it using the Blowfish object. Hope this helps.

 
"Actually sir, we found a tiny unicorn in your exhaust. It was jumping around poking holes in your gas tank." "Oh thank you I did not know that. A tiny unicorn? Wow."

Agent_K64



Registered
  17/03/2003
Points
  69
4th April, 2005 at 18:33:21 -

I've had a few ideas, and it turns out they weren't as creative as I thought at first. .
"But besides that you could always make the games verify their content with the player who is hosting the game, and if their content varies then disconnect them from the game."
Yep, cross-referencing. The server will actually be checked by other players for illegal modifications this way. This is one of the methods I'm going to use eventually.

"To make this harder, you can use an array and store each important value three times. That way you have three duplicates of the same number. The person has to try changing all three before they find the right one.

Once they have to do that, you can weave checks in with your events to ensure that all three counters are always the same. You may also be able to have a small array that I call an Audit Trail. It lists abbreviated data to tell you how key variables have changed and why. The idea is that if any changes don't add up, then it's been tampered with. (eg: ammo counter. The player loses 1 bullet each time he shoots. He has fired the gun 6 times. So his ammo should be [original value]-6. If it isn't, then something's been tampered with)."
Duplication will most certainly be used, but that "Audit Trail" would require some serious thought before I'd have an idea for a feasible implementation. I understand your idea, but there's a problem: The audit trail will not know that the gun has been shot 6 times if that value is frozen, so it will still match the tampered with ammo value.

In any case, this is certainly a start.

Also, another question. How easy are MMF executables to modify using a hex editor? Can in-game resources be stolen this way? What can be modified with ease? Are in-game string values stored in clear text inside the executable file? I'd like to know if I need to devise a plan to deal with that side of things.


"But remember, a certain degree of editting and hacking simply makes people love your game more. Make it secure enough to be played safely, but not so secure that it's untweakable."
Maybe, but I don't think so. In a game with online ranking/stat upgrades/avatars/currency, lamers will take any opportunity to get something for nothing, making the efforts of legitimate players to obtain the same benefits pointless. I don't see what things could be made tweakable, without compromising security. If it were a single-player game, I really wouldn't care...

"But realisticaly, think about it when it happens. (Which it won't)"
*laughs* At this point, I'm no longer even sure whether many people trying to hack my game is a good thing or not. I suppose it could earn me bragging rights among game devs, but it certainly wouldn't among the players. I guess I'll just have to live and see...

----------------------------
"Have you tried using the save game object to make it a custom file that might not be tampered with instead of .inis? Or you could encode it using the Blowfish object. Hope this helps."
Sorry, but you're a bit off-topic. We are discussing ways to protect the game from things like "money hacks" and "trainers" that are found among players of popular online games... Gunbound and MapleSory come to mind.

Image Edited by the Author.

 
Evil omg~!

RapidFlash

Savior of the Universe

Registered
  14/05/2002
Points
  2712
4th April, 2005 at 18:51:51 -

You can steal midis and extensions with Kris' extension borrower: http://www.create-games.com/download.asp?id=4255

 
http://www.klik-me.com

DeadmanDines

Best Article Writer

Registered
  27/04/2006
Points
  4758
6th April, 2005 at 07:39:29 -

Yeah, it's very easy to steal extensions and midis. You can also rip MIDI files straight from TGF's .gam files because they're uncompressed (shouldn't work with cca though, since the cca file is compiled into the exe).



My explanation of how the audit trail works wasn't very good - it's basically a glorified array (with 2 dimensions). It starts with a list of possible actions, and how they alter the value. Eg: (for ammo again)

Action1 = Shoot (-1 bullet)
Action2 = Secondary Function (-5 bullets)
Action3 = Pick up ammo crate (+20 bullets)

Then after that it says the following:

Start : 50 (player starts with 50 bullets)
Action3 : 70 (player picks up ammo, so this goes +20)
Action1 : 69 (player shoots)
Action1 : 68 (and again)
Action1 : 67 (and again)
Action1 : 66 (so you see)
Action1 : 65 (it's just)
Action1 : 64 (a big)
Action1 : 63 (fat)
Action1 : 62 (ugly array)
Action2 : 57 (oo, a Secondary Function shot)

Obviously stuff like 'action1' would be represented by a code, probably just '1'. The array would grow to be huge after not very long, so you can let it get to about 20, then strip off the oldest 10 rows and replace them with one 'brought forward' value. So after being stripped it may look like this:

Bfwd : 63 (the brought forward number. We must always leave a few entries after it)
Action1 : 62 (this is the second-to-last value that we mentioned above)
Action2 : 57 (and this was the last)
Action1 : 56 (and here we start with the new things, the player shoots again)
Action3 : 76 (and now he picks up more ammo)


As you can see this is pretty cumbersome to use for lots of values - you'd only want it watching key ones, like health or ammo. But the Audit Trail itself doesn't need to be that big.

Because there is always at least a couple of values after it, the 'brought fwd' value can never be altered (because it would throw the other ones out of sequence).

The other actions recorded can't be altered either, because they each have a specific effect on the ammo counter. For example, Action2 always reduces the counter by 5. So if we have an audit trail like this:

Bfwd : 20
Action1 : 19 (this is a normal action)
Action2 : 200 (but this one has been altered)


The computer can check and see that the final value should be 20 minus 1 minus 5. It's not, so something is wrong.

As far as I can see, the most effective way to alter it would be to use a hex editor to add 'dummy entries' into the array. Adding an 'Action 3' several times so that the game thinks the user has picked up several ammo packs when he hasn't.

But that would be beyond most small-time hex editors I should think.

You could also change the final entry so instead of saying 'Action2 : 14' it actually says 'Action3 : 39' (so you've changed the value and the action to something that adds up - in this case, picking up an ammo case). That would be a pain. But at least the weirdness of the audit trail would make doing so much more difficult.

If someone made an Auditing extension (to do all this for you), then they could add a checksum and encryption to the array, and then any potential cracker would really be stuffed.

Image Edited by the Author.

Image Edited by the Author.

 
191 / 9999 * 7 + 191 * 7
   

Post Reply



 



Advertisement

Worth A Click