ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   kthook - x86 hooking library (https://forum.antichat.xyz/showthread.php?t=1401004)

kin4stat 07.09.2021 21:53

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

kin4stat 21.11.2021 23:29

Обновил.

Теперь есть обычные хуки, получение адреса возврата, и прочие фишки

kin4stat 21.12.2021 03:36

Обновил, добавил контекст, обычные хуки

Также теперь есть поддержка x64 windows, x64 linux, x86 windows

x86 linux WIP

kin4stat 14.01.2022 01:54

Теперь production ready.

x86 windows, x86 linux, x64 linux, x64 windows.

Остался одна недоработка на x64 windows, пофикшу в ближайшем будущем

UPD: недоработкой оказался антитампер гта 5

RTD 04.05.2022 23:02

Цитата:

Сообщение от kin4stat

Остался одна недоработка на x64 windows, пофикшу в ближайшем будущем

Пофиксил?

kin4stat 15.06.2022 23:56

Цитата:

Сообщение от RTD

Пофиксил?

UPD: нашел в чем трабл

антитампер ГТА5, на которой мы тестили гнобил :D. В ктхуке багов не было

kin4stat 16.06.2022 00:02

Обновил, добавил naked(x86/x64) хуки. Документацию потом как-нибудь обновлю.

Пока представлю короткую сводку, ну и пример из тестов:

Интерфейс как у
Код:

kthook_simple
(т.е.
Код:

set_dest
,
Код:

set_cb
и прочее на месте)

Тип коллбэка -
Код:

void(const kthook_naked&)
Также доступны две функции, которые можно юзать внутри хука:

Код:

get_context
и
Код:

get_return_address
Код:

get_context
позволяет получить мутабельный контекст, который был захвачен перед вызовом коллбэка внутри хука.

Тип возвращаемого значения -
Код:

cpu_ctx&
, внутри которого лежат все регистры процессора. Можно изменять, изменения применятся после выхода из коллбэка

Код:

get_return_address
позволяет получить мутабельный адрес возврата, который по умолчанию выставляется на место хука + кол-во байт нужных для хука

Тип возвращаемого значения -
Код:

std::uintptr_t&
, который можно менять. Если изменить - после выхода из коллбэка выполнение перейдет на указанный адрес

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

Yuriy Code 24.06.2022 17:40

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

Мысли людей скорее всего "Эххх, я вот не умею хуки создавать, пользуюсь чужим кодом(((".

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

kin4stat 24.06.2022 17:47

Цитата:

Сообщение от Yuriy Code

Киня, вот создал ты библиотеку свою, может сделаешь уроки, как самому делать хуки? А то грустно наверное пользоваться готовым кодом.
Мысли людей скорее всего "Эххх, я вот не умею хуки создавать, пользуюсь чужим кодом(((".
И грустно для самого себя использовать чужой код, то есть понимать, что ты так не умеешь и за тебя это сделал другой человек.

На форуме конечно есть мой гайд, но когда я писал вторую его часть, я понял что бесполезно объяснять такую тему вообще, потому что тот кто понимает ассемблер - сам себе хуки забабахает, а тот кто не знает, и не поймет, че там написано ваще

Yuriy Code 24.06.2022 17:49

Цитата:

Сообщение от kin4stat

На форуме конечно есть мой гайд, но когда я писал вторую его часть, я понял что бесполезно объяснять такую тему вообще, потому что тот кто понимает ассемблер - сам себе хуки забабахает, а тот кто не знает, и не поймет, че там написано ваще

Понимать ассемблер? Имеешь ввиду, что игру саму реверсить, чтобы функции нужные искать?

Уххх, я вообще реверсинг не понимаю. Да и уроков по нему единицы в интернете, думаю.

Может, сделаешь урок по реверсу?

Да и чтобы реверсить, тут программист нервно курит в стороне, наверное, ибо тут надо быть реверс-инженером.


Время: 23:39