Я использую 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
, после чего эти скрипты имеют доступ друг к другу.