ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   hook char (https://forum.antichat.xyz/showthread.php?t=1375338)

legendabrn 08.01.2021 14:44

https://forum.antichat.xyz/attachments/27643469/

https://forum.antichat.xyz/attachments/27643469/

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
)
;
}
;



в чат выводит пробел, как правильно хукать ?

#Rin 08.01.2021 15:08

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
)
;
}



Важно чтобы строка оставалась в памяти, то есть твой плагин не должен быть выгружен, иначе выделяй память и копируй строку туда.

legendabrn 08.01.2021 15:27

Цитата:

Сообщение от 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);


#Rin 08.01.2021 15:40

Копируя свою строку по адресу расположения оригинальной строки, ты можешь задеть и соседние данные если твоя строка длиннее изначальной.

Поэтому либо копируешь туда свою строку с аналогичной длинной, а если меньше то убедится что после последнего символа будет ноль.

Либо заменяешь адреса у всех инструкций обращающих к этой строке на свою.

legendabrn 08.01.2021 15:49

Цитата:

Сообщение от Rinat_Namazov

Копируя свою строку по адресу расположения оригинальной строки, ты можешь задеть и соседние данные если твоя строка длиннее изначальной.
Поэтому либо копируешь туда свою строку с аналогичной длинной, а если меньше то убедится что после последнего символа будет ноль.
Либо заменяешь адреса у всех инструкций обращающих к этой строке на свою.

А если хукнуть функцию чата, и сделать проверку на соответствующий текст, а после вызвать прототип, то не будет затрагивать соседние строчки?

#Rin 08.01.2021 15:51

Можно сделать так, но она будет заменять и фейк сообщения (если такие будут с других плагинов и скриптов). Ну и зря тратишь процессорное время.

Что ты хочешь сделать? Тот код что я написал проблем не имеет.

legendabrn 08.01.2021 15:53

Цитата:

Сообщение от Rinat_Namazov

Можно сделать так, но она будет заменять и фейк сообщения (если такие будут с других плагинов и скриптов). Ну и зря тратишь процессорное время.
Что ты хочешь сделать? Тот код что я написал проблем не имеет.

Я пробую разные методы, для повышения знаний 😀

Спасибо за помощь!


Время: 23:29