Войти или зарегистрироваться
Выберите удобный способ — аккаунт создастся автоматически.
Или войдите по логину и паролю
 |
|

24.01.2021, 13:19
|
|
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами:
4272230
Репутация:
183
|
|
Сообщение от Dark_Knight
Могу тебе кинуть пример хука на urmem DoBulletImpact. По логике вещей должен код работать, но 100 процентной гарантии не даю ибо пишу не со своего компа и пишу без компилятора. Скажу сам, я сам до сих пор не особо в хуках разбираюсь.
C++:
Код:
#include "urmem.hpp"
urmem
::
hook hook
;
//Определение обьекта нашего хука(вроде правильно сказал по терминологии)
//Определяем тело нашей функции куда мы хотим чтобы шли данные с хука
void
DoBulletImpact
(
void
*
_this
,
CEntity
*
owner
,
CEntity
*
victim
,
CVector
*
startPoint
,
CVector
*
endPoint
,
CColPoint
*
colPoint
,
int
arg5
)
{
hook
.
call
(
_this
,
owner
,
victim
,
startPoint
,
endPoint
,
colPoint
,
arg5
)
;
//Вызываем оригинальную функцию.
}
//В иницилизацию плагина
hook
.
install
(
0x73B550
,
urmem
::
get_func_addr
(
&
DoBulletImpact
)
)
;
//Первый параметр метода - это куда мы ставим хук.
//Второй - это адресс нашего метода или функции. Если это метод класса, то он должен быть статичным.
//В выгрызку плагина
hook
.
disable
(
)
;
Ссылка на urmem
Ссылка на опредление метода DoBulletImpact и его адресс
Скажу от себя еще. Этой либой я лично не ставил хуки на thiscall и все делал исключительно на свой глаз и код может быть не рабочим.
Вторым аргументом будет void* edx
Сообщение от Ya Zaregalsya
— Как обжарить хлеб в тостере?
— Покупаешь хлеб и жаришь. Сварочный аппарат в помощь.
Исходник - Гайд - Мини-гайд по хукам. [Теория + Практика]
Всем привет. В последнее время я стал замечать, что абсолютное большинство использует всякие готовые библиотеки для хуков, и даже не заморачиваются о строении функций, типах хуков и прочим. Как таковых гайдов очень мало, а если и есть - на английском языке. В этой теме я расскажу обо всем просто...
www.blast.hk
|
|
|

24.01.2021, 13:36
|
|
Постоянный
Регистрация: 29.05.2017
Сообщений: 394
С нами:
4714653
Репутация:
98
|
|
Сообщение от Dark_Knight
Могу тебе кинуть пример хука на urmem DoBulletImpact. По логике вещей должен код работать, но 100 процентной гарантии не даю ибо пишу не со своего компа и пишу без компилятора. Скажу сам, я сам до сих пор не особо в хуках разбираюсь.
C++:
Код:
#include "urmem.hpp"
urmem
::
hook hook
;
//Определение обьекта нашего хука(вроде правильно сказал по терминологии)
//Определяем тело нашей функции куда мы хотим чтобы шли данные с хука
void
DoBulletImpact
(
void
*
_this
,
CEntity
*
owner
,
CEntity
*
victim
,
CVector
*
startPoint
,
CVector
*
endPoint
,
CColPoint
*
colPoint
,
int
arg5
)
{
hook
.
call
(
_this
,
owner
,
victim
,
startPoint
,
endPoint
,
colPoint
,
arg5
)
;
//Вызываем оригинальную функцию.
}
//В иницилизацию плагина
hook
.
install
(
0x73B550
,
urmem
::
get_func_addr
(
&
DoBulletImpact
)
)
;
//Первый параметр метода - это куда мы ставим хук.
//Второй - это адресс нашего метода или функции. Если это метод класса, то он должен быть статичным.
//В выгрызку плагина
hook
.
disable
(
)
;
Ссылка на urmem
Ссылка на опредление метода DoBulletImpact и его адресс
Скажу от себя еще. Этой либой я лично не ставил хуки на thiscall и все делал исключительно на свой глаз и код может быть не рабочим.
Жалуется на неправильные аргументы в 5-6 строчках. В шаблоне типов больше, чем аргументов в сигнатуре функции.
|
|
|

24.01.2021, 13:42
|
|
Постоянный
Регистрация: 29.05.2017
Сообщений: 394
С нами:
4714653
Репутация:
98
|
|
Сообщение от Musaigen
Вторым аргументом будет void* edx
Исходник - Гайд - Мини-гайд по хукам. [Теория + Практика]
Всем привет. В последнее время я стал замечать, что абсолютное большинство использует всякие готовые библиотеки для хуков, и даже не заморачиваются о строении функций, типах хуков и прочим. Как таковых гайдов очень мало, а если и есть - на английском языке. В этой теме я расскажу обо всем просто...
www.blast.hk
Спасибо за ссылку! Правильно ли я понимаю, что функции из библиотеки SF и PSDK (в частности DoBulletImpact()) использует не только программист, но и игра? Т.е. этот хук действительно будет срабатывать на игровые события или только если эта функция будет вызвана из плагина?
|
|
|

24.01.2021, 13:54
|
|
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами:
6921957
Репутация:
183
|
|
Сообщение от Ya Zaregalsya
Жалуется на неправильные аргументы в 5-6 строчках. В шаблоне типов больше, чем аргументов в сигнатуре функции.
Вечером попробую разобратся. Как говорил писал методом научного тыка.
|
|
|

24.01.2021, 14:06
|
|
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами:
4272230
Репутация:
183
|
|
Сообщение от Ya Zaregalsya
Т.е. этот хук действительно будет срабатывать на игровые события или только если эта функция будет вызвана из плагина?
Будет, но нужно будет вызвать функцию, которая была до тебя, для того, чтобы не сломать цепочку вызовов.
Сообщение от Ya Zaregalsya
Жалуется на неправильные аргументы в 5-6 строчках. В шаблоне типов больше, чем аргументов в сигнатуре функции.
C++:
Код:
void
DoBulletImpact
(
void
*
_this
,
void
*
edx
,
CEntity
*
owner
,
CEntity
*
victim
,
CVector
*
startPoint
,
CVector
*
endPoint
,
CColPoint
*
colPoint
,
int
arg5
)
{
/* Твой код */
// вызов той функции, что была до нас, DoBulletImpact ничего не возвращает, поэтому указываем только соглашение о вызове __thiscall
hook
.
call
(
_this
,
owner
,
victim
,
startPoint
,
endPoint
,
colPoint
,
arg5
)
;
}
|
|
|

24.01.2021, 14:08
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от Ya Zaregalsya
Спасибо за ссылку! Правильно ли я понимаю, что функции из библиотеки SF и PSDK (в частности DoBulletImpact()) использует не только программист, но и игра? Т.е. этот хук действительно будет срабатывать на игровые события или только если эта функция будет вызвана из плагина?
у меня на гитхабе в BulletTracer есть хук этой функции
kin4stat - Overview
20 y.o. student  . kin4stat has 55 repositories available. Follow their code on GitHub.
github.com
|
|
|

31.03.2021, 15:08
|
|
Постоянный
Регистрация: 29.05.2017
Сообщений: 394
С нами:
4714653
Репутация:
98
|
|
Сообщение от Dark_Knight
Могу тебе кинуть пример хука на urmem DoBulletImpact. По логике вещей должен код работать, но 100 процентной гарантии не даю ибо пишу не со своего компа и пишу без компилятора. Скажу сам, я сам до сих пор не особо в хуках разбираюсь.
C++:
Код:
#include "urmem.hpp"
urmem
::
hook hook
;
//Определение обьекта нашего хука(вроде правильно сказал по терминологии)
//Определяем тело нашей функции куда мы хотим чтобы шли данные с хука
void
DoBulletImpact
(
void
*
_this
,
CEntity
*
owner
,
CEntity
*
victim
,
CVector
*
startPoint
,
CVector
*
endPoint
,
CColPoint
*
colPoint
,
int
arg5
)
{
hook
.
call
(
_this
,
owner
,
victim
,
startPoint
,
endPoint
,
colPoint
,
arg5
)
;
//Вызываем оригинальную функцию.
}
//В иницилизацию плагина
hook
.
install
(
0x73B550
,
urmem
::
get_func_addr
(
&
DoBulletImpact
)
)
;
//Первый параметр метода - это куда мы ставим хук.
//Второй - это адресс нашего метода или функции. Если это метод класса, то он должен быть статичным.
//В выгрызку плагина
hook
.
disable
(
)
;
Ссылка на urmem
Ссылка на опредление метода DoBulletImpact и его адресс
Скажу от себя еще. Этой либой я лично не ставил хуки на thiscall и все делал исключительно на свой глаз и код может быть не рабочим.
В прошлый раз ни с одним методом так ничего и не получилось, сейчас решил попробовать снова для решения этой проблемы. Вот новый код:
C++:
Код:
//Убран код с подключением библиотек и mainloop().
urmem
::
hook urmemHook
;
void
UpdateAimingCoors
(
void
*
_this
,
void
*
edx
,
CVector
const
*
AimingTargetCoors
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"UpdateAimingCoors"
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"UpdateAimingCoors. posX: %f; posY: %f; posZ: %f"
,
AimingTargetCoors
->
fX
,
AimingTargetCoors
->
fY
,
AimingTargetCoors
->
fZ
)
;
urmemHook
.
call
(
_this
,
AimingTargetCoors
)
;
}
void
DoBulletImpact
(
void
*
_this
,
void
*
edx
,
CEntity
*
owner
,
CEntity
*
victim
,
CVector
*
startPoint
,
CVector
*
endPoint
,
CColPoint
*
colPoint
,
int
arg5
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"DoBulletImpact"
)
;
urmemHook
.
call
(
_this
,
owner
,
victim
,
startPoint
,
endPoint
,
colPoint
,
arg5
)
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
switch
(
dwReasonForCall
)
{
case
DLL_PROCESS_ATTACH
:
SF
->
initPlugin
(
mainloop
,
hModule
)
;
urmemHook
.
install
(
0x50CB10
,
urmem
::
get_func_addr
(
&
UpdateAimingCoors
)
)
;
urmemHook
.
install
(
0x73B550
,
urmem
::
get_func_addr
(
&
DoBulletImpact
)
)
;
break
;
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
urmemHook
.
disable
(
)
;
break
;
}
return
TRUE
;
}
При каждом вызове перехватываемой функции должно отправляться сообщение в чат. В итоге игра запускается, другие функции (не хуки) из этого плагина работают, но сообщений в чате нет. Что я делаю неправильно?
|
|
|

31.03.2021, 15:11
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от Ya Zaregalsya
Что я делаю неправильно?
Как минимум у самой функции хука DoBulletImpact должно быть соглашение о вызове __fastcall (если msvc, на mingw __thiscall)
|
|
|

31.03.2021, 15:21
|
|
Постоянный
Регистрация: 29.05.2017
Сообщений: 394
С нами:
4714653
Репутация:
98
|
|
Сообщение от KiN4StAt
Как минимум у самой функции хука DoBulletImpact должно быть соглашение о вызове __fastcall (если msvc, на mingw __thiscall)
Добавление __fastcall ничего не изменило, на __thiscall жалуется VS.
|
|
|

31.03.2021, 15:29
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от Ya Zaregalsya
Добавление __fastcall ничего не изменило, на __thiscall жалуется VS.
urmem не пользовался, сказать не могу
__fastcall на обе функции нужен
|
|
|
|
 |
|
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|