maybe implement ban instead of kick for the next update?
Donât believe its smart to show yourself using an exploit on your account youâre posting from.
The method was more than likely making its way around the communities and going to be patched anyway.
Obviously, the founder benefits in no way by sharing this method and directly shoots themselves in the foot.
So itâs more than likely either the Synapse Team knew about this already, or someone in their community found out about it and released it on a public forum, which is how OP found out about it. The post itself was likely made for some form of recognition or attention, as once again, why would anyone who wants to stop hackers in their game, release the vulnerability publicly?
Sure, might as well hop on this train and explain to the community why this is useless.
Never use released detections for a reliable anti-cheat
So, first of all; A released detection should never be your primary source of detection, this is because released methods will always be patched by the cheat developers.
In making this post, youâve achieved nothing and as a result, youâve gained nothing. Hell even the title now says itâs patched, a day after it was released.
The detection itself is based on the client
Alright, so there is a few mad men who actually dedicate a lot of time and effort to stop hackers from the client, however, this is pointless. A hacker can do the following things to render your so-called client anti-cheats useless.
- Remove the script before it even has time to operate.
- Hook
__index
to return a fake-variation ofMessageBusService
- Hook
__index
to return a fake function for:Kick
- Hook
__index
to return a fake function for:Publish
avoiding error - Hook global
task.wait
to infinitly yield this specific script. - Hook global
pcall
to change the result of this error - Set script timeout to something low, stop the script from possibly crashing you
- Use Auto-Inject like the majority of exploiters
- Thereâs a ton more people can do.
How does the detection work?
This is my theory on how this particular release actually works;
Youâre going to have to learn a tad bit about Robloxâs security levels, you can learn more on this thread
In short, the higher the security level you have, the more endpoints youâre able to call.
So, looking at the above script, the context level required to execute the API is 5; And the response error message should be something along the lines of:
The current identity (X) cannot ... (lacking permission 5)
However, when synapse does inject into the client, it not only allows exploiters to execute code but modifies the engine in small ways, for example merging the lines between thread identities or error handling.
In this case, synapse has managed to change the resulting error when attempting to call this function, and from this, youâre able to detect a change on a level that in theory shouldnât ever be changed.
Creating more detections?
Based on this detection, and following through some more Iâve looked at. If you want to detect client injection (useless, but sure?) then you should make a cache of all endpoint results, and various endpoint data and then compare it throughout the game to see if anything significant changes.
In fact, if I am not wrong that is what people do, well at least the ones who think creating a client anticheat is a good idea.
Lasting thoughts
Just donât fall for the idea that a client synapse detection will save you, itâs got more negatives than it does positives.
Roblox uses a namecall for calling instance methods, so this wouldnât technically work. What a namecall is is an internal optimisation by Luau. (You can read about more about it here Performance - Luau), so they would have to hook the namecall instead (or just the raw function).
I agree, I made a slight oversight when creating the topic because it was rushed
__namecall
is for the :
operator being called on a service method
__index
is for getting/indexing an object
Some of the points made in your posts are sadly false. But this does not invalidate your post I do like the insight that you provided that client-side exploit detection is never the way to go. It is much better to secure your game with proper server-side methods instead of using hacky client methods. Preventing the injection of a exploit client should never be a large part of securing your game from exploiters as a whole.
Things canât really be done to patch it easily, there are thousands of exploits and some of them use more advanced methods. You kinda canât really ever patch things on the client as people will always find out how to manipulate it
thanks for your descriptive and informative post sir but i regret to inform you that you were 8 hours too late to make any meaningful change related to the situation. i also thought it was obvious to the average person what the motives behind releasing a public detection are (surprisingly it isnât to get people to actually use it in their games). this method couldâve as easily been obfuscated, given to massive game devs who have an infestation of cheaters, edited to silently log people and then used to cause actual damage by performing ban waves (which is what was done with the most recent public metamethod hooking detection method before it was released).
this is incorrect; the method relies on the fact 3ds is dumb and uses outdated/inaccurate error messages to stop his users from calling dangerous functions (this exact technique has been performed back in 2020 using marketplace functions instead).
i wish you better luck on your writeup about this yearâs prompt tho!!
thanks for your descriptive and informative post sir but i regret to inform you that you were 8 hours too late
And?
this method couldâve as easily been obfuscated, given to massive game devs who have an infestation of cheaters, edited to silently log people and then used to cause actual damage by performing ban waves
Agreed, except that didnât happen, maybe it did, point is you still made this post which would render the actual exploit detection itself useless.
What I said;
a change on a level that in theory shouldnât ever be changed.
What you said;
this is incorrect; the method relies on the fact 3ds is dumb and uses outdated/inaccurate error messages
Let me explain it differently, a change on something that nor CoreScripts & UserScripts can or would change, so yes, the error message is something we cannot change as thats more on the C++ side of roblox.
i wish you better luck on your writeup about this yearâs prompt tho!!
Thanks?
Nice detection bro!! only took 4 hours for syn devs to patch
Yep! If I was the only person who had this detection, it would never get on the devforum nor would it ever get patched. But, this is what happens when just anyone can have the rare detection. Itâs now a wasted thread and a wasted method. 4 hours of temporary detection for everyone and now itâs gone.
Nice job bro wasted an entire detection
This frustrates me, I mean roblox is a billion dollar company, and I donât know why they wonât invest in creating an anti cheat. They made it look more realistic, and made features that we honestly donât need(my opinion.) The developers are the one making this platform work, and when the game you made is flooded with exploiters it demotivates and makes you abandon the game you worked hard on. Sorry if there is a run-on sentence.
Sell the script to big companies and studios, make money and hide it from syn developers
Expose it to the public so the devs patch it immediately
Itâs Robloxâs role to enforce Robloxâs rules. If developersâ rules differ from Robloxâs rules, itâs up to developers to enforce those rules. If I run a game where I prohibit spoilers for popular movies, that rule is my job to enforce. Modifying your client to cheat at games is against Robloxâs rules, so itâs Robloxâs job to stop people from doing it.
Not everything is just magically âdevelopersâ responsibilityâ, especially when Roblox has more money, information, and control over the behavior of clients than individual developers do.
My question is: why donât the developers of these script executors fuzz every roblox function and check if the error messages are different between a normal roblox client and an injected one?
Script executors bugs of this nature have seemed to have been discovered for years.
You talking about stack tracing? Most executors (including Synapse X) have dedicated functions implemented for the specific purpose of rerouting the stack/scope to make the error messages less sus and to mitigate those recursive getfenv() checks inside trivially accessible data containers such as modules and getrenv().
Its sad that this was patched but they print that its injected?
We need to keep In mind that exploiters have FULL ACCESS to their client, making âanti-injectionâ would ONLY IN SOME CASES be useful, Iâm saying this because some executors especially the ones that are free wont have a way to bypass these types of scripts.
But either way I support what youâre trying to do!