Grip checker
What is a grip checker? A grip checker checks when the grip of a tool is changed and then does stuff on it. Most games that use the regular tool system and not a custom one have a similar check to this to prevent exploiters from having an unfair advantage.
However this is easy to bypass since it's handles the GetPropertyChangedSignal on the client so we can use getconnections to bypass / disable this check. (This will work for most games, but some have e.g a heartbeat running which checks it, which also easy to bypass but I won't get into in this post)
A example of how a detection script could look like is this (this is from da hood)
Parent:GetPropertyChangedSignal("Grip"):Connect(function()
game.ReplicatedStorage:WaitForChild("MainEvent"):FireServer("CHECKER_4")
end)
Now CHECKER_4 is a ban remote from da hood. But as I said we can easily get around this using getconnections. Since we know it's adding the GetPropertyChangedSignal connection to the tool so we can just do
local connections = getconnections(tool:GetPropertyChangedSignal("Grip"))
table.foreach(connections,function(_,connection)
connection:Disable()
end)
But what if the game for some reason has a handshake test to this connection?
Well we can use debug.getconstants and debug.setconstant from the function of the connection to change the CHECKER_4 to a innocent remote. Since we know that CHECKER_4 is a constant we know that we can change that constant.
A example script would look like this
local Connections = getconnections(Tool:GetPropertyChangedSignal("Grip"))
table.foreach(Connections,function(_,connection)
local func = connection.Function
-- checking if the function is not nil and if it's not a C closure
-- since we can't change the constant of a C closure
if func ~= nil and not iscclosure(func) then
local constants = debug.getconstants(func)
for index, constant in pairs(constants) do
-- checking if the constant is CHECKER_4
if constant == "CHECKER_4" then
-- setting the constant index of CHECKER_4 to a random remote
debug.setconstant(func,index,"RandomRemote")
break -- breaking out of the loop since we know that the constant only occurs once
end
end
end
end)
Last updated