Encryption of video game objects positions as anti cheating - encrypting or locking values

Hi ddddudes, bit of a strange question:

I am nearly finished developing a “starfox-like” leap motion + Rift video game entirely done in vvvv with a leaderboard DB access to save your score. This game WILL BE RELEASED AS A CONTRIBUTION FOR ALL TO PLAY. Each level has enemies in the forms of TOWERS that you must shoot down and some RINGS to go through. At the moment each level’s RINGs and TOWERs positions are simply hand coded in vvvv, but that means that vvvv devs COULD go in the game’s patches, find the right patch with the enemy positions and then “cheat” by simply changing the rings and towers positions to something super simple achieve massive high-score, submit it and therefore cheating.

I am looking for any method of either ENCRYPTION or FREEZING/LOCKING values in vvvv. Please note: I do not want to use an external XML or text file on webserver that is loaded on game start. This would obviously solve the problem but I want this game to be playable WITHOUT INTERNET CONNECTION. Sure you won’t be able to submit your score without internet connection, that’s fine and I have a patch checking DB connection etc… So I am looking for some kind of permanent patch locking mechanism or some way to lock the values, OR a solid way to have a encrypted TEXT file in the game’s root folder which is then interpreted on game start. The doodle thingy is not an option as this game is mean to be downloaded freely from vvvv and for all to play. Cheers amigos…

Oh, please! You must include cheats, instead… like super weapons and stuff. Please just be sure to make them long and complex like

→ Q → M ↑ A ↓ G ↑ T ↓ A → J ←

to be done in 3~4 secs.

a valid deterrant would be to calc hash sums (MD5) for all v4p files and send them along your highscore. so any change within the v4p can be detected and compared either locally or remotely.

nonetheless, there are always ways to break about everything you could possibly try to detect cheating, because the code itself is not compiled or even obfuscated. just find the UDP (Client) or the place where you compare measurements with expectations, disconnect your “encryption” and simply hard-enter the value that is expected.

for me it always boils down to trust. and i have the feeling that the open culture of vvvv has fostered trust for quite some time. maybe try that first, before you waste your time coding things, that can be circumvened anyway.

“a valid deterrent would be to calc hash sums (MD5) for all v4p files” wouldnt these hashes only change if the .v4p file is saved? I mean, alter some values to cheat, play the game and win!! :D I am sure I could even store the correct hash, disconnect the checking part, alter for cheat and win the free haircut Evvvvil is offering for the winner!!

Cheaters are lame a-holes… so why bother dealing with them.

@velcrome: You a right bro, and it is why I asked the question actually, I couldn’t think of anyway to do this and make sure no dev could cheat. But as you say anything can be hacked… The hash sum check is a very good idea but would be overkill and too much data to wait for/send over internet… I was already thinking that the vvvv community is trust worthy enough not to be cheating, I mean who gives a fuck it’s just a video game, no point in cheating. Fair play to you man and thankx for the answer, I thought maybe I am missing something and or something simple obvious has eluded me…

If anyone can think of some other way to do this, which we are not seeing, let me know though. Chances are I will not use encryption and will leave it like that, so it doesn’t matter but you know I thought it’s actually an interesting question and maybe it will bring up some unexpected answers. PEACE

@h99: I will have a cage fighter standing behind you while you play, he will be slapping you silly when you try and cheat. Don’t go there bro ;) On a serious note I will have some sort of cheats but they will open up ridiculous modes like “naked mode” or “drunk mode”, nothing relevant I’m afraid… Still anyways, good idea bro.

@westbam: too right man they are lame, I think putting a cage fighter slapping you silly when you cheat is the best solution so far. Not sure how to make him fit in the download process but hey…

Yeah, something like that! Not the guy, I mean, the play mode… Something that makes acid colors and so.

  • scramble all node positions in v4p files i.e.

  • set size of patchwindows periodically to size 1

  • hide checks (numbers, hash sums,patch window size) and security actions (self destruct, setpatch nonsense) additionally in compiled c# plugins

  • use an insane amount of send and receives all over your subpatches to scramble your patch logic

  • and don’t discuss your security measures in the forum ;)

just make it painful to mess with your patch, i bet you come up with more funny things

AMAZING @u7angel, that’s what I’m talking about! I was just thinking of hundreds of unique sliders randomly sized, positioned and shit, so this is great inspiration. Some of your ideas are hilarious, thankx a lot.

I’m now hoping to visually scramble the patch while still generally making it look like a penis or a vagina. Fun times ahead…

hey another way and eventually the clean way to secure a patch ( i mean its not only about your score but its a general phylosophical question )is to use the /shutup in arg files.

I didnt test it but i think it’s possible to make a little patch that behaves like the nurse of the main program.

so we have multiple instances, using the same vvvv version that you distribute.

the startup process is like this:
With the Start.bat or an Start.exe
the Nurse patch is started and checks if it was started with the intended vvvv Version (if not quits) and it writes / rewrites args.txt with /shutup and also confirms with reader if it was successfull (if not quits) if it was all right it starts the Main Program in another instance which should then be securely shutup. The Nurse can quit after a handshake with the running Main Program
The Main Program has a verifier patch inside to check if it has been started with the intended vvvv distribution and if it is shutup and if the handshake with the nurse happens, if not it quits in the first frame.

Can someone find a error in this logic?

@teckor, wouldn’t this lead to leaving the chance to mod both Nurse and Main programs?

I’d say it could work best, writing plugins that read and others that save “special binary” files containing progress \ score \ object position \ various values \ etc. (as it happens commonly).
This would mean that cheater should reverse-engineer these dll ruling the patch, and no need to run two vvvv.exe instances.
Until vvvv50 and its compiling features, there’s no other way to keep sources\patches out of reach (considering also the fact that a cheater could patch something else between, for example, two nodes: with GetPatch\SetPatch do what s\he wants, even with binary files…)

yea but let’s say you want to deliver a software product and the patch should never appear to the user…
allright it would be not nice in the case of evvvvil if its just for the community.

would be also faster to replace the nurse patch with a nurse script in some language that has not so much startup time.

Sorry, I didn’t considered your general philosophical question, so my answer was referred only to evvvvil question about “encrypting or locking values”; I think that few incoming and outgoing data could be binaries.

From your point of view, yes I guess /shutup is there for this (and dongles too).
In fact, it is important why you want to “hide” it (vvvvers VS the rest of the world, for example).

@evvvvil is this of some use? This module will put all nodes of a module in the same place… Really, this messes up your patches layout and saves files, so be careful. Open helppatch, please.

GetOnTop.zip (4.2 kB)

@h99 you can do the same but arrange them in a grid too with setpatch…

For sure; it’s just that evvvvil is looking for a way to hide stuff, in his game. So, following u7angel post above, I thought there would be no use to do a runtime operation.
But: I would also patch something that changes direct links with S and R nodes, again after u7angel hint.
I managed to build general logic, but I have one “problem”: when it comes to choose S\R nodes datatype, since I can’t write a plugin for this, I can’t think of another way than parsing a node XML to “understand” which is the correct datatype.
It’s just messy having a list of
if … (Value) -> S (Value)
if … (Differential) -> S (Value)
Any hint?