Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

How would I go about banning someone from a client side anti-cheat detection?

Hello, I am working on my anti-cheat (TAC) and I have completed my main server module, which detects if the player in question is editing their speed or jump power, and if they are it bans them via a datastore.

I finished the client side, discovering that I am only able to kick them, as the datastore stores data from the server and not the client. I want to be able to ban the player without using remotes, that way a remotespy will not be able to detect such a thing.

The banning and kicking function are stored in a module, to simplify life and call on them in one line of code, but the client is only able to call the kick, when I try and ban on client side it just ends up being a kick that SAYS your banned.

Is there even a possible way to go about this?

--[[
	Welcome to TAC: Tactical Anti Cheat
	First of all, all bans with TAC are perm and cannot be appealed. However, if we replace data stores,
	or do a ban wipe, all banned players will have another chance.
	
	At the moment, TAC only covers server sided changes, which means that most speed hacks will
	fly under the radar at the moment, this will change very soon.
	
	If there is a folder named: TAC: Local then please move that to starter player scripts.
	
	TAC: Server bans only happen when someone has a backdoor, and edits their character directly.
]]--

local functions = require(script.Parent.functions)
local speedlimit = 30
local normalspeed = 16
game.Players.PlayerAdded:Connect(function(player)
	wait(3)
	if player.TACBan.Value == true then
		functions.Banned(player)
	end
	print("TAC (Server): Loaded.")
	local char = workspace:FindFirstChild(player.Name)
	while 1+1==2 do
		wait(15)
		if char.Humanoid.WalkSpeed <= normalspeed then
			print("TAC (Server): Player " .. player.Name .. " has normal speeds.")
		elseif char.Humanoid.WalkSpeed >= speedlimit then
			functions.BanInduction(player)
			print("TAC (Server): Banned player " .. player.Name .. " due to high speeds.")
		end
	end
end)

2 comments

0

Show us the module scripts as well.

0

People can bypass this by simply setting the script's parent to nil

3 answers

✓ Accepted answer

Client is very soft on security, but if that doesn't change your mind, you can use a remote event to ban someone.

There is no easy way to go about this. Anything done on the client can and always be modified because it is the person’s machine. They can hijack, modify, and mess with a lot of stuff.

Therefore, nothing can be trusted on the client. They can bypass client sided anti exploits easily because, again, it is their machine and it is local code.

See: https://devforum.roblox.com/t/exploiting-explained/170977

None of these answers really explain this well, so I went about fixing this myself, and got a solution.

When the client modifies any value that is stated in a table, it fires an event stored in TAC with a random and terrible name being generated every time there is a new server, it has a new name so it isn't easily referenced. The remote is received on a server sided script with no Args visible to a Remote Spy.

With this solution, I have managed to prevent any speed, fly, and noclip hack. (of the ones I have tested of course).

It protected against: Infinite Yield (Synapse X), Remote Spy (Synapse X), and was even able to keep the player from simply changing their speed.

But, this can easily be reversed if the client uses DEX.

~DetectiveRaie

[Topic Closed.]

This discussion is preserved as it was. New answers, comments, and votes are closed.