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

  #4891  
Старый 07.11.2020, 17:02
Musaigen
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами: 4272230

Репутация: 183


По умолчанию

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

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

Репутация: 183


По умолчанию

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

Как можно перезаписать входящий пакет, без использования SF?
R1:

C++:





Код:
typedef
Packet
*
(
__fastcall
*
RakPeer_Receive
)
(
void
*
)
;
RakPeer_Receive fpReceive
=
NULL
;
Packet
*
__fastcall
HOOK_RakPeer_Receive
(
void
*
pRakPeer
)
{
Packet
*
packet
=
fpReceive
(
pRakPeer
)
;
if
(
packet
!=
nullptr
&&
packet
->
data
)
{
// your code
}
return
packet
;
}
MH_CreateAndEnableHook
(
dwSampModule
+
0x31180
,
&
HOOK_RakPeer_Receive
,
reinterpret_cast

(
&
fpReceive
)
)
 
Ответить с цитированием

  #4893  
Старый 07.11.2020, 17:08
Musaigen
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами: 4272230

Репутация: 183


По умолчанию

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

R1:

C++:





Код:
typedef
Packet
*
(
__fastcall
*
RakPeer_Receive
)
(
void
*
)
;
RakPeer_Receive fpReceive
=
NULL
;
Packet
*
__fastcall
HOOK_RakPeer_Receive
(
void
*
pRakPeer
)
{
Packet
*
packet
=
fpReceive
(
pRakPeer
)
;
if
(
packet
!=
nullptr
&&
packet
->
data
)
{
// your code
}
return
packet
;
}
MH_CreateAndEnableHook
(
dwSampModule
+
0x31180
,
&
HOOK_RakPeer_Receive
,
reinterpret_cast

(
&
fpReceive
)
)

А это тут при чём, меня интересует как перезаписать входящий пакет, а не как хукнуть его.
 
Ответить с цитированием

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

Репутация: 183


По умолчанию

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

А это тут при чём, меня интересует как перезаписать входящий пакет, а не как хукнуть его.
Ну так в хуке и перезаписываешь нужную инфу, не?
 
Ответить с цитированием

  #4895  
Старый 07.11.2020, 17:21
#Northn
Флудер
Регистрация: 10.08.2017
Сообщений: 2,659
С нами: 4609424

Репутация: 183


По умолчанию

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

Как можно перезаписать входящий пакет, без использования SF?
mod_sa/src/HookedRakClient.cpp at v4.4.1.3 · BlastHackNet/mod_sa

Multi-purpose cheat tool for GTA San Andreas and SA-MP - BlastHackNet/mod_sa

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

  #4896  
Старый 08.11.2020, 02:23
Joni Scripts
Постоянный
Регистрация: 30.07.2019
Сообщений: 533
С нами: 3573775

Репутация: 133


По умолчанию

Как сделать проверку на этот диалог в RPC который дает мне сервер, код ниже не работает, find не умею пользоваться



1604788008277.pngJoni Scripts · 8 Ноя 2020 в 01:23' data-fancybox="lb-post-600108" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/74867/" style="cursor: pointer;" title="1604788008277.png">
 
Ответить с цитированием

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

Репутация: 183


По умолчанию

Цитата:
Сообщение от Joni Scripts  

Как сделать проверку на этот диалог в RPC который дает мне сервер, код ниже не работает, find не умею пользоваться
C++:





Код:
if
(
strcmp
(
info
,
"Ник пригласившего игрока бла-бла"
)
==
0
)
{
}
// тоже самое, но в c++ стиле
if
(
std
::
string
{
info
}
==
"Ник пригласившго бла-бла"
)
{
}
 
Ответить с цитированием

  #4898  
Старый 08.11.2020, 03:38
Romelo
Постоянный
Регистрация: 21.11.2014
Сообщений: 540
С нами: 6039222

Репутация: 163


По умолчанию

Цитата:
Сообщение от Joni Scripts  

Как сделать проверку на этот диалог в RPC который дает мне сервер, код ниже не работает, find не умею пользоваться
C++:





Код:
if
(
strstr
(
cInfo
,
"Введите ник игрока, пригласившего вас на сервер или промокод"
)
&&
strstr
(
cCaption
,
"{FFFFFF}Приглашение | {ae433d}Регистрация"
)
)
{
//
}
 
Ответить с цитированием

  #4899  
Старый 12.11.2020, 21:44
Vintik
Познавший АНТИЧАТ
Регистрация: 18.08.2017
Сообщений: 1,568
С нами: 4598023

Репутация: 183


По умолчанию

Цитата:
Сообщение от Gunborg Johansson  

For example:

C++:





Код:
auto
sendPacketHandler
(
BitStream
*
const
bitStream
,
const
uint32_t
packetPriority
,
const
uint32_t
packetReliability
,
const
char
orderingChannel
)
const
{
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wattributes"
using
sendPacket_t
=
bool
(
__thiscall
*
)
(
const
RakClient
*
const
,
BitStream
*
const
,
const
uint32_t
,
const
uint32_t
,
const
char
)
;
#pragma GCC diagnostic pop
uint8_t
packetId
{
}
;
bitStream
->
Read
(
packetId
)
;
if
(
packetId
==
ID_PLAYER_SYNC
)
{
stOnFootData onFootData
{
}
;
bitStream
->
Read
(
reinterpret_cast

(
&
onFootData
)
,
sizeof
(
stOnFootData
)
)
;
bitStream
->
ResetWritePointer
(
)
;
onFootData
.
fPosition
[
2
]
+=
5.f
;
bitStream
->
Write
(
packetId
)
;
bitStream
->
Write
(
reinterpret_cast

(
&
onFootData
)
,
sizeof
(
stOnFootData
)
)
;
}
auto
sendPacket
{
sendPacket_t
(
originalVirtualTable
[
6
]
)
}
;
return
sendPacket
(
rakClientInterface
,
bitStream
,
packetPriority
,
packetReliability
,
orderingChannel
)
;
}

without SF
 
Ответить с цитированием

  #4900  
Старый 12.11.2020, 21:56
Gunborg Johansson
Познающий
Регистрация: 30.10.2020
Сообщений: 32
С нами: 2914352

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

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

without SF
There I showed you how to overwrite an outcoming packet instead of an incoming one. From the context, I realized that you need a ready-made solution.

Example of hooking the method of sending outcoming synchronization:





Код:
constexpr
auto
sampModuleHandle
{
"samp.dll"
}
;
constexpr
auto
sampRakClientOffset
{
0x3C9
}
;
constexpr
auto
sampNetGameOffset
{
0x21A0F8
}
;
constexpr
auto
sampRakClientSize
{
55u
}
;
constexpr
auto
sampPlayerSync
{
207u
}
;
constexpr
auto
sampVehicleSync
{
200u
}
;
constexpr
auto
sampAimSync
{
203u
}
;
constexpr
auto
sampBulletSync
{
206u
}
;
constexpr
auto
sampSpectatorSync
{
212u
}
;
class
RakClient
;
class
CNetGame
;
RakClient
*
rakClientInterface
{
}
;
CNetGame
*
netGame
{
}
;
uint32_t
*
fakeVirtualTable
{
}
;
uint32_t
*
originalVirtualTable
{
}
;
class
AnyClassName
{
public
:
auto
sendPacketHandler
(
BitStream
*
const
bitStream
,
const
uint32_t
packetPriority
,
const
uint32_t
packetReliability
,
const
char
orderingChannel
)
const
{
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wattributes"
using
sendPacket_t
=
bool
(
__thiscall
*
)
(
const
RakClient
*
const
,
BitStream
*
const
,
const
uint32_t
,
const
uint32_t
,
const
char
)
;
#pragma GCC diagnostic pop
uint8_t
packetId
{
}
;
bitStream
->
Read
(
packetId
)
;
if
(
packetId
==
sampPlayerSync
)
{
stOnFootData onFootData
{
}
;
bitStream
->
Read
(
reinterpret_cast

(
&
onFootData
)
,
sizeof
(
stOnFootData
)
)
;
bitStream
->
ResetWritePointer
(
)
;
// Do whatever you want with BitStream.
bitStream
->
Write
(
packetId
)
;
bitStream
->
Write
(
reinterpret_cast

(
&
onFootData
)
,
sizeof
(
stOnFootData
)
)
;
}
auto
sendPacket
{
sendPacket_t
(
originalVirtualTable
[
6
]
)
}
;
return
sendPacket
(
rakClientInterface
,
bitStream
,
packetPriority
,
packetReliability
,
orderingChannel
)
;
}
AnyClassName
(
)
{
std
::
thread
hookThread
(
[
&
]
(
)
{
while
(
true
)
{
auto
moduleHandle
{
uint32_t
(
::
GetModuleHandle
(
sampModuleHandle
)
)
}
;
if
(
moduleHandle
)
{
netGame
=
*
reinterpret_cast

(
moduleHandle
+
sampNetGameOffset
)
;
if
(
netGame
)
{
rakClientInterface
=
*
reinterpret_cast

(
uint32_t
(
netGame
)
+
sampRakClientOffset
)
;
if
(
rakClientInterface
)
{
originalVirtualTable
=
*
reinterpret_cast

(
rakClientInterface
)
;
fakeVirtualTable
=
new
uint32_t
[
sampRakClientSize
]
;
memcpy
(
fakeVirtualTable
,
originalVirtualTable
,
sampRakClientSize
*
sizeof
(
uint32_t
)
)
;
*
reinterpret_cast

(
rakClientInterface
)
=
fakeVirtualTable
;
fakeVirtualTable
[
6
]
=
force_cast

(
&
AntiCheat
::
sendPacketHandler
)
;
break
;
}
}
}
std
::
this_thread
::
sleep_for
(
std
::
chrono
::
milliseconds
(
5
)
)
;
}
}
)
;
hookThread
.
detach
(
)
;
}
}
AnyObjectName
;


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

R1:

C++:





Код:
typedef
Packet
*
(
__fastcall
*
RakPeer_Receive
)
(
void
*
)
;
RakPeer_Receive fpReceive
=
NULL
;
Packet
*
__fastcall
HOOK_RakPeer_Receive
(
void
*
pRakPeer
)
{
Packet
*
packet
=
fpReceive
(
pRakPeer
)
;
if
(
packet
!=
nullptr
&&
packet
->
data
)
{
// your code
}
return
packet
;
}
MH_CreateAndEnableHook
(
dwSampModule
+
0x31180
,
&
HOOK_RakPeer_Receive
,
reinterpret_cast

(
&
fpReceive
)
)

This is a RakPeer hook, not a RakClient.
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.