 |
|

07.11.2020, 17:02
|
|
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами:
4272230
Репутация:
183
|
|
Как можно перезаписать входящий пакет, без использования SF?
|
|
|

07.11.2020, 17:04
|
|
Флудер
Регистрация: 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
)
)
|
|
|

07.11.2020, 17:08
|
|
Познавший АНТИЧАТ
Регистрация: 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
)
)
А это тут при чём, меня интересует как перезаписать входящий пакет, а не как хукнуть его.
|
|
|

07.11.2020, 17:08
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от Musaigen
А это тут при чём, меня интересует как перезаписать входящий пакет, а не как хукнуть его.
Ну так в хуке и перезаписываешь нужную инфу, не?
|
|
|

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

08.11.2020, 02:23
|
|
Постоянный
Регистрация: 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">

|
|
|

08.11.2020, 03:21
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от Joni Scripts
Как сделать проверку на этот диалог в RPC который дает мне сервер, код ниже не работает, find не умею пользоваться
C++:
Код:
if
(
strcmp
(
info
,
"Ник пригласившего игрока бла-бла"
)
==
0
)
{
}
// тоже самое, но в c++ стиле
if
(
std
::
string
{
info
}
==
"Ник пригласившго бла-бла"
)
{
}
|
|
|

08.11.2020, 03:38
|
|
Постоянный
Регистрация: 21.11.2014
Сообщений: 540
С нами:
6039222
Репутация:
163
|
|
Сообщение от Joni Scripts
Как сделать проверку на этот диалог в RPC который дает мне сервер, код ниже не работает, find не умею пользоваться
C++:
Код:
if
(
strstr
(
cInfo
,
"Введите ник игрока, пригласившего вас на сервер или промокод"
)
&&
strstr
(
cCaption
,
"{FFFFFF}Приглашение | {ae433d}Регистрация"
)
)
{
//
}
|
|
|

12.11.2020, 21:44
|
|
Познавший АНТИЧАТ
Регистрация: 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
|
|
|

12.11.2020, 21:56
|
|
Познающий
Регистрация: 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)
|
|
|
|