датак бесконечный бег встроен или нет? ответьте пожалуйста
Лучше не использовать, если в скрипте ничего не используется зависимости. А также там где просто так тикают и всё - можно закомментировать если считаешь лишнееПосмотреть вложение 210077
А де либу эту скачать
Скажу так, тут что бег, что усталость - надо писать самомутак бесконечный бег встроен или нет? ответьте пожалуйста
где пишешь?чо делать если пишу /mm например нихуя не происходит т.е нету диалога
ну внизу строка ввода где еще жегде пишешь?
Посмотреть вложение 210398ye
Да, можно, если не через пакет, так через текст в консоли (сегодня посмотрю, если получится - скину код)если зайти на занятый никнейм/никнейм с запрещенными символами то клиент в консоль выводит Bad nickname, это отловить как-то можно?
local ffi = require("ffi")
--HOOKS
local hook = {hooks = {}}
registerHandler("onUnload", function()
for i, hook in ipairs(hook.hooks) do
if hook.status then
hook.stop()
end
end
end)
ffi.cdef [[
int VirtualProtect(void* lpAddress, unsigned long dwSize, unsigned long flNewProtect, unsigned long* lpflOldProtect);
]]
function hook.new(cast, callback, hook_addr, size)
jit.off(callback, true) --off jit compilation | thx FYP
local size = size or 5
local new_hook = {}
local detour_addr = tonumber(ffi.cast("intptr_t", ffi.cast("void*", ffi.cast(cast, callback))))
local void_addr = ffi.cast("void*", hook_addr)
local old_prot = ffi.new("unsigned long[1]")
local org_bytes = ffi.new("uint8_t[?]", size)
ffi.copy(org_bytes, void_addr, size)
local hook_bytes = ffi.new("uint8_t[?]", size, 0x90)
hook_bytes[0] = 0xE9
ffi.cast("uint32_t*", hook_bytes + 1)[0] = detour_addr - hook_addr - 5
new_hook.call = ffi.cast(cast, hook_addr)
new_hook.status = false
local function set_status(bool)
new_hook.status = bool
ffi.C.VirtualProtect(void_addr, size, 0x40, old_prot)
ffi.copy(void_addr, bool and hook_bytes or org_bytes, size)
ffi.C.VirtualProtect(void_addr, size, old_prot[0], old_prot)
end
new_hook.stop = function() set_status(false) end
new_hook.start = function() set_status(true) end
new_hook.start()
table.insert(hook.hooks, new_hook)
return setmetatable(new_hook, {
__call = function(self, ...)
self.stop()
local res = self.call(...)
self.start()
return res
end
})
end
--HOOKS
local originalErrorClientJoin
function errorClientJoin(...)
print("errorClientJoin")
return originalErrorClientJoin(...)
end
originalErrorClientJoin = hook.new(
"void*(__cdecl*)(void*)",
errorClientJoin, 0x459550
)
А принтлог не проще?😹Да, можно, если не через пакет, так через текст в консоли (сегодня посмотрю, если получится - скину код)
upd: Вот код, хз какой пакет приходит
Lua:local ffi = require("ffi") --HOOKS local hook = {hooks = {}} registerHandler("onUnload", function() for i, hook in ipairs(hook.hooks) do if hook.status then hook.stop() end end end) ffi.cdef [[ int VirtualProtect(void* lpAddress, unsigned long dwSize, unsigned long flNewProtect, unsigned long* lpflOldProtect); ]] function hook.new(cast, callback, hook_addr, size) jit.off(callback, true) --off jit compilation | thx FYP local size = size or 5 local new_hook = {} local detour_addr = tonumber(ffi.cast("intptr_t", ffi.cast("void*", ffi.cast(cast, callback)))) local void_addr = ffi.cast("void*", hook_addr) local old_prot = ffi.new("unsigned long[1]") local org_bytes = ffi.new("uint8_t[?]", size) ffi.copy(org_bytes, void_addr, size) local hook_bytes = ffi.new("uint8_t[?]", size, 0x90) hook_bytes[0] = 0xE9 ffi.cast("uint32_t*", hook_bytes + 1)[0] = detour_addr - hook_addr - 5 new_hook.call = ffi.cast(cast, hook_addr) new_hook.status = false local function set_status(bool) new_hook.status = bool ffi.C.VirtualProtect(void_addr, size, 0x40, old_prot) ffi.copy(void_addr, bool and hook_bytes or org_bytes, size) ffi.C.VirtualProtect(void_addr, size, old_prot[0], old_prot) end new_hook.stop = function() set_status(false) end new_hook.start = function() set_status(true) end new_hook.start() table.insert(hook.hooks, new_hook) return setmetatable(new_hook, { __call = function(self, ...) self.stop() local res = self.call(...) self.start() return res end }) end --HOOKS local originalErrorClientJoin function errorClientJoin(...) print("errorClientJoin") return originalErrorClientJoin(...) end originalErrorClientJoin = hook.new( "void*(__cdecl*)(void*)", errorClientJoin, 0x459550 )
если зайти на занятый никнейм/никнейм с запрещенными символами то клиент в консоль выводит Bad nickname, это отловить как-то можно?
function onReceiveRPC(id, bs)
if id == 130 then
print('Bad nickname/online')
exit()
end
end
А нахуя? Там разве память под протекцией?Да, можно, если не через пакет, так через текст в консоли (сегодня посмотрю, если получится - скину код)
upd: Вот код, хз какой пакет приходит
Lua:local ffi = require("ffi") --HOOKS local hook = {hooks = {}} registerHandler("onUnload", function() for i, hook in ipairs(hook.hooks) do if hook.status then hook.stop() end end end) ffi.cdef [[ int VirtualProtect(void* lpAddress, unsigned long dwSize, unsigned long flNewProtect, unsigned long* lpflOldProtect); ]] function hook.new(cast, callback, hook_addr, size) jit.off(callback, true) --off jit compilation | thx FYP local size = size or 5 local new_hook = {} local detour_addr = tonumber(ffi.cast("intptr_t", ffi.cast("void*", ffi.cast(cast, callback)))) local void_addr = ffi.cast("void*", hook_addr) local old_prot = ffi.new("unsigned long[1]") local org_bytes = ffi.new("uint8_t[?]", size) ffi.copy(org_bytes, void_addr, size) local hook_bytes = ffi.new("uint8_t[?]", size, 0x90) hook_bytes[0] = 0xE9 ffi.cast("uint32_t*", hook_bytes + 1)[0] = detour_addr - hook_addr - 5 new_hook.call = ffi.cast(cast, hook_addr) new_hook.status = false local function set_status(bool) new_hook.status = bool ffi.C.VirtualProtect(void_addr, size, 0x40, old_prot) ffi.copy(void_addr, bool and hook_bytes or org_bytes, size) ffi.C.VirtualProtect(void_addr, size, old_prot[0], old_prot) end new_hook.stop = function() set_status(false) end new_hook.start = function() set_status(true) end new_hook.start() table.insert(hook.hooks, new_hook) return setmetatable(new_hook, { __call = function(self, ...) self.stop() local res = self.call(...) self.start() return res end }) end --HOOKS local originalErrorClientJoin function errorClientJoin(...) print("errorClientJoin") return originalErrorClientJoin(...) end originalErrorClientJoin = hook.new( "void*(__cdecl*)(void*)", errorClientJoin, 0x459550 )
Как любой уважаемый себя луашер, спиздил код жмп хуков и не стал особо ничего менятьА нахуя? Там разве память под протекцией?