PDA

Просмотр полной версии : kthook - x86 hooking library


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 (https://github.com/KiN4StAt/kthook/tree/master)

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
Остался одна недоработка на x64 windows, пофикшу в ближайшем будущем


Пофиксил?

kin4stat
15.06.2022, 23:56
Пофиксил?


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 (https://github.com/kin4stat/kthook/blob/ead0aff128ce2158875354b9173da4eeddc5b70c/tests/simple_test.cpp#L40)

Contribute to kin4stat/kthook development by creating an account on GitHub.

github.com


kthook/tests/simple_test.cpp at ead0aff128ce2158875354b9173da4eeddc5b70c · kin4stat/kthook (https://github.com/kin4stat/kthook/blob/ead0aff128ce2158875354b9173da4eeddc5b70c/tests/simple_test.cpp#L77)

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
24.06.2022, 17:49
На форуме конечно есть мой гайд, но когда я писал вторую его часть, я понял что бесполезно объяснять такую тему вообще, потому что тот кто понимает ассемблер - сам себе хуки забабахает, а тот кто не знает, и не поймет, че там написано ваще


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

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

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

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

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



Гайд - Хуки – что это такое и как с ними работать [2] (https://www.blast.hk/threads/91079/)

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

www.blast.hk


Исходник - Гайд - Мини-гайд по хукам. [Теория + Практика] (https://www.blast.hk/threads/61027/)

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

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
И грустно для самого себя использовать чужой код, то есть понимать, что ты так не умеешь и за тебя это сделал другой человек.



Как побороть NIH-синдром? (https://www.blast.hk/redirect/aHR0cHM6Ly9xbmEuaGFici5jb20vcS81NzYyMTY)

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

qna.habr.com

F0RQU1N and
20.07.2022, 06:53
Кинь, твой ктхук для всех игр подойдёт или онли 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
08.09.2022, 13:29
перестать писать хуету несусветную в каждой теме и научиться гуглить


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

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

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


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

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


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

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


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

F0RQU1N and
08.09.2022, 13:37
По реверсу и хукам нихуя в гугле нет. ☹️



The different ways of hooking (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudW5rbm93bmNoZWF0cy5tZS9mb3J1bS9nZW 5lcmFsLXByb2dyYW1taW5nLWFuZC1yZXZlcnNpbmcvMTU0NjQz LWRpZmZlcmVudC13YXlzLWhvb2tpbmcuaHRtbA)

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/ (https://www.blast.hk/redirect/aHR0cHM6Ly9icm9rZW5jb3JlLmNsdWIvdGhyZWFkcy84MjQyLw )

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

Yuriy Code
08.09.2022, 13:38
The different ways of hooking (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudW5rbm93bmNoZWF0cy5tZS9mb3J1bS9nZW 5lcmFsLXByb2dyYW1taW5nLWFuZC1yZXZlcnNpbmcvMTU0NjQz LWRpZmZlcmVudC13YXlzLWhvb2tpbmcuaHRtbA)

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/ (https://www.blast.hk/redirect/aHR0cHM6Ly9icm9rZW5jb3JlLmNsdWIvdGhyZWFkcy84MjQyLw )

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


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



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


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

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

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