 |
|

07.09.2021, 21:53
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
kthook
x86 библиотека для хуков с полной поддержкой функторов, лямбд с захватами и прочих
Примеры кода:
C++:
Код:
int
CFASTCALL
func1
(
float
a
,
float
b
)
{
print_info
(
a
,
b
)
;
a
=
50
;
b
=
100
;
return
5
;
}
int
main
(
)
{
// func_ptr is pointer to function
auto
func_ptr
=
&
func1
;
// func_type is int(CFASTCALL*)(float, float)
using
func_type
=
decltype
(
&
func1
)
;
// Creating simple hook object with function type is template parameter and function pointer in constructor
kthook
::
kthook_signal
hook
{
func_ptr
}
;
// Connecting lambda callback that receiving function arguments by references
hook
.
before
+=
[
]
(
const
auto
&
hook
,
float
&
a
,
float
&
b
)
{
print_info
(
a
,
b
)
;
return
true
;
}
;
/*
[operator () at 31]: a = 30; b = 20
[func1 at 16 ]: a = 30; b = 20
*/
func1
(
30.f
,
20.f
)
;
}
C++:
Код:
int
main
(
)
{
auto
func_ptr
=
&
func1
;
using
func_type
=
decltype
(
&
func1
)
;
kthook
::
kthook_simple_t
hook
{
func_ptr
}
;
hook
.
before
.
connect
(
[
]
(
const
auto
&
hook
,
float
&
a
,
float
&
b
)
{
print_info
(
a
,
b
)
;
// changing arguments
a
=
50.f
,
b
=
30.f
;
return
true
;
}
)
;
// connect after callback
hook
.
after
.
connect
(
[
]
(
const
auto
&
hook
,
int
&
return_value
,
float
&
a
,
float
&
b
)
{
print_info
(
a
,
b
)
;
print_return_value
(
return_value
)
;
// changing return_value
return_value
=
20
;
return
true
;
}
)
;
/*
[operator () at 31]: a = 30; b = 20
[func1 at 16 ]: a = 50; b = 30
[operator () at 34]: a = 50; b = 30
[operator () at 34]: return_value = 5;
[main at 20]: return_value = 20;
*/
auto
ret_val
=
func1
(
30.f
,
20.f
)
;
print_return_value
(
ret_val
)
}
Остальные примеры можно найти на гитхабе
Download & Source:
GitHub - kin4stat/kthook
Contribute to kin4stat/kthook development by creating an account on GitHub.
github.com
|
|
|

21.11.2021, 23:29
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Обновил.
Теперь есть обычные хуки, получение адреса возврата, и прочие фишки
|
|
|

21.12.2021, 03:36
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Обновил, добавил контекст, обычные хуки
Также теперь есть поддержка x64 windows, x64 linux, x86 windows
x86 linux WIP
|
|
|

14.01.2022, 01:54
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Теперь production ready.
x86 windows, x86 linux, x64 linux, x64 windows.
Остался одна недоработка на x64 windows, пофикшу в ближайшем будущем
UPD: недоработкой оказался антитампер гта 5
|
|
|

04.05.2022, 23:02
|
|
Постоянный
Регистрация: 18.03.2017
Сообщений: 410
С нами:
4818548
Репутация:
133
|
|
Сообщение от kin4stat
Остался одна недоработка на x64 windows, пофикшу в ближайшем будущем
Пофиксил?
|
|
|

15.06.2022, 23:56
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от RTD
Пофиксил?
UPD: нашел в чем трабл
антитампер ГТА5, на которой мы тестили гнобил  . В ктхуке багов не было
|
|
|

16.06.2022, 00:02
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Обновил, добавил naked(x86/x64) хуки. Документацию потом как-нибудь обновлю.
Пока представлю короткую сводку, ну и пример из тестов:
Интерфейс как у
(т.е.
,
и прочее на месте)
Тип коллбэка -
Код:
void(const kthook_naked&)
Также доступны две функции, которые можно юзать внутри хука:
и
позволяет получить мутабельный контекст, который был захвачен перед вызовом коллбэка внутри хука.
Тип возвращаемого значения -
, внутри которого лежат все регистры процессора. Можно изменять, изменения применятся после выхода из коллбэка
позволяет получить мутабельный адрес возврата, который по умолчанию выставляется на место хука + кол-во байт нужных для хука
Тип возвращаемого значения -
, который можно менять. Если изменить - после выхода из коллбэка выполнение перейдет на указанный адрес
kthook/tests/simple_test.cpp at ead0aff128ce2158875354b9173da4eeddc5b70c · kin4stat/kthook
Contribute to kin4stat/kthook development by creating an account on GitHub.
github.com
kthook/tests/simple_test.cpp at ead0aff128ce2158875354b9173da4eeddc5b70c · kin4stat/kthook
Contribute to kin4stat/kthook development by creating an account on GitHub.
github.com
|
|
|

24.06.2022, 17:40
|
|
Постоянный
Регистрация: 01.05.2021
Сообщений: 752
С нами:
2650753
Репутация:
98
|
|
Киня, вот создал ты библиотеку свою, может сделаешь уроки, как самому делать хуки? А то грустно наверное пользоваться готовым кодом.
Мысли людей скорее всего "Эххх, я вот не умею хуки создавать, пользуюсь чужим кодом(((".
И грустно для самого себя использовать чужой код, то есть понимать, что ты так не умеешь и за тебя это сделал другой человек.
|
|
|

24.06.2022, 17:47
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от Yuriy Code
Киня, вот создал ты библиотеку свою, может сделаешь уроки, как самому делать хуки? А то грустно наверное пользоваться готовым кодом.
Мысли людей скорее всего "Эххх, я вот не умею хуки создавать, пользуюсь чужим кодом(((".
И грустно для самого себя использовать чужой код, то есть понимать, что ты так не умеешь и за тебя это сделал другой человек.
На форуме конечно есть мой гайд, но когда я писал вторую его часть, я понял что бесполезно объяснять такую тему вообще, потому что тот кто понимает ассемблер - сам себе хуки забабахает, а тот кто не знает, и не поймет, че там написано ваще
|
|
|

24.06.2022, 17:49
|
|
Постоянный
Регистрация: 01.05.2021
Сообщений: 752
С нами:
2650753
Репутация:
98
|
|
Сообщение от kin4stat
На форуме конечно есть мой гайд, но когда я писал вторую его часть, я понял что бесполезно объяснять такую тему вообще, потому что тот кто понимает ассемблер - сам себе хуки забабахает, а тот кто не знает, и не поймет, че там написано ваще
Понимать ассемблер? Имеешь ввиду, что игру саму реверсить, чтобы функции нужные искать?
Уххх, я вообще реверсинг не понимаю. Да и уроков по нему единицы в интернете, думаю.
Может, сделаешь урок по реверсу?
Да и чтобы реверсить, тут программист нервно курит в стороне, наверное, ибо тут надо быть реверс-инженером.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|