Я использую LuaJIT 2.1, и когда мне нужно скрыть исходный код, я сначала запутываю его, чтобы предотвратить декомпиляцию скрипта, а затем компилирую его.
Мы знаем, что можем перехватить любую функцию в LUA, просто переопределив ее:
local __load = load
load = function(data, ...)
-- some stuff, e.g. you can unpack the data var to a file
return __load(data, ...)
end
И если кто-то соединит мой скрипт со своим (например, выше), он сможет буквально перехватить любую встроенную и глобальную функцию в моем скрипте, а также получить доступ к глобальным переменным и функциям, которые я определил сам (поэтому я всегда определяю все функции и переменные как локальные).
Итак, вопрос в том, как я могу вызвать их исходные функции или, по крайней мере, восстановить их исходные фрагменты. Если это вообще возможно.
Возможные ответы, которые не помогут:
_G['function_name']
содержит адрес новой функции.- Проверка функций с помощью
pcall(string.dump, function_name)
— это хорошо, но и ее можно зацепить.
Если ты чего-то не понимаешь, я сказал:
- под "объединением скриптов" я подразумеваю объединение их друг с другом с помощью
load
илиloadstring
, после чего эти скрипты имеют доступ друг к другу.