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

  #4951  
Старый 25.11.2020, 16:33
dekname
Познающий
Регистрация: 19.11.2020
Сообщений: 44
С нами: 2885808

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

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

__thiscall функция потому что
Я попытался захукать через __fastcall (как есть методы в инете). В лог даже вывело: Connecting to xxx.xx.x.x:7777...

Но после этого крашнуло с экшешином:

Цитата:
Сообщение от Спойлер  




Код:

C++:





Код:
PLH
::
CapstoneDisassembler
dis2
(
PLH
::
Mode
::
x86
)
;
PLH
::
x86Detour
detour2
(
sampapi
::
GetAddress
(
0x64010
)
,
(
uint64_t
)
&
hk_AddChatMessage
,
&
hookAddChatMessageTramp
,
dis2
)
;
detour2
.
hook
(
)
;


Код:





Код:
void __fastcall hk_AddChatMessage(void* pCChat, const char* szPrefix, unsigned long prefixColor, const char* szText)
{
    if (pCChat == nullptr)
    {
        return;
    }
    f (hk_AddChatMessage))(pCChat, szPrefix, prefixColor, szText);
}


FnCast:

C++:





Код:
#define PH_UNUSED(a) (void)a


C++:





Код:
template

T
FnCast
(
uint64_t
fnToCast
,
T pFnCastTo
)
{
PH_UNUSED
(
pFnCastTo
)
;
return
(
T
)
fnToCast
;
}


Как правильно захучить __thiscall?
 
Ответить с цитированием

  #4952  
Старый 25.11.2020, 17:03
Gunborg Johansson
Познающий
Регистрация: 30.10.2020
Сообщений: 32
С нами: 2914352

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

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

Я попытался захукать через __fastcall (как есть методы в инете). В лог даже вывело: Connecting to xxx.xx.x.x:7777...
Но после этого крашнуло с экшешином:

Цитата:
Сообщение от Спойлер  




Код:

C++:





Код:
PLH
::
CapstoneDisassembler
dis2
(
PLH
::
Mode
::
x86
)
;
PLH
::
x86Detour
detour2
(
sampapi
::
GetAddress
(
0x64010
)
,
(
uint64_t
)
&
hk_AddChatMessage
,
&
hookAddChatMessageTramp
,
dis2
)
;
detour2
.
hook
(
)
;


Код:





Код:
void __fastcall hk_AddChatMessage(void* pCChat, const char* text, DWORD textColor)
{
    if (pCChat == nullptr)
    {
        return;
    }
    f 
T
FnCast
(
uint64_t
fnToCast
,
T pFnCastTo
)
{
PH_UNUSED
(
pFnCastTo
)
;
return
(
T
)
fnToCast
;
}


Как правильно захучить __thiscall?
They add all sorts like PolyHook libraries to the project, and they can't figure them out themselves. At least learn the hook logic.
 
Ответить с цитированием

  #4953  
Старый 25.11.2020, 17:13
redcode
Участник форума
Регистрация: 26.06.2018
Сообщений: 166
С нами: 4149151

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

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

Как правильно захучить __thiscall?
Использовать __fastcall и не терять EDX.

C++:





Код:
// прототип функции
typedef
void
(
__fastcall
*
hookedAddChatMessage_t
)
(
void
*
_this
,
DWORD EDX
,
const
char
*
text
,
DWORD color
)
;
// указатель на оригинальную функцию / трамплин
hookedAddChatMessage_t orig_AddChatMessage
;
void
__fastcall
hooked_AddChatMessage
(
void
*
_this
,
DWORD EDX
,
const
char
*
text
,
DWORD color
)
{
// любые действия
return
orig_AddChatMessage
(
_this
,
EDX
,
text
,
color
)
;
}
 
Ответить с цитированием

  #4954  
Старый 25.11.2020, 17:27
dekname
Познающий
Регистрация: 19.11.2020
Сообщений: 44
С нами: 2885808

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

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

Использовать __fastcall и не терять EDX.

C++:





Код:
// прототип функции
typedef
void
(
__fastcall
*
hookedAddChatMessage_t
)
(
void
*
_this
,
DWORD EDX
,
const
char
*
text
,
DWORD color
)
;
// указатель на оригинальную функцию / трамплин
hookedAddChatMessage_t orig_AddChatMessage
;
void
__fastcall
hooked_AddChatMessage
(
void
*
_this
,
DWORD EDX
,
const
char
*
text
,
DWORD color
)
{
// любые действия
return
orig_AddChatMessage
(
_this
,
EDX
,
text
,
color
)
;
}

С таким кодом просто крашит (в логе даже нет сообщения о коннекте):

C++:





Код:
using
AddChatMessage_t
=
void
(
__thiscall
*
)
(
void
*
pCChat
,
DWORD EDX
,
const
char
*
szPrefix
,
unsigned
long
prefixColor
,
const
char
*
szText
)
;


C++:





Код:
void
__fastcall
hk_AddChatMessage
(
void
*
pCChat
,
DWORD EDX
,
const
char
*
szPrefix
,
unsigned
long
prefixColor
,
const
char
*
szText
)
{
if
(
pCChat
==
nullptr
)
{
return
;
}
f

(
hk_AddChatMessage
)
)
(
pCChat
,
EDX
,
szPrefix
,
prefixColor
,
szText
)
;
}
 
Ответить с цитированием

  #4955  
Старый 25.11.2020, 17:41
redcode
Участник форума
Регистрация: 26.06.2018
Сообщений: 166
С нами: 4149151

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

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

С таким кодом просто крашит (в логе даже нет сообщения о коннекте):
Во первых: стоит использовать нормальную библиотеку для хуков, например: MinHook, Microsoft Detours.

Во вторых: правильный прототип функции должен выглядеть так:

C++:





Код:
using
AddEntry_t
=
void
(
__fastcall
*
)
(
void
*
_this
,
DWORD edx
,
int
nType
,
const
char
*
szText
,
const
char
*
szPrefix
,
D3DCOLOR textColor
,
D3DCOLOR prefixColor
)
;
 
Ответить с цитированием

  #4956  
Старый 25.11.2020, 18:09
dekname
Познающий
Регистрация: 19.11.2020
Сообщений: 44
С нами: 2885808

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

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

Во первых: стоит использовать нормальную библиотеку для хуков, например: MinHook, Microsoft Detours.
Если вы не слышали, что-то о какой либо библиотеке, например в данном случаи PolyHook, то это не значит, что библиотека говно или наоборот. 600 звезд на GitHub и на unknowncheats.me не считают, что она говно.

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

Во вторых: правильный прототип функции должен выглядеть так:

C++:





Код:
using
AddEntry_t
=
void
(
__fastcall
*
)
(
void
*
_this
,
DWORD edx
,
int
nType
,
const
char
*
szText
,
const
char
*
szPrefix
,
D3DCOLOR textColor
,
D3DCOLOR prefixColor
)
;

Хотелось бы узнать: Почему надо хукать AddEntry, а не AddChatMessage?

А, так спасибо, работает)
 
Ответить с цитированием

  #4957  
Старый 25.11.2020, 18:57
redcode
Участник форума
Регистрация: 26.06.2018
Сообщений: 166
С нами: 4149151

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

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

Если вы не слышали, что-то о какой либо библиотеке, например в данном случаи PolyHook, то это не значит, что библиотека говно или наоборот. 600 звезд на GitHub и на unknowncheats.me не считают, что она говно.
Дело не в том, что она плохая, а в том, что она слишком жирная для сампа.

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

Хотелось бы узнать: Почему надо хукать AddEntry, а не AddChatMessage?
Функция AddEntry добавляет сообщение в чат.

Функции AddChatMessage и AddMessage выполняют дополнительные операции и вызывают AddEntry.
 
Ответить с цитированием

  #4958  
Старый 25.11.2020, 19:38
imring
Флудер
Регистрация: 03.08.2016
Сообщений: 2,363
С нами: 5145387

Репутация: 183


По умолчанию

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

Во первых: стоит использовать нормальную библиотеку для хуков, например: MinHook, Microsoft Detours.
есть ОТЕЧЕСТВЕННЫЕ реализации хуков:

- https://github.com/allwanttokissme/Y...-hook-library/ by @BlackKnigga

- https://github.com/iammemir/microhooks by @memir (недоделаны)

- https://github.com/katursis/urmem by @urShadow
 
Ответить с цитированием

  #4959  
Старый 25.11.2020, 21:09
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

Попробуй на юрмеме так сделать, Код писал по памяти в блокноте++

C++:





Код:
#include 
#include 
#include 
using
namespace
urmem
;
hook hookChat
;
void
CALLBACK
hookFuncMessage
(
void
*
t
,
D3DCOLOR color
,
const
char
*
text
)
{
fstream
file
(
"test hook.log"
,
ios
::
binary
|
ios
::
app
/* or ios::ate // Не помню по памяти какой-то второй должен быть флаг, чтобы писало в конец файла*/
)
;
file

(
t
,
color
,
text
)
;
}
void
initFunction
(
)
{
hookChat
.
install
(
GetAddress
(
0x645A0
)
)
,
get_func_addr
(
&
hookFuncMessage
)
)
;
}
void
DeinitFunction
(
)
{
hookChat
.
disable
(
)
;
}


.
 
Ответить с цитированием

  #4960  
Старый 25.11.2020, 21:23
dekname
Познающий
Регистрация: 19.11.2020
Сообщений: 44
С нами: 2885808

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

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

Попробуй на юрмеме так сделать, Код писал по памяти в блокноте++

C++:





Код:
#include 
#include 
#include 
using
namespace
urmem
;
hook hookChat
;
void
CALLBACK
hookFuncMessage
(
void
*
t
,
D3DCOLOR color
,
const
char
*
text
)
{
fstream
file
(
"test hook.log"
,
ios
::
binary
|
ios
::
app
/* or ios::ate // Не помню по памяти какой-то второй должен быть флаг, чтобы писало в конец файла*/
)
;
file

(
t
,
color
,
text
)
;
}
void
initFunction
(
)
{
hookChat
.
install
(
GetAddress
(
0x645A0
)
)
,
get_func_addr
(
&
hookFuncMessage
)
)
;
}
void
DeinitFunction
(
)
{
hookChat
.
disable
(
)
;
}


.
Да уже все работает на PolyHook
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.