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

  #1  
Старый 13.08.2021, 20:20
sc6ut
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами: 3174020

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

да-да, ещё один класс для хуков, он самый.

особенности:

- возможность выгрузки хука при любой ситуации, не ломая цепочку вызовов хуков.​- трамплин передается первым аргументом в хукнутую функцию, что позволяет не создавать глобальных объектов и переменных.​- автоматическое определение размера хука.​- поддержка лямбд, колбеков-методов (спиздил у @SR_team).​- поддержка cdecl, stdcall, thiscall.​

примеры:

хук CChat::AddEntry:





Код:
using
add_entry_t
=
int
(
__thiscall
*
)
(
void
*
,
int
,
const
char
*
,
const
char
*
,
std
::
uint32_t
,
std
::
uint32_t
)
;
lemon
::
detour

add_entry_hook
(
0x64010
,
"samp.dll"
)
;
// пример с обычной функцией
int
add_entry
(
add_entry_t orig
,
void
*
this_ptr
,
int
type
,
const
char
*
text
,
const
char
*
prefix
,
std
::
uint32_t
text_color
,
std
::
uint32_t
prefix_color
)
{
// do your stuff
return
orig
(
this_ptr
,
type
,
text
,
prefix
,
text_color
,
prefix_color
)
;
}
add_entry_hook
.
install
(
add_entry
)
;
// пример с лямбдой
add_entry_hook
.
install
(
[
]
(
auto
orig
,
void
*
this_ptr
,
int
type
,
const
char
*
text
,
const
char
*
prefix
,
std
::
uint32_t
text_color
,
std
::
uint32_t
prefix_color
)
->
int
{
// do your stuff
return
orig
(
this_ptr
,
type
,
text
,
prefix
,
text_color
,
prefix_color
)
;
}
)
;
// пример с колбеком-методом
struct
ex
{
int
add_entry
(
add_entry_t orig
,
void
*
this_ptr
,
int
type
,
const
char
*
text
,
const
char
*
prefix
,
std
::
uint32_t
text_color
,
std
::
uint32_t
prefix_color
)
{
// do your stuff
return
orig
(
this_ptr
,
type
,
text
,
prefix
,
text_color
,
prefix_color
)
;
}
}
;
ex obj
;
add_entry_hook
.
install
(
std
::
make_tuple
(
&
obj
,
&
ex
::
add_entry
)
)
;


в этих примерах, хукается функция класса CChat - AddEntry, находящаяся в динамической библиотеке samp.dll. в параметрах каждого из колбеков видно, что помимо оригинальных аргументов функции она так же получает трамплин для вызова оригинальной функции.

планы на будущее:

- x64 support.​- класс для хуков любого места (что-то вроде SRHook'ов @SR_team).​- (maybe?) linux support (пока не знаю зачем).​

src:

NIKITA / LemonHook

GitLab.com

gitlab.com
 
Ответить с цитированием

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

Репутация: 183


По умолчанию

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

Да-да, ещё один класс для хуков, он самый.

Особенности:
- Возможность выгрузки хука при любой ситуации, не ломая цепочку вызовов хуков.​- Трамплин передается первым аргументом в хукнутую функцию, что позволяет не создавать глобальных объектов и переменных.​- Автоматическое определение размера хука.​
Пример:

Хук CChat::AddEntry:





Код:
using
AddEntry
=
int
(
__thiscall
*
)
(
void
*
,
int
,
const
char
*
,
const
char
*
,
uint32_t
,
uint32_t
)
;
int
__fastcall
hookedAddEntry
(
void
*
ecx
,
void
*
,
AddEntry oAddEntry
,
const
char
*
text
,
const
char
*
prefix
,
uint32_t
color
,
uint32_t
prefixColor
)
{
// Do your stuff
return
oAddEntry
(
ecx
,
text
,
prefix
,
color
,
prefixColor
)
;
}
LemonHook
::
Hook _addEntryHook
{
0x64010
,
"samp"
}
;
_addEntryHook
.
install
(
hookedAddEntry
)
;


В этом примере, хукается функция класса CChat - AddEntry, находящаяся в динамической библиотеке samp.dll. На 3 строчке видно, что помимо параметров самой функции и регистра EDX, добавился так же указатель на трамплин для вызова оригинальной функции.

Source:

NIKITA / LemonHook

GitLab.com

gitlab.com

Используйте код из примеров и получите UB и ошибки компиляции в подарок!

__thiscall* недопустим на MSVC, но GCC позволяет.

А еще AddEntry имеет 6 параметров, а вызываешь ты его с 5 параметрами.

Хоть проверил бы код

Имена начинающиеся на _ и __ зарезервированы под нужды компилятора.

А еще лучше второму параметру дать имя, ибо компилятор можно похерить регистр неиспользуемого аргумента, он же внутри функции не нужен?(хотя в целом он не должен такие оптимизации производить над функциями у которых берется адрес, но все же -O3 на GCC(MinGW) может все похерить)
 
Ответить с цитированием

  #3  
Старый 13.08.2021, 21:57
SR_team
Флудер
Регистрация: 26.10.2013
Сообщений: 4,924
С нами: 6603505

Репутация: 183


По умолчанию

Смотрю на некоторые участки кода и прям дежавю
 
Ответить с цитированием

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

Репутация: 183


По умолчанию

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

Смотрю на некоторые участки кода и прям дежавю
Похоже на Попытку переписать srhook с минимальным оверхедом и совместить его с минхуком
 
Ответить с цитированием

  #5  
Старый 13.08.2021, 22:11
sc6ut
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами: 3174020

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

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

Используйте код из примеров и получите UB и ошибки компиляции в подарок!
__thiscall* недопустим на MSVC, но GCC позволяет.
??

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

А еще AddEntry имеет 6 параметров, а вызываешь ты его с 5 параметрами.
Хоть проверил бы код
проверял. не заметил, что проебал 1 параметр, так как код не копировал из проекта.

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

А еще лучше второму параметру дать имя, ибо компилятор можно похерить регистр неиспользуемого аргумента, он же внутри функции не нужен?(хотя в целом он не должен такие оптимизации производить над функциями у которых берется адрес, но все же -O3 на GCC(MinGW) может все похерить)
этого не знал, спасибо.

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

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

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

совместить его с минхуком
единственное что взял оттуда это файлы Hacker Disassembler Engine.
 
Ответить с цитированием

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

Репутация: 183


По умолчанию

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

??
Мб через typedef не работает. Я просто забил, везде fastcall начал использовать, даже при переходе с typedef на using
 
Ответить с цитированием

  #7  
Старый 13.08.2021, 23:09
sc6ut
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами: 3174020

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

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

Мб через typedef не работает.
тоже работает.
 
Ответить с цитированием

  #8  
Старый 14.08.2021, 03:11
loganhackerdff
Постоянный
Регистрация: 24.07.2017
Сообщений: 867
С нами: 4633764

Репутация: 148


По умолчанию

А че за gitlab, он круче гитхаба?
 
Ответить с цитированием

  #9  
Старый 14.08.2021, 03:22
SR_team
Флудер
Регистрация: 26.10.2013
Сообщений: 4,924
С нами: 6603505

Репутация: 183


По умолчанию

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

он круче гитхаба?
нельзя так рассуждать, потому что у каждой из этих двух вещей есть свои плюс и минусы. и каждый выбирает пользоваться тем, что ему нужно. почитай лучше в интернете разные статьи на эту тему. чем они друг от друга отличаются. может быть тебе @SR_team своё мнение напишет, почему он пользуется именно гитлабом. Но я думаю, что как минимум из-за того, что там нельзя подавать DMCA, в отличии от гитхаба) а у всех вышестоящих над бх челов триггеры на эти жалобы)) поскольку у них дохуя репозиториев калкор забанил. Но это я так думаю. И может быть я ошибаюсь. Всё остальное он тебе может быть напишет
 
Ответить с цитированием

  #10  
Старый 03.09.2021, 16:10
bottom_text
Постоянный
Регистрация: 28.06.2018
Сообщений: 676
С нами: 4145990

Репутация: 118


По умолчанию



Переписал код с твоего скрина и всё равно эта ошибка, сборка ломается , как исправить?
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.