FireServer changed? What does it mean?

Currently, while I was browsing some Community Tutorials (yes, I sometimes read old topic), I came across this topic:

It states in the topic and the post that the FireServer can be… changed??? In which I got confused about it. I tried to research but I can’t tell which keyword I would search. Even though this topic is very old, I still want to know how a function can be changed.

Main question: what does it mean when a function is changed??

Thank you for those who will help me! :heart:

That just means exploiters do something like

hookfunction(Instance.new("RemoteEvent").FireServer, function(remote, ...)
    -- something
end)

to replace the :FireServer method with their own so they can see the arguments being passed over for a remote spy.

However they can also just overwrite the __namecall metamethod of the Instance metatable and check when :FireServer specifically is used and log the arguments that way.

I kinda get it, but how does making FireServer variable be (I said be as it is not a foolproof antiexploit) a solution to the problem?

Because the “original” function is cached in a variable. Then the developer constantly checks if remote_event.FireServer == cached_fire_server. If it isn’t then it has been overwritten by an exploiter.

Either way it isn’t a foolproof anti-exploit measure since the exploiter can just kill the anti-cheat script.