Clientside Anti-Tamper Solution using a Car

I moved the code away from random:NextNumber() and used my own psuedo-random generator earlier in the thread and updated the code. :+1:

  1. Exploits aren’t really around anymore due to being all patched and the ones that are “working” I can assure you are detected entirely.
  2. Internal based cheats have the ability to call/modify the randNew function however they please so bear that in mind
  3. Any new cheats that are released will be detected or shutdown entirely within a month at the minimum

While I’m sure they are detected and patched quickly, there are still a lot of exploiters appearing in my game. Admittedly, there’s a fair amount less of them but I think saying they are “not really around anymore” is a little too far for now.

Maybe that’s just the players of my game though, but who knows.

OP did mention that this code should be obfuscated so this shouldn’t be much of a problem.

1 Like

LOL, IB2 is known for having the easiest constant dumping method:

local old = table.concat
setreadonly(table, false)
table.concat = function(...)
     local ret = old(...)
     print(ret)
     return ret
end
setreadonly(table, true)

Also, other obfuscators may be secure from deobfuscating but NOT from their functions being hooked and constant dumping. With a constant dump, it is easy to reconstruct the original script. Obfuscating is generally not worth it, as exploiters have other ways to get the “original” source code.

This again, can be bypassed fairly easily by an exploiter. If they have any experience, checking the gc (garbage collection) is an easy way to get this script.

local randNew
for i,v in getgc() do
     if type(v) == "function" and islclosure(v) and debug.getinfo(v, "n").name == "randNew" then
          randNew = v
          break
     end
end
print(randNew)

Even if the function name was changed, there are exploit functions like getfunctionhash() that can provide a hash of the functions, leading them to find your function based on its bytecode.

Unfortunately there is really nothing you can do that can stop looping through gc with certain parameters, and another way they can find this function is by inspecting the function that fires the remote event. Following down the chain will lead to your randNew function as it’s an upvalue.

Many high-end obfuscaters encrypt constants and adds checks against tampering on run-time.

image

Even obfucated, obfuscators can only protect their own physical code, not the gc or memory. So, my getgc implementation would still work and I would not even need to touch the obfuscated code. Plus, there is currently a constant dumper available working for Moonsec V3. Please don’t let their buzzwords think your code is truly 100% safe.

local randNew = filtergc("function", {Name = "randNew", StartLine = 10}, true)

pwned (filtergc doesn’t even exist on the consumer exploit market yet so it doesn’t matter)

moonsec v3 isnt good, max security, constant protection, anti tamper wont do anything for you, sorry. its easily deobfable too

just realized it was days not minutes mb

you can still hook the randNew function