Тема: RakSAMP Lite
Показать сообщение отдельно

  #1124  
Старый 04.08.2023, 07:34
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

Цитата:
Сообщение от danivjje  

если зайти на занятый никнейм/никнейм с запрещенными символами то клиент в консоль выводит Bad nickname, это отловить как-то можно?
Да, можно, если не через пакет, так через текст в консоли (сегодня посмотрю, если получится - скину код)

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
)
 
Ответить с цитированием