- 661
- 700
LuaJIT Script Injector
Вставка одного скомпилированного скрипта в другой. Не путать со склейкой.
Код 1 скрипта:
Код 2 скрипта:
Выхлоп после декомпиляции: (первым был выбран 1 скрипт)
Lua:
function foo()
print(1)
end
Код 2 скрипта:
Lua:
function foo2()
print(2)
end
Выхлоп после декомпиляции: (первым был выбран 1 скрипт)
Lua:
function foo()
print(1)
end
function foo2()
print(2)
end
Суть:
Мы получаем уровень доступности, будто у нас есть исходник и мы можем делать всё, что хотим в начале кода или в конце.
(Доступ к локальным/глобальным переменным, установка новых значений, обход защит на проксирование (только если скрипт не чекает себя на хекс сумму, лол))
(Доступ к локальным/глобальным переменным, установка новых значений, обход защит на проксирование (только если скрипт не чекает себя на хекс сумму, лол))
Использование:
Первым (First file) выбираем скомпилированный скрипт, в который мы хотим вставить второй.
Вторым (Second file) выбираем *второй* скомпилированный скрипт.
В зависимости от порядка файлов, можно инжектить в начало и в конец.
Проект в бете, буду рад вашим краш логам с файлами сюда под хайд
Вторым (Second file) выбираем *второй* скомпилированный скрипт.
В зависимости от порядка файлов, можно инжектить в начало и в конец.
Проект в бете, буду рад вашим краш логам с файлами сюда под хайд
Примеры:
Получить все локальные переменные скрипта, в глобальной области:
Second file
Получить все глобальные переменные (хук):
First file
Супер простой кряк 1:
Скрипт с привязкой: First file
Наш скрипт: Second file
Так мы присвоем локальной переменной access значение true
Супер простой кряк 2:
Наш скрипт: First file
Скрипт с привязкой: Second file
Пример изменения upvalue: (я не придумал демонстрацию с привязкой)
First file
Наш скрипт: Second file
Second file
Lua:
local i = 1
while true do
local name, value = debug.getlocal(1, i)
if not name then break end
print('stack: ' .. i, 'name: ' .. tostring(name), 'value: ' .. tostring(value))
i = i + 1
end
Получить все глобальные переменные (хук):
First file
Lua:
setmetatable(_G, {
__newindex = function (self, index, value)
rawset(self, index, value)
print('name: ' .. tostring(name), 'value: ' .. tostring(value))
end
})
Супер простой кряк 1:
Скрипт с привязкой: First file
Lua:
function getHWD()
return 'random hwd'
end
local access = getHWD() == 'acces hwd'
function main()
if access then
print('access is allowed')
else
print('access denied')
end
end
Наш скрипт: Second file
Lua:
debug.setlocal(1, 1, true)
Супер простой кряк 2:
Наш скрипт: First file
Lua:
setmetatable(_G, {
__newindex = function (self, index, value)
if index == 'getHWD' then
value = function () return 'acces hwd' end
end
rawset(self, index, value)
end
})
Скрипт с привязкой: Second file
Lua:
function getHWD()
return 'random hwd'
end
local access = getHWD() == 'acces hwd'
function main()
if access then
print('access is allowed')
else
print('access denied')
end
end
Пример изменения upvalue: (я не придумал демонстрацию с привязкой)
First file
Lua:
local urlOne = 'localhost:80'
function main()
local response = sendRequest(urlOne)
print(response) -- возвращает localhost:80
end
function sendRequest(url)
return urlOne
end
Наш скрипт: Second file
Lua:
debug.setupvalue(sendRequest, 1, 'value')
-- теперь вернет value, а не 'localhost:80'