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

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

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

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

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

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

legendabrn 24.06.2022 17:49

Цитата:

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

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

Гайд - Хуки – что это такое и как с ними работать [2]

Хотел продолжить первый гайд, но понял что нужно объяснить что такое хуки Создание ASI-плагина с нуля Хуки – что это такое и как с ними работать Безопасная инициализация и работа с SAMP Работа с рендером и Directx9 Обработка событий окна + ImGui В этом гайде я расскажу что такое хуки, как...

www.blast.hk


Исходник - Гайд - Мини-гайд по хукам. [Теория + Практика]

Всем привет. В последнее время я стал замечать, что абсолютное большинство использует всякие готовые библиотеки для хуков, и даже не заморачиваются о строении функций, типах хуков и прочим. Как таковых гайдов очень мало, а если и есть - на английском языке. В этой теме я расскажу обо всем просто...

www.blast.hk

kin4stat 13.07.2022 14:01

Обновил, пофиксил баг с выравниванием стека на x64

kin4stat 13.07.2022 18:29

Устроим сегодня день обнов, хули :D

Проверка
Код:

check_is_executable
теперь работает на unix like системах

Также добавил опцию на заморозку потоков. Чтобы ктхук заморозил потоки прежде чем установить хук - второй шаблонный аргумент нужно выставить в
Код:

kthook_option::kFreezeThreads
Работает только на linux и windows (x86 и x64)

(Теоретически ктхук работает и на макос, но я не проверял. Если работает, то заморозка потоков на макос не работает)

Yuriy Code 20.07.2022 01:18

Кинь, твой ктхук для всех игр подойдёт или онли samp?

kizn 20.07.2022 01:20

Цитата:

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

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

Как побороть NIH-синдром?

Ответили на вопрос 4 человека. Оцените лучшие ответы! И подпишитесь на вопрос, чтобы узнавать о появлении новых ответов.

qna.habr.com

F0RQU1N and 20.07.2022 06:53

Цитата:

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

Кинь, твой ктхук для всех игр подойдёт или онли samp?

причем тут игры это просто хукер он сам говорил лучше не юзать его для геймхакинга ващ3

kin4stat 21.08.2022 05:01

Хайповая обнова мужики зацените.

Из мелочей: фикс бага на naked хуках, фикс установки хука на call опкод.

Ну, а теперь к крутым новостям.

Добавил враппер на коллбэки с большим количество аргументов. Допустим мы хотим захукать такую функцию:

C++:





Код:

using
CCoronas_RegisterCorona
=
void
(
__cdecl
*
)
(
unsigned
int
id
,
CEntity
*
attachTo
,
unsigned
char
red
,
unsigned
char
green
,
unsigned
char
blue
,
unsigned
char
alpha
,
const
CVector
&
posn
,
float
radius
,
float
farClip
,
eCoronaType coronaType
,
eCoronaFlareType flaretype
,
bool
enableReflection
,
bool
checkObstacles
,
int
_param_not_used
,
float
angle
,
bool
longDistance
,
float
nearClip
,
unsigned
char
fadeState
,
float
fadeSpeed
,
bool
onlyFromBelow
,
bool
reflectionDelay
)
;



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

И приходилось делать это вот так:

C++:





Код:

register_corona_hook
.
set_cb
(
[
]
(
const
auto
&
hook
,
unsigned
int
id
,
CEntity
*
attachTo
,
unsigned
char
red
,
unsigned
char
green
,
unsigned
char
blue
,
unsigned
char
alpha
,
const
CVector
&
posn
,
float
radius
,
float
farClip
,
eCoronaType coronaType
,
eCoronaFlareType flaretype
,
bool
enableReflection
,
bool
checkObstacles
,
int
_param_not_used
,
float
angle
,
bool
longDistance
,
float
nearClip
,
unsigned
char
fadeState
,
loat fadeSpeed
,
bool
onlyFromBelow
,
bool
reflectionDelay
)
{
if
(
fade_speed
==
1.0f
)
return
hook
.
get_trampoline
(
)
(
id
,
attachTo
,
red
,
green
,
blue
,
alpha
,
posn
,
radius
,
farClip
,
coronaType
,
flaretype
,
enableReflection
,
checkObstacles
,
_param_not_used
,
angle
,
longDistance
,
nearClip
,
fadeState
,
15.0f
,
onlyFromBelow
,
reflectionDelay
)
;
else
return
hook
.
call_trampoline
(
id
,
attachTo
,
red
,
green
,
blue
,
alpha
,
posn
,
radius
,
farClip
,
coronaType
,
flaretype
,
enableReflection
,
checkObstacles
,
_param_not_used
,
angle
,
longDistance
,
nearClip
,
fadeState
,
fadeSpeed
,
onlyFromBelow
,
reflectionDelay
)
;
}
)
;



Поэтому теперь можно сделать так:

C++:





Код:

register_corona_hook
.
set_cb_wrapped
(
[
]
(
const
auto
&
hook
,
kthook
::
take

&&
v18
,
float
fade_speed
,
kthook
::
take

&&
v20_v21
)
{
if
(
fade_speed
==
1.0f
)
return
hook
.
call_trampoline
(
v18
,
15.0f
,
v20_v21
)
;
else
return
hook
.
call_trampoline
(
v18
,
fade_speed
,
v20_v21
)
;
}
)
;



Т.е. неиспользуемые первые 18 аргументов закидываются в v18, fade_speed закидывается по обычному, и последние 2 аргумента закидываются в v20_v21.

Заметно меньше ручной писанины, сразу видно что происходит, ну и следовательно меньше шанс ошибки. Круто же?

Ну и чтобы вызвать трамплин, нужно вызвать call_trampoline и передать туда все заглушки. В обычных хуках call_trampoline вызвать тоже можно, но компиляция замедлится.

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

Коллбэк к хуку не может быть шаблонным. Только первый ее аргумент(т.е. объект хука). Попробую это обойти в ближайшее время конечно, но не факт что выйдет

Ну а еще, не забывайте указывать && у kthook::take, иначе все сломается

Yuriy Code 08.09.2022 13:26

Я просто в ахуе, как это сложно... 😣

А ещё я в этих хуках и реверсе нихуя не понимаю, это просто пиздец. 😕

Где можно научиться? 🙄

Хочется плакать... 🙁😐

sc6ut 08.09.2022 13:28

Цитата:

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

Я просто в ахуе, как это сложно... 😣
А ещё я в этих хуках и реверсе нихуя не понимаю, это просто пиздец. 😕
Где можно научиться? 🙄

Хочется плакать... 🙁😐

перестать писать хуету несусветную в каждой теме и научиться гуглить

Yuriy Code 08.09.2022 13:29

Цитата:

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

перестать писать хуету несусветную в каждой теме и научиться гуглить

По реверсу и хукам нихуя в гугле нет. ☹️

А если и есть единицы результатов, то это пиздец сложно и непонятно...

sc6ut 08.09.2022 13:31

Цитата:

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

По реверсу и хукам нихуя в гугле нет. ☹️
А если и есть единицы результатов, то это пиздец сложно и непонятно...

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

Yuriy Code 08.09.2022 13:33

Цитата:

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

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

Ты так пишешь, будь то сам реверсить знаешь как и разбираешься в этом. Это разве так?

sc6ut 08.09.2022 13:35

Цитата:

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

Ты так пишешь, будь то сам реверсить знаешь как и разбираешься в этом. Это разве так?

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

F0RQU1N and 08.09.2022 13:37

Цитата:

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

По реверсу и хукам нихуя в гугле нет. ☹️

The different ways of hooking

The different ways of hooking - Explore the world of programming and reversing with our array of essential tools and insights! Join our dynamic community and equip yourself with resources like reverse engineering tools, debugging aids, scripting languages, exploit development techniques...

www.unknowncheats.me


https://brokencore.club/threads/8242/

*****бол получается)0))xd)

Yuriy Code 08.09.2022 13:38

Цитата:

Сообщение от F0RQU1N and

The different ways of hooking

The different ways of hooking - Explore the world of programming and reversing with our array of essential tools and insights! Join our dynamic community and equip yourself with resources like reverse engineering tools, debugging aids, scripting languages, exploit development techniques...

www.unknowncheats.me


https://brokencore.club/threads/8242/

*****бол получается)0))xd)

Сложноооооооо.

Цитата:

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

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

Ок, прошу прощения.

Да ну нафиг эти хуи и реверс, тьфу блин! Хуки и реверс.

Пойду в Far Cry 5 поиграю...


Время: 00:49