HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 07.09.2021, 21:53
kin4stat
Флудер
Регистрация: 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
 
Ответить с цитированием

  #2  
Старый 21.11.2021, 23:29
kin4stat
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами: 4483143

Репутация: 183


По умолчанию

Обновил.

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

  #3  
Старый 21.12.2021, 03:36
kin4stat
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами: 4483143

Репутация: 183


По умолчанию

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

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

x86 linux WIP
 
Ответить с цитированием

  #4  
Старый 14.01.2022, 01:54
kin4stat
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами: 4483143

Репутация: 183


По умолчанию

Теперь production ready.

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

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

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

  #5  
Старый 04.05.2022, 23:02
RTD
Постоянный
Регистрация: 18.03.2017
Сообщений: 410
С нами: 4818548

Репутация: 133
По умолчанию

Цитата:
Сообщение от kin4stat  

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

  #6  
Старый 15.06.2022, 23:56
kin4stat
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами: 4483143

Репутация: 183


По умолчанию

Цитата:
Сообщение от RTD  

Пофиксил?
UPD: нашел в чем трабл

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

  #7  
Старый 16.06.2022, 00:02
kin4stat
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами: 4483143

Репутация: 183


По умолчанию

Обновил, добавил 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
 
Ответить с цитированием

  #8  
Старый 24.06.2022, 17:40
Yuriy Code
Постоянный
Регистрация: 01.05.2021
Сообщений: 752
С нами: 2650753

Репутация: 98


По умолчанию

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

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

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

  #9  
Старый 24.06.2022, 17:47
kin4stat
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами: 4483143

Репутация: 183


По умолчанию

Цитата:
Сообщение от Yuriy Code  

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

  #10  
Старый 24.06.2022, 17:49
Yuriy Code
Постоянный
Регистрация: 01.05.2021
Сообщений: 752
С нами: 2650753

Репутация: 98


По умолчанию

Цитата:
Сообщение от kin4stat  

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

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

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

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





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.