HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 08.01.2021, 14:44
legendabrn
Участник форума
Регистрация: 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
)
;
}
;


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

  #2  
Старый 08.01.2021, 15:08
#Rin
Познавший АНТИЧАТ
Регистрация: 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
)
;
}


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

  #3  
Старый 08.01.2021, 15:27
legendabrn
Участник форума
Регистрация: 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);
 
Ответить с цитированием

  #4  
Старый 08.01.2021, 15:40
#Rin
Познавший АНТИЧАТ
Регистрация: 09.08.2015
Сообщений: 1,213
С нами: 5663255

Репутация: 183


По умолчанию

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

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

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

  #5  
Старый 08.01.2021, 15:49
legendabrn
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами: 3781678

Репутация: 113
По умолчанию

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

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

  #6  
Старый 08.01.2021, 15:51
#Rin
Познавший АНТИЧАТ
Регистрация: 09.08.2015
Сообщений: 1,213
С нами: 5663255

Репутация: 183


По умолчанию

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

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

  #7  
Старый 08.01.2021, 15:53
legendabrn
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами: 3781678

Репутация: 113
По умолчанию

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

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

Спасибо за помощь!
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.