Run it
Copy the script and paste it into your executor.
const Module = {
HookedFunctions = {},
UnhookedSpoof = {},
ExeClosureSpoof = {},
MetaHooks = {},
UserHooks = {}
}
const CloneFunc = (clonefunction)
const Hookfunc = ()
const MakeCFunc = ()
const IsCClosure = (iscclosure)
const Unpack = ()
const IsHooked = (isfunctionhooked)
const RestoreFunc = (restorefunction)
const IsExeClosure = (isexecutorclosure)
const GetRawMetatable = ()
const GetNameCallMethod = (getnamecallmethod)
const Clear = (.clear)
const Maxn = (.maxn)
const GlobalENV = ()
self = (Module)
closure = (...any) -> ...any
@native Module.(self: self, Args, Length: number?)
(Args, , Length (Args))
Module.(self: self, Func: closure)
const HookedFunctions = self.HookedFunctions
const Unhooked = HookedFunctions[Func]
Unhooked
()
()
Module.HookFunction<closure>(self: self, HardArgs: boolean?, Func: closure, NewFunc: closure?)
Func
const UserHooks = self.UserHooks
const HookedFunctions = self.HookedFunctions
const Cloned = (Func)
const Callback = (...)
const Userhook = UserHooks[Func]
NewFunc
HardArgs
(...)
const Responce = {(...)}
#Responce >
self:(Responce)
Userhook
(...)
(...)
const Old = (Func, (Callback))
HookedFunctions[Func] = Old
Old
Module.HookMetaMethod<closure>(self: self, Method: , Callback: closure): closure
const Func = ()[Method]
self:(, Func, Callback)
Module.(self: self, Object: , Method: , HardArgs: boolean, Callback: closure)
Methods = self.MetaHooks[Object]
const Success, Function = (()
Object[Method]
)
Success
Methods
Methods = {}
self.MetaHooks[Object] = Methods
const Wrapped = (Callback)
Methods[Method] = ((...)
(, ...)
)
self:(HardArgs, Function, ((...)
(, ...)
))
Module.(self: self, Func: closure)
self:(, Func)
Module.(self: self, Func: closure): boolean
self.HookedFunctions[Func] ~=
Module.(self: self, Func: closure)
self.UnhookedSpoof[Func] =
Module.(self: self, Func: closure)
self.ExeClosureSpoof[Func] =
Module.(self: self, Names: { }, Func: closure)
_, Name Names
const OriginalFunc = GlobalENV[Name]
OriginalFunc
self:(OriginalFunc)
const Closure = ((Func))
(OriginalFunc)
self:(Closure)
GlobalENV[Name] = Closure
(Names)
Module:({, , }, (Func: closure)
const HookProtected = Module:(Func)
HookProtected
(Func)
const New = @native (...)
(...)
(Func)
(New)
New
)
Module:({, }, (Func: closure, Hook)
HookProtected = Module:(Func)
HookProtected
(Func, Hook)
Module.UserHooks[Func] = Hook
FakeUnhooked = (Func)
Module:(FakeUnhooked)
FakeUnhooked
)
Module:({}, (Func: closure)
Module.UserHooks[Func]
Module.UnhookedSpoof[Func]
const HookProtected = Module:(Func)
HookProtected
(Func)
)
Module:({, }, (Func: closure)
const UserHook = Module.UserHooks[Func]
UserHook
(UserHook)
Module.UserHooks[Func] =
const HookProtected = Module:(Func)
HookProtected
(Func)
)
Module:({}, (Func: closure)
const Spoof = Module.ExeClosureSpoof[Func]
Spoof
(Func)
)
Module:(, (self: , ...)
const Method = ()
const Methods = Module.MetaHooks[self]
const Func = Methods Methods[Method]
Func
(self, ...)
)
ModuleThis doesn't protect aganist things like stack overflow checks, I don't care. I recommend you use delta, examples are provided in the script