 |

08.01.2021, 14:44
|
|
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами:
3781678
Репутация:
113
|
|
C++:
Код:
namespace
{
const
auto
HOOK_ADDR
=
0x8A76
;
const
auto
HOOK_LEN
=
1
;
auto
__cdecl
name_hook
(
)
{
const
char
aServerClosedTh
[
]
=
"Closed"
;
return
aServerClosedTh
;
}
;
}
void
installHook
(
)
{
auto
samp
=
(
DWORD
)
GetModuleHandleA
(
"samp"
)
;
auto
relative_addr
=
(
DWORD
)
&
name_hook
-
(
samp
+
HOOK_ADDR
+
HOOK_LEN
)
;
DWORD vp
;
VirtualProtect
(
(
void
*
)
(
samp
+
HOOK_ADDR
)
,
HOOK_LEN
,
PAGE_EXECUTE_READWRITE
,
&
vp
)
;
*
(
DWORD
*
)
(
samp
+
HOOK_ADDR
+
1
)
=
relative_addr
;
VirtualProtect
(
(
void
*
)
(
samp
+
HOOK_ADDR
)
,
HOOK_LEN
,
vp
,
&
vp
)
;
}
;
в чат выводит пробел, как правильно хукать ?
|
|
|

08.01.2021, 15:08
|
|
Познавший АНТИЧАТ
Регистрация: 09.08.2015
Сообщений: 1,213
С нами:
5663255
Репутация:
183
|
|
C++:
Код:
uintptr_t sampModule
=
reinterpret_cast
(
GetModuleHandle
(
"samp.dll"
)
)
;
if
(
sampModule
!=
0
)
{
char
*
str
=
"Oh yes, server closed the connection."
;
void
*
address
=
reinterpret_cast
(
sampModule
+
0x8A76
+
1
)
;
DWORD vp
;
VirtualProtect
(
address
,
sizeof
(
str
)
,
PAGE_EXECUTE_READWRITE
,
&
vp
)
;
*
reinterpret_cast
(
address
)
=
str
;
VirtualProtect
(
address
,
sizeof
(
str
)
,
vp
,
&
vp
)
;
}
Важно чтобы строка оставалась в памяти, то есть твой плагин не должен быть выгружен, иначе выделяй память и копируй строку туда.
|
|
|

08.01.2021, 15:27
|
|
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами:
3781678
Репутация:
113
|
|
Сообщение от Rinat_Namazov
C++:
Код:
uintptr_t sampModule
=
reinterpret_cast
(
GetModuleHandle
(
"samp.dll"
)
)
;
if
(
sampModule
!=
0
)
{
char
*
str
=
"Oh yes, server closed the connection."
;
void
*
address
=
reinterpret_cast
(
sampModule
+
0x8A76
+
1
)
;
DWORD vp
;
VirtualProtect
(
address
,
sizeof
(
str
)
,
PAGE_EXECUTE_READWRITE
,
&
vp
)
;
*
reinterpret_cast
(
address
)
=
str
;
VirtualProtect
(
address
,
sizeof
(
str
)
,
vp
,
&
vp
)
;
}
Важно чтобы строка оставалась в памяти, то есть твой плагин не должен быть выгружен, иначе выделяй память и копируй строку туда.
Спасибо! Почему когда я меняю таким образом, то при превышение лимита символов, затрагивается другой текст?
Код:
Код:
DWORD dwProtect = PAGE_EXECUTE_READWRITE;
VirtualProtect(reinterpret_cast((DWORD)GetModuleHandle("samp.dll") + 0x8A76), 100, dwProtect, &dwProtect);
strcpy(reinterpret_cast((DWORD)GetModuleHandle("samp.dll") + 0x8A76), "Test123Test123Test123Test123Test123");
VirtualProtect(reinterpret_cast((DWORD)GetModuleHandle("samp.dll") + 0x8A76), 100, dwProtect, nullptr);
|
|
|

08.01.2021, 15:40
|
|
Познавший АНТИЧАТ
Регистрация: 09.08.2015
Сообщений: 1,213
С нами:
5663255
Репутация:
183
|
|
Копируя свою строку по адресу расположения оригинальной строки, ты можешь задеть и соседние данные если твоя строка длиннее изначальной.
Поэтому либо копируешь туда свою строку с аналогичной длинной, а если меньше то убедится что после последнего символа будет ноль.
Либо заменяешь адреса у всех инструкций обращающих к этой строке на свою.
|
|
|

08.01.2021, 15:49
|
|
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами:
3781678
Репутация:
113
|
|
Сообщение от Rinat_Namazov
Копируя свою строку по адресу расположения оригинальной строки, ты можешь задеть и соседние данные если твоя строка длиннее изначальной.
Поэтому либо копируешь туда свою строку с аналогичной длинной, а если меньше то убедится что после последнего символа будет ноль.
Либо заменяешь адреса у всех инструкций обращающих к этой строке на свою.
А если хукнуть функцию чата, и сделать проверку на соответствующий текст, а после вызвать прототип, то не будет затрагивать соседние строчки?
|
|
|

08.01.2021, 15:51
|
|
Познавший АНТИЧАТ
Регистрация: 09.08.2015
Сообщений: 1,213
С нами:
5663255
Репутация:
183
|
|
Можно сделать так, но она будет заменять и фейк сообщения (если такие будут с других плагинов и скриптов). Ну и зря тратишь процессорное время.
Что ты хочешь сделать? Тот код что я написал проблем не имеет.
|
|
|

08.01.2021, 15:53
|
|
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами:
3781678
Репутация:
113
|
|
Сообщение от Rinat_Namazov
Можно сделать так, но она будет заменять и фейк сообщения (если такие будут с других плагинов и скриптов). Ну и зря тратишь процессорное время.
Что ты хочешь сделать? Тот код что я написал проблем не имеет.
Я пробую разные методы, для повышения знаний 😀
Спасибо за помощь!
|
|
|
|
 |
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|