Today we will be releasing a very powerful lua hook detection for anti cheats. This detection can be used to detect any sort of lua function hooks, including instance metamethods.
Exploits can be detected on inject from this if they have a lua init script that hooks the game metamethods on inject. Many competent exploits may be safe from the on-inject detection, but this can still
prevent people from creating their own lua hooks for __index. Now you can have a good client anti cheat that checks humanoid walkspeed.
The method itself has to do with how the Lua stack works. We’ve all heard or had to deal with so-called “stack overflow” errors; they usually happen when we try to run an unconditional recursive function - simply put, Luau cannot handle more things onto the stack, and therefore it errors to prevent further issues. Exploits have historically been susceptible to metamethod hook detection vectors that involve checking the call stack for irregularities in one way or another. This approach is no different - it abuses a very niche aspect of the Luau engine in order to detect __index hooking. All lua hooks are detected by this.
If you are planning on using this, make sure you paste it in the top function scope of your script and don’t modify anything but the punishment behavior in the placeholder as the technique is very sensitive to even the slightest of change!
We wish you an exploit-free New Year!
BTW, This method has existed since exploits introduced hookfunction and game metatable hooking. No idea why some other developer did not discover this first.
-- Made by Fate local AntiHook = function(Func) if (Func) then local Check; Check = function(int) if int < 16379 then Check(int + 1); else Func(workspace,"Name"); end end local a, b = pcall(Check, 1); return not a and b:find('stack overflow') else return true end end local LocalPlayer = game.Players.LocalPlayer local Index; while wait(.1) do xpcall(function() return game["AAAAAAA"] end, function() Index = debug.info(2, "f"); end) if (AntiHook(Index)) then LocalPlayer:Kick("Exploit"); break; end end