 |
|

25.11.2020, 16:33
|
|
Познающий
Регистрация: 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?
|
|
|

25.11.2020, 17:03
|
|
Познающий
Регистрация: 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.
|
|
|

25.11.2020, 17:13
|
|
Участник форума
Регистрация: 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
)
;
}
|
|
|

25.11.2020, 17:27
|
|
Познающий
Регистрация: 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
)
;
}
|
|
|

25.11.2020, 17:41
|
|
Участник форума
Регистрация: 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
)
;
|
|
|

25.11.2020, 18:09
|
|
Познающий
Регистрация: 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?
А, так спасибо, работает)
|
|
|

25.11.2020, 18:57
|
|
Участник форума
Регистрация: 26.06.2018
Сообщений: 166
С нами:
4149151
Репутация:
213
|
|
Сообщение от dekname
Если вы не слышали, что-то о какой либо библиотеке, например в данном случаи PolyHook, то это не значит, что библиотека говно или наоборот. 600 звезд на GitHub и на unknowncheats.me не считают, что она говно.
Дело не в том, что она плохая, а в том, что она слишком жирная для сампа.
Сообщение от dekname
Хотелось бы узнать: Почему надо хукать AddEntry, а не AddChatMessage?
Функция AddEntry добавляет сообщение в чат.
Функции AddChatMessage и AddMessage выполняют дополнительные операции и вызывают AddEntry.
|
|
|

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

25.11.2020, 21:09
|
|
Флудер
Регистрация: 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
(
)
;
}
.
|
|
|

25.11.2020, 21:23
|
|
Познающий
Регистрация: 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)
|
|
|
|