Possibly a new way to tackle cheaters in some games?

Alright, so I’ve been working with my friends for a while - and we’ve been developing quite a few anti-cheat solutions and looking at how others are developed. There is quite a common issue when it comes to client-side hacks such as no-clip, fly and speedhack. Even though they can be tackled - bypasses can be found and sometimes they punish innocent users due to false-positives.

This is simply an alternative method of catching cheaters, I’ll explain our own implementation of it and then how it can be used in other methods.

We created a system that allows developers to use the following functions;
[x] The player object [t] An optional time to record, if not it will wait for rac.stop()

rac.begin(x, t) - Begins the recording, with an optional t variable, if not included it will await manual stopping
rac.stop(x) - Stops a recording manually for the given player
rac.save(x) - Saves it to a datastore for future review, also includes a unique recording key
rac.clear - Clears all recordings currently on that server NOT THE SAVES, to remove the saves for that player that can be done via the gui.

What this does is pretty simple, it records the torso of the user based on a few configuration values such as how often and the max frames - it then saves it to a datastore and with a included gui you can then load-up an interface as an admin to see all players that have saved recordings.

This can be implemented in many ways, heres two.

A; You can have an Obby whereas if the player’s time is in the top 10 of the leaderboard then it saves the recording and requires it to be reviewed by admins before it can be displayed.

B; A report system, if a player is reported it begins recording for X amount of time then saves off the recording for later review.

If you think this is a good idea, or can be improved or anything let me know.
The entire script is one module-script that just needs to be put in server-script service and its good to go. It’s as simple as requiring the script and then running the functions.

Example usage and photos:

Two recordings.
[white] A player who got into the top 10 legit, as you can see the spacing is normal the player jumped and the replay seems to be fair.
[red] A player whom clearly used a cheat such as btools or fly to prevent jumping and thus get a faster time.

What does this attempt to fix?
It’s an alternative to standardized anti-cheats, if you have a speed-running game for example you do not need to attempt to patch every single hack such as btools, fly hack, speedhack, teleporting, and the other millions of ways - because the recording will literally display the exact path and time it took them, and since the recording system is within the server and not displayed to the users - attempting to fake a run is extremely difficult and impossible if the user is unaware of the system.

And lets face it, there is no way to patch every single hack manually - if the hackers know Lua they can develop bypasses with relative ease. This system is fool-proof at catching such users, its all server-side and with manual review. You will get no false-positives. The GUI includes information such as the players current ping, etc.

35 Likes

This seems like a great idea, maybe add in loading the player’s character instead of those bricks?

3 Likes

Thats an option for developers in our configuration, they can choose how intensive they want the saving to be.

Cause remember, this all has to be stored in a data-store at the end of the day. The developers have a config option that allows them to disable or enable each body-part. At the moment we have it defaulted on their torso only, as this in 90% of cases is enough to see if a player was flying, speed-hacking, jump-hacking, noclipping or well any client-side movement exploit.

Everything is included within the one modulescript and its children.

2 Likes

I mean on playback, if it’s storing the user ID, just have it load in that person’s s character?

2 Likes

True, its an option. But it might be difficult to know where each part such as their arms were positioned if we wanted to also show their animation at that given time.

Pathfinding?

Definitely something we’ll look into, its a pretty neat idea. At the moment we’ve just been focusing on the essentials to make it function in actually being successful at displaying cheaters.

I think it looks pretty cool. Any estimate on a release date?

Within a few days, we’re working with some developers on what other functions we should add to the module-script for them to call from.

1 Like

Not really a community resource if there isn’t even a link to it. I’d move this into cool creations.

8 Likes

You can always tell a “Cheater” by their game play and their actions.

This isn’t really a Community Resource. There is no publicly available model or method and this seems like a concept than something that is complete (this just a suggestion thread. Please move this over to a more appropriate category (#development-discussion or #development-discussion:cool-creations). You can move threads by clicking the pencil near the title. You can post it here again when it’s actually complete and something the public can use.


I’ve never really agreed with manual review systems. Even if it’s for an important stat within my game, I review reports or stats on a case-by-case basis every now and then, expunging any potentially cheated results (some of which are obvious and some which are not).

How often what? What max frames? I don’t understand this.

From the perspective of a moderation tool this is pretty neat. You can expose certain player movement histories to moderators or yourself and get final results reviewed. I personally wouldn’t implement this except as a last resort if exploitation was a common occurrence with cases that I can’t figure out with a little digging.

Will do!

And just to clarify, Max Frames is how many torsos the recording system will allow in one recording and the other configuration option you mentioned ‘How Often’, categorized in the system as ‘Framerate’ is how many torsos per second it will record.

The way we found utility for this is, we have a leaderboard of the top 100 users in our obby/speedrunning game - and each user has a recording associated to their fastest time. As admins if we see suspicious times we can click on their leader board entry, view their recording then give it a ‘verified’ tag if its legit - or remove and ban the user with another button.

1 Like

Useful idea, good job! :+1:

I don’t understand why this wasn’t credited more! This looks fantastic and I will be investigating on how to create a similar system for myself. This is a step in the right direction to stop cheaters from cheating in your games.