Hello, I have been wanting to implement methods in my game that make it more complicated for exploiters to saveinstance() or steal my game assets in general. I’m not asking for a 100% working patch as anything on the client can be stolen, however I have seen games where when using saveinstance(), the game simply crashes and prevents itself from being stolen. How can I use something like this?
I found this:
It basically crashes the client if the game finds UGCValidationService (which is created under game when saveinstance() is used). game:FindService() is used instead of game:GetService() because GetService() looks for the service and creates it if it is not found, FindService() only looks for it.
There’s lots of arguments to this, and workarounds of saveinstance(), from what I’m reading in the post, it’s practically unpreventable of it happening in a reliable, catchable way. Just detecting UGCValidationService as a buffer on grounds the client is using saveinstance() isn’t so reliable.
Not to sound like an oldhead, but in my development years, I’ve NEVER seen a reliable counter against saveinstance().
Even regardless of using saveinstance(), so long as the player has access to contents located in Workspace, ReplicatedStorage, StarterGUI, etc, they can use programs like Dark Dex, to copy the things. This has been around for years by the way.
The only preventable measure is to have crucial and important things stored where the client can’t access them, being ServerStorage for example, so long as anything is there, it renders copying it useless.
In addition, anything copied/saved using these methods that contain Script(s) will just be blank since the client cannot access them. However, clients can access LocalScripts and ModuleScripts (through using require())
Then again, this is what I’m reading and using my opinion and knowledge for, if there is a reliable, preventable way, then I apologize.
your best bet is weak table detections which work by referencing weird services like keyboardservice, websocketservice, stuff like that inside of a weak table and then deleting all the strong references. because of how weak tables work, those references should become nil and if they dont that means something else that isn’t the game is holding a reference to them (so long as the game doesnt hold any references to that service itself)
this is also the same detection method used to detect dex (the explorer)
this is an example
while task.wait(1) do
local KeyboardService = game:GetService("KeyboardService")
local WeakTable = setmetatable({ KeyboardService }, { __mode = "v" }) -- make a weak table with keyboardservice inside
KeyboardService = nil -- delete the strong reference, which will make WeakTable[1] nil
task.wait(0.2) -- let garbage collect
if WeakTable[1] then -- if a reference still exists, detected
-- detection code goes here
end
end
So, I could put a local script in ReplicatedFirst and it’ll prevent it?
while task.wait(1) do
local KeyboardService = game:GetService("KeyboardService")
local WeakTable = setmetatable({ KeyboardService }, { __mode = "v" }) -- make a weak table with keyboardservice inside
KeyboardService = nil -- delete the strong reference, which will make WeakTable[1] nil
task.wait(0.2) -- let garbage collect
if WeakTable[1] then -- if a reference still exists, detected
game.Players.LocalPlayer:Kick()
end
end
crash instead of kicking, but yes
both are extremely easily bypassable, a handshake is better but thats more for more advanced anticheats so thisll do fine especially for newer exploiters who dont really have much of an idea of what theyre doing
I got many server-side anti-cheat algorithms I use, and I’ve already used some saveinstance() detections I’m just trying to create even more. Besides obfuscating the script, I used other methods that make it more complicated for an average exploiter to bypass it. I just never rely on client-sided methods, I use them for extra layers to confuse and make it more complicated for exploiters. The goal is to make it as hard as possible for the client to use any exploits, and even if they do, the server will detect it.
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.