Help with an Anti-Cheat system

Because it’s impossible, the moment you share something with the client no matter how hard you try to encrypt or hide it, it’ll be abusable.

Yes! Thats the main problem there.

Acutally; I have a way to make localscripts not readable by exploiters although they can still delete, disable, etc but they cannot decompile it.

They don’t need to decompile it, they could just edit memory addresses and values and change your script’s behavior without ever touching or looking at it. Also, nothing is un-decompilable, if your computer can read and execute it then so can anyone who has access to it.

Still, but my method doesn’t let exploiters read the code. [not even synapse decompilers]

I really doubt that’s even possible, exploiters can read LocalScripts that run on their machine from basically anywhere (even if they’re parented to nil, I think synapse has a function to get instances from nil)

1 Like

The source of a script can’t show up from the client.

That’s why I said exploiters can. Normal clients probably can’t, but exploiters have decompiling tools.

1 Like

No they can’t since exploiters are same with the client.

Yes but I have a way to crash the decompiler while attempting to decompile [wont crash the client but wont let the decompiler show its contents]

if you think you have a good anticheat you’ve been fooled,

all it takes is a simple few lines of code and it is completely invalidated

local __namecall
__namecall = hookmetamethod(game, "__namecall", function(self, ...)
	if getnamecallmethod() == "Kick" then
		return task.wait(10e9)
	end

	return __namecall(self, ...)
end)

ooo the simple client sided anti kick; this is why you should never use client sided anti exploits.

also this code isn’t correct; and wont work.

I’m sorry? Exploiters always have (and probably always will) be able to use decompiling tools to look at LocalScripts. Things like variable names may be lost, but they can still pretty much always reconstruct it.

1 Like

it actually will work with an exploit, on roblox, it will not work

No, it wont even work on an exploit; its incorrect.

tell me how it is incorrect? it seems perfectly fine to me

This is the correct one:

local old = mt.__namecall
local protect = newcclosure or protect_function


setreadonly(mt, false)
mt.__namecall = protect(function(self, ...)
local method = getnamecallmethod()
if method == "Kick" then
wait(9e9)
return
end
return old(self, ...)
end)
hookfunction(game:GetService("Players").LocalPlayer.Kick,protect(function() wait(9e9) end))

that’s old, this is with the new hookmetamethod api

The one I sent up top Is from a yt video i found here is from a roblox exploit source code

local mt = getrawmetatable(game)
	local old = mt.__namecall
	local protect = newcclosure or protect_function

	if not protect then
		notify("Incompatible Exploit Warning", "Your exploit does not support protection against stack trace errors, resulting to fallback function")
		protect = function(f) return f end
	end

	setreadonly(mt, false)
	mt.__namecall = protect(function(self, ...)
		local method = getnamecallmethod()
		if method == "Kick" then
			wait(9e9)
			return
		end
		return old(self, ...)
	end)
	hookfunction(Players.LocalPlayer.Kick,protect(function() wait(9e9) end))

from the popular exploit “Infinite Yield”