Я предполагаю, что этот код работает на компьютере эксплуататора / мошенников.По сути, нет способа гарантировать безопасность клиентского кода.Ваши чеки могут быть удалены, а ваши чеки могут быть удалены.Даже сам бинарный файл Lua можно изменить внутри, а getfenv можно изменить, чтобы он делал что-либо в дополнение к тому, что он делает.Реализация строгой границы между логикой сервера и клиента является единственным верным способом защиты приложений.
В этом случае возможна одна атака, если клиент запускает Lua-код в том же lua_State до установки func_table.В этом случае они могут оказаться в изолированной программной среде, как вам показала моя реализация в изолированной программной среде lua здесь .
Еще одна атака - использование метаметодов, чтобы func_table.getfenv()[i] ~= v
вернул true.Это можно обнаружить с помощью rawequal, проверки типа func_table.getfenv()[i]
или использования исходных функций в качестве ключей в таблице истинных значений и проверки, является ли таблица с ключом func_table.getfenv()[i]
истинной.
Еще однаАтака будет редактировать как глобальное состояние, так и вашу таблицу.При изменении адреса функции обычно изменяют ВСЕ ссылки на этот адрес в ОЗУ, что включает внутреннюю ссылку в вашей таблице.
Поскольку вы используете wait()
Я предполагаю, что вы работаетеэтот код в Roblox.В этом случае, как я подчеркивал на их форумах разработчиков, параметр experimental mode
(ранее filtering enabled
) - это единственный способ защитить вашу игру от эксплуататоров.Это мешает клиентам редактировать игру большую часть времени.Они по-прежнему имеют полный контроль над положением своего персонажа, пара других типов экземпляров (как, я полагаю, шляпы), могут попросить сервер внести изменения через экземпляры RemoteEvent и RemoteFunction и взломать стену (установить прозрачность стены) (чтобы противостоять этому, отправлять толькоклиентские части, которые он может видеть).