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

  #7511  
Старый 14.04.2025, 22:12
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

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

GitHub - wyrover/subhook: Super-simple hooking library for C/C++

Super-simple hooking library for C/C++. Contribute to wyrover/subhook development by creating an account on GitHub.

github.com

А не подскажешь, как правильно изменить значение в eax (результат вызова функи) так, чтобы асм листинг не ломался (трамплинчик вроде называется)

1744654334791.pngвайега52 · 14 Апр 2025 в 21:12' data-fancybox="lb-post-1599365" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/267822/" style="cursor: pointer;" title="1744654334791.png">
 
Ответить с цитированием

  #7512  
Старый 14.04.2025, 22:29
Byte
Новичок
Регистрация: 20.11.2006
Сообщений: 9
С нами: 10248157

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

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

А не подскажешь, как правильно изменить значение в eax (результат вызова функи) так, чтобы асм листинг не ломался (трамплинчик вроде называется)
C++:





Код:
#include 
subhook_t original_function_hook
;
typedef
int
(
*
original_func_t
)
(
/* параметры */
)
;
int
my_hook_function
(
/* параметры */
)
{
// Получаем трамплин и вызываем оригинальную функцию
int
result
=
(
(
original_func_t
)
subhook_get_trampoline
(
original_function_hook
)
)
(
/* параметры */
)
;
// Модифицируем результат (значение в eax)
result
=
/* твоя модификация например result * 2 */
;
return
result
;
}
void
setup_hook
(
)
{
original_function_hook
=
subhook_new
(
(
void
*
)
original_function
,
(
void
*
)
my_hook_function
)
;
subhook_install
(
original_function_hook
)
;
}
 
Ответить с цитированием

  #7513  
Старый 14.04.2025, 23:05
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

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

C++:





Код:
#include 
subhook_t original_function_hook
;
typedef
int
(
*
original_func_t
)
(
/* параметры */
)
;
int
my_hook_function
(
/* параметры */
)
{
// Получаем трамплин и вызываем оригинальную функцию
int
result
=
(
(
original_func_t
)
subhook_get_trampoline
(
original_function_hook
)
)
(
/* параметры */
)
;
// Модифицируем результат (значение в eax)
result
=
/* твоя модификация например result * 2 */
;
return
result
;
}
void
setup_hook
(
)
{
original_function_hook
=
subhook_new
(
(
void
*
)
original_function
,
(
void
*
)
my_hook_function
)
;
subhook_install
(
original_function_hook
)
;
}

Если ставить хук на call, то оно крашит, ибо там 6 байт, я так понимаю, на инструкцию, а хукер меняет только 5, а если ставить позже, оно разве не должно работать с нейкид функой?
 
Ответить с цитированием

  #7514  
Старый 15.04.2025, 00:48
Byte
Новичок
Регистрация: 20.11.2006
Сообщений: 9
С нами: 10248157

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

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

Если ставить хук на call, то оно крашит, ибо там 6 байт, я так понимаю, на инструкцию, а хукер меняет только 5, а если ставить позже, оно разве не должно работать с нейкид функой?
а если хукнуть не сам call, а начало функции, на которую он указывает?
 
Ответить с цитированием

  #7515  
Старый 15.04.2025, 06:00
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

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

а если хукнуть не сам call, а начало функции, на которую он указывает?
А мне надо хукать функцию только в одном месте вызова (она вызывается и в других участках кода, но нужен именно этот)
 
Ответить с цитированием

  #7516  
Старый 15.04.2025, 12:00
moreveal
Постоянный
Регистрация: 01.08.2020
Сообщений: 988
С нами: 3043831

Репутация: 163


По умолчанию

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

А мне надо хукать функцию только в одном месте вызова (она вызывается и в других участках кода, но нужен именно этот)
хукни всю, и глянь адрес в конце стека, чтобы она соответствовала возврату на некст инструкцию после нужного тебе места хахахах, ну просто в сабхуке видимо иначе не сделать, если не дает размер указать

еще конкретно в твоем случае это vtable вроде, ничо не мешает прочесть поинтер что там лежал (в ECX+E8), взяв это за адрес оригинальной функи, и записать туда самого себя

можно кнш еще хук на байт позже ставить, но трамплин придется ручками чинить, что не круто
 
Ответить с цитированием

  #7517  
Старый 15.04.2025, 17:20
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

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

еще конкретно в твоем случае это vtable вроде, ничо не мешает прочесть поинтер что там лежал (в ECX+E8), взяв это за адрес оригинальной функи, и записать туда самого себ
тогда попробую стильный, молодежный ктхук (я, кстати. это вроде делал через проверку адреса возврата, но получалось криво), у него вроде проблема только с нейкид хуками
 
Ответить с цитированием

  #7518  
Старый 16.04.2025, 13:50
vmprotect
Постоянный
Регистрация: 15.09.2021
Сообщений: 396
С нами: 2453766

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

пытаюсь поставить хук на UpdateNetwork, но когда отправляю ракнет пакеты ничего не работает

zalupa code:





Код:
void
CNetGame__UpdateNetwork__HOOK
(
const
decltype
(
CNetGame__UpdateNetwork_Hook
)
&
hook
,
void
*
_this
)
{
Packet
*
packet
=
nullptr
;
uint8_t
*
localdata
=
nullptr
;
uint8_t
state
{
}
;
for
(
packet
=
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
Receive
(
)
;
packet
;
packet
=
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
Receive
(
)
)
{
localdata
=
packet
->
data
;
switch
(
state
)
{
localdata
=
packet
->
data
;
if
(
*
localdata
==
40
)
state
=
localdata
[
5
]
;
case
223
:
{
RakNet
::
BitStream
bs
(
(
unsigned
char
*
)
packet
->
data
,
packet
->
length
,
false
)
;
uint8_t
packetID
;
uint32_t
rpcID
;
bs
.
Read
(
packetID
)
;
bs
.
Read
(
rpcID
)
;
if
(
rpcID
==
15
)
{
sampapi
::
v037r3
::
RefChat
(
)
->
AddChatMessage
(
"я тормоз"
,
0xFFFFFFFF
,
"я тормоз"
)
;
return
;
}
break
;
}
default
:
break
;
}
}
return
hook
.
call_trampoline
(
_this
)
;
}
void
hooks
::
install_tormoz_updatenetwork_hook
(
)
{
CNetGame__UpdateNetwork_Hook
.
set_dest
(
0xAF20
)
;
CNetGame__UpdateNetwork_Hook
.
set_cb
(
&
CNetGame__UpdateNetwork__HOOK
)
;
CNetGame__UpdateNetwork_Hook
.
install
(
)
;
}
 
Ответить с цитированием

  #7519  
Старый 16.04.2025, 14:07
вайега52
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами: 2055431

Репутация: 3


По умолчанию

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

CNetGame__UpdateNetwork_Hook.set_dest(0xAF20);
оффсет от самп.длл должен идти
 
Ответить с цитированием

  #7520  
Старый 16.04.2025, 14:57
vmprotect
Постоянный
Регистрация: 15.09.2021
Сообщений: 396
С нами: 2453766

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

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

оффсет от самп.длл должен идти
написал фулл функцию но коннект не происходит на сервер

C++:





Код:
using
CNetGame__UpdateNetwork
=
void
(
__thiscall
*
)
(
void
*
_this
)
;
kthook
::
kthook_simple

CNetGame__UpdateNetwork_Hook
;
void
CNetGame__UpdateNetwork__HOOK
(
const
decltype
(
CNetGame__UpdateNetwork_Hook
)
&
hook
,
void
*
_this
)
{
Packet
*
packet
=
nullptr
;
uint8_t
*
localdata
=
nullptr
;
uint8_t
state
{
}
;
for
(
packet
=
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
Receive
(
)
;
packet
&&
packet
->
data
;
packet
=
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
Receive
(
)
)
{
localdata
=
packet
->
data
;
if
(
*
localdata
==
40
)
state
=
localdata
[
5
]
;
switch
(
state
)
{
case
12
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_AuthKey
(
packet
)
;
break
;
}
case
29
:
{
sampapi
::
v037r3
::
RefChat
(
)
->
AddMessage
(
0xFFFFFFFF
,
"Сервер не отвечает. Повторяем подключение"
)
;
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_nGameState
=
1
;
break
;
}
case
31
:
{
sampapi
::
v037r3
::
RefChat
(
)
->
AddMessage
(
0xFFFFFFFF
,
"Сервер не отвечает. Повторяем подключение"
)
;
break
;
}
case
32
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_DisconnectionNotification
(
packet
)
;
break
;
}
case
33
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_ConnectionLost
(
packet
)
;
break
;
}
case
34
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_ConnectionSucceeded
(
packet
)
;
break
;
}
case
35
:
{
sampapi
::
v037r3
::
RefChat
(
)
->
AddMessage
(
0xFFFFFFFF
,
"Не удалось инициализировать шифрование."
)
;
break
;
}
case
36
:
{
sampapi
::
v037r3
::
RefChat
(
)
->
AddMessage
(
0xFFFFFFFF
,
"Вы забанены на этом сервере."
)
;
break
;
}
case
37
:
{
sampapi
::
v037r3
::
RefChat
(
)
->
AddMessage
(
0xFFFFFFFF
,
"Неправильный пароль."
)
;
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
Disconnect
(
0
,
0
)
;
break
;
}
case
200
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_VehicleSync
(
packet
)
;
break
;
}
case
203
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_AimSync
(
packet
)
;
break
;
}
case
206
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_BulletSync
(
packet
)
;
break
;
}
case
207
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_PlayerSync
(
packet
)
;
break
;
}
case
208
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_MarkersSync
(
packet
)
;
break
;
}
case
209
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_UnoccupiedSync
(
packet
)
;
break
;
}
case
210
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_TrailerSync
(
packet
)
;
break
;
}
case
211
:
{
sampapi
::
v037r3
::
RefNetGame
(
)
->
Packet_PassengerSync
(
packet
)
;
break
;
}
default
:
break
;
}
sampapi
::
v037r3
::
RefNetGame
(
)
->
m_pRakClient
->
DeallocatePacket
(
packet
)
;
}
return
hook
.
call_trampoline
(
_this
)
;
}
void
hooks
::
install_tormoz_updatenetwork_hook
(
)
{
CNetGame__UpdateNetwork_Hook
.
set_dest
(
SampBase
+
0xAF20
)
;
CNetGame__UpdateNetwork_Hook
.
set_cb
(
&
CNetGame__UpdateNetwork__HOOK
)
;
CNetGame__UpdateNetwork_Hook
.
install
(
)
;
}
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.

×

Создать сделку

Продавец: ник или ID

Название сделки:

Сумма USDT:

Срок сделки, дней:

Кто платит комиссию:

Условия сделки:

После создания сделки средства будут зарезервированы в холде до завершения сделки.

×

Мои сделки

Загрузка...
×

Сделка


Загрузка чата...