ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   RakHook 1.0-beta (https://forum.antichat.xyz/showthread.php?t=1369666)

imring 14.11.2020 13:50

RakHook - библиотека, которая добавляет события RakNet'a (входящие/исходящие пакеты и RPC), эмуляцию и отправку пакетов и RPC.

Есть одновременная поддержка версий 0.3.7-R1, 0.3.7-R3-1, 0.3.7-R4 и 0.3DL-R1.

Функции​

C++:





Код:

std
::
uintptr_t rakhook
::
samp_addr
(
std
::
uintptr_t offset
=
0
)
;
// получить адрес samp.dll со смещением
samp_ver rakhook
::
samp_version
(
)
;
// получить версию SA:MP, поддерживаемую RakHook.
bool
rakhook
::
initialize
(
)
;
// инициализировать RakHook.
void
rakhook
::
destroy
(
)
;
// завершение работы библиотеки.
bool
rakhook
::
send
(
RakNet
::
BitStream
*
bs
,
PacketPriority priority
,
PacketReliability reliability
,
char
ord_channel
)
;
// отправка пакета.
bool
rakhook
::
send_rpc
(
int
id
,
RakNet
::
BitStream
*
bs
,
PacketPriority priority
,
PacketReliability reliability
,
char
ord_channel
,
bool
sh_timestamp
)
;
// отправка RPC.
bool
rakhook
::
emul_rpc
(
unsigned
char
id
,
RakNet
::
BitStream
&
rpc_bs
)
;
// эмуляция RPC.
bool
rakhook
::
emul_packet
(
RakNet
::
BitStream
&
pbs
)
;
// эмуляция пакета.



События​

C++:





Код:

// исходящий RPC.
rakhook
::
on_send_rpc
+=
[
]
(
int
&
id
,
RakNet
::
BitStream
*
&
bs
,
PacketPriority
&
priority
,
PacketReliability
&
reliability
,
char
&
ord_channel
,
bool
&
sh_timestamp
)
->
bool
{
return
true
;
}
;
// исходящий пакет.
rakhook
::
on_send_packet
+=
[
]
(
RakNet
::
BitStream
*
&
bs
,
PacketPriority
&
priority
,
PacketReliability
&
reliability
,
char
&
ord_channel
)
->
bool
{
return
true
;
}
;
// входящий RPC.
rakhook
::
on_receive_rpc
+=
[
]
(
unsigned
char
&
id
,
RakNet
::
BitStream
*
&&
bs
)
->
bool
{
return
true
;
}
;
// входящий пакет.
rakhook
::
on_receive_packet
+=
[
]
(
Packet
*
&
p
)
->
bool
{
return
true
;
}
;



Пример: https://github.com/imring/RakHook/tree/master/example

Ссылка на библиотеку: https://github.com/imring/RakHook

taichi 14.11.2020 14:37

А будет когда-то поддержка 03DL?

kin4stat 14.11.2020 14:39

Цитата:

Сообщение от kennytowN

А будет когда-то поддержка 03DL?

Версия официально похоронена калкором

imring 14.11.2020 14:39

Цитата:

Сообщение от kennytowN

А будет когда-то поддержка 03DL?

если дашь .dll - то мб добавлю

taichi 14.11.2020 14:40

Цитата:

Сообщение от KiN4StAt

Версия официально похоронена калкором

И что? На ней есть сервера ведь.

Цитата:

Сообщение от imring

если дашь .dll - то мб добавлю

Спасибо, мне очень нужно отловить входящие RPC с сервера именно на 03DL.

imring 14.11.2020 14:45

Цитата:

Сообщение от kennytowN

Спасибо, мне очень нужно отловить входящие RPC с сервера именно на 03DL.

и еще скинь какой-то сервер, чтобы протетил

taichi 14.11.2020 14:51

Цитата:

Сообщение от imring

и еще скинь какой-то сервер, чтобы протетил

46.174.49.47:7856

nick: imring

pass: 123456

Только так могу, так как серверов на ДЛ довольно мало и найти открытый не представляется возможным.

kin4stat 14.11.2020 15:14

Цитата:

Сообщение от kennytowN

найти открытый не представляется возможным.

MovieServer Reloaded

SA-MP's #1 MovieServer experience! We aim to provide you with the freedom and tools for any of your movie-making needs!

www.reloadedserver.com

imring 14.11.2020 15:34

Цитата:

Сообщение от kennytowN

46.174.49.47:7856
nick: imring
pass: 123456

Только так могу, так как серверов на ДЛ довольно мало и найти открытый не представляется возможным.

запустил локал сервер

https://forum.antichat.xyz/attachments/27605068/

imring 14.11.2020 16:24

мини обнова:

- добавлена поддержка версии 0.3dl-r1

Цитата:

Сообщение от Спойлер


SR_team 14.11.2020 23:29

Цитата:

Сообщение от imring

Поменять версию можно в rakhook.cpp:31.

А в чем проблема детектить версию сампа в рантайме?

imring 14.11.2020 23:40

Цитата:

Сообщение от SR_team

А в чем проблема детектить версию сампа в рантайме?

надо сделать, но это позже

kin4stat 15.11.2020 03:21

За хуки ракпира лайк однозначно.

Кстати я по исходнику так и не понял. В хандлере рпц получается идет перебор хуков, если он есть, то return false?

imring 15.11.2020 11:04

Цитата:

Сообщение от KiN4StAt

если он есть, то return false?

RakHook/rakhook.cpp at master · imring/RakHook

Contribute to imring/RakHook development by creating an account on GitHub.

github.com


если хоть одно событие вернёт false, то пропускается вызов оригинальной RakPeer::HandleRPCPacket

imring 15.11.2020 17:17

0.2-beta:

- исправлена проблема с утечкой памяти в RakClientInterface::Receive (сообщил @#Northn);

- добавлена одновременная поддержка доступных версий SA-MP (предложили @#Northn и @SR_team).

Angr 15.11.2020 20:46

Возможен пример в проект? а то скок пытался - ругается пкд

imring 15.11.2020 21:14

Цитата:

Сообщение от Angr

Возможен пример в проект? а то скок пытался - ругается пкд


imring 02.09.2022 14:41

Обновил RakHook: https://github.com/imring/RakHook/releases/tag/1.0

Сделал свой код немного читабельней (для себя), добавил поддержку CMake и теперь используются хуки от @r4nx (cyanide)

SR_team 02.09.2022 14:52

Цитата:

Сообщение от imring

Обновил RakHook: https://github.com/imring/RakHook/releases/tag/1.0
Сделал свой код немного читабельней (для себя), добавил поддержку CMake и теперь используются хуки от @r4nx (cyanide)

тебе не нужны хуки - глянь как плагины на сервер делают. Клиент тоже такое поддерживает

imring 02.09.2022 14:56

Цитата:

Сообщение от SR_team

тебе не нужны хуки - глянь как плагины на сервер делают. Клиент тоже такое поддерживает

ты про
Код:

RakClientInterface::RegisterAsRemoteProcedureCall
? в принципе можно, но я не помню, почему их не хотел использовать

Dark_Knight 02.09.2022 17:37

Цитата:

Сообщение от imring

ты про
Код:

RakClientInterface::RegisterAsRemoteProcedureCall
? в принципе можно, но я не помню, почему их не хотел использовать

Скорее из-за того, что на каждый РПЦ пришлось регать свой коллбек, но скорее всего я ошибаюсь

SR_team 02.09.2022 22:43

Цитата:

Сообщение от imring

ты про
Код:

RakClientInterface::RegisterAsRemoteProcedureCall
? в принципе можно, но я не помню, почему их не хотел использовать

про PluginAttach

r4nx 03.09.2022 18:10

Цитата:

Сообщение от SR_team

про PluginAttach

а как ты будешь через него исходящие пакеты ловить?

вайега52 11.12.2022 23:20

Дайте по бошке не шарющему дебилу, из-за чего ошибка? я так пониаю я неправильно загрузил либу в проект (добавил в дерикторию и подключил include в свойствах проекта).

main.hpp:





Код:

#include
#include
#include "RakHook/rakhook.hpp"
using
namespace
std
;
LONG wHandle
;
char
buffer
[
64
]
=
{
0
}
;
// function
inline
void
set_pos
(
)
{
RakNet
::
BitStream rpc
;
rpc
.
Write

(
0
)
;
rpc
.
Write

(
0
)
;
rpc
.
Write

(
0
)
;
rakhook
::
emul_rpc
(
12
,
rpc
)
;
}
void
printStringNow
(
const
char
*
text
,
unsigned
int
time
,
unsigned
short
flag
,
bool
bPreviousBrief
)
{
(
(
void
(
__cdecl
*
)
(
const
char
*
,
unsigned
int
,
unsigned
short
,
bool
)
)
0x69F1E0
)
(
text
,
time
,
flag
,
bPreviousBrief
)
;
}



main.cpp:





Код:

#include "main.hpp"
LRESULT CALLBACK
WindowProc
(
HWND hwnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
switch
(
uMsg
)
{
case
WM_KEYUP
:
{
switch
(
wParam
)
{
case
0x31
:
{
*
reinterpret_cast

(
0xC81320
)
+=
1
;
/*
                        sprintf(buffer, "weatherID: %d", *(unsigned __int16*)0xC81320);
                        printStringNow(buffer, 1000, NULL, false);
                    */
break
;
}
case
0x32
:
{
*
reinterpret_cast

(
0xC81320
)
-=
1
;
/*
                        sprintf(buffer, "weatherID: %d", *(unsigned __int16*)0xC81320);
                        printStringNow(buffer, 1000, NULL, false);
                    */
break
;
}
case
0x33
:
{
set_pos
(
)
;
printStringNow
(
"spawn"
,
1000
,
NULL
,
false
)
;
}
}
}
}
return
CallWindowProcA
(
WNDPROC
(
wHandle
)
,
hwnd
,
uMsg
,
wParam
,
lParam
)
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD fdwReason
,
LPVOID lpReserved
)
{
switch
(
fdwReason
)
{
case
DLL_PROCESS_ATTACH
:
{
DisableThreadLibraryCalls
(
hModule
)
;
wHandle
=
SetWindowLongA
(
FindWindowA
(
NULL
,
"GTA:SA:MP"
)
,
GWL_WNDPROC
,
LONG
(
WindowProc
)
)
;
break
;
}
case
DLL_PROCESS_DETACH
:
{
break
;
}
}
return
TRUE
;
}



1670786225453.pngвайега52 · 11 Дек 2022 в 22:20' data-fancybox="lb-post-1213712" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/181345/" style="cursor: pointer;" title="1670786225453.png">
https://forum.antichat.xyz/attachments/28213712/

1670788896501.pngвайега52 · 11 Дек 2022 в 22:20' data-fancybox="lb-post-1213712" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/181349/" style="cursor: pointer;" title="1670788896501.png">
https://forum.antichat.xyz/attachments/28213712/

imring 12.12.2022 02:03

Цитата:

Сообщение от egaa

Дайте по бошке не шарющему дебилу, из-за чего ошибка? я так пониаю я неправильно загрузил либу в проект (добавил в дерикторию и подключил include в свойствах проекта).

main.hpp:





Код:

#include
#include
#include "RakHook/rakhook.hpp"
using
namespace
std
;
LONG wHandle
;
char
buffer
[
64
]
=
{
0
}
;
// function
inline
void
set_pos
(
)
{
RakNet
::
BitStream rpc
;
rpc
.
Write

(
0
)
;
rpc
.
Write

(
0
)
;
rpc
.
Write

(
0
)
;
rakhook
::
emul_rpc
(
12
,
rpc
)
;
}
void
printStringNow
(
const
char
*
text
,
unsigned
int
time
,
unsigned
short
flag
,
bool
bPreviousBrief
)
{
(
(
void
(
__cdecl
*
)
(
const
char
*
,
unsigned
int
,
unsigned
short
,
bool
)
)
0x69F1E0
)
(
text
,
time
,
flag
,
bPreviousBrief
)
;
}



main.cpp:





Код:

#include "main.hpp"
LRESULT CALLBACK
WindowProc
(
HWND hwnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
switch
(
uMsg
)
{
case
WM_KEYUP
:
{
switch
(
wParam
)
{
case
0x31
:
{
*
reinterpret_cast

(
0xC81320
)
+=
1
;
/*
                        sprintf(buffer, "weatherID: %d", *(unsigned __int16*)0xC81320);
                        printStringNow(buffer, 1000, NULL, false);
                    */
break
;
}
case
0x32
:
{
*
reinterpret_cast

(
0xC81320
)
-=
1
;
/*
                        sprintf(buffer, "weatherID: %d", *(unsigned __int16*)0xC81320);
                        printStringNow(buffer, 1000, NULL, false);
                    */
break
;
}
case
0x33
:
{
set_pos
(
)
;
printStringNow
(
"spawn"
,
1000
,
NULL
,
false
)
;
}
}
}
}
return
CallWindowProcA
(
WNDPROC
(
wHandle
)
,
hwnd
,
uMsg
,
wParam
,
lParam
)
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD fdwReason
,
LPVOID lpReserved
)
{
switch
(
fdwReason
)
{
case
DLL_PROCESS_ATTACH
:
{
DisableThreadLibraryCalls
(
hModule
)
;
wHandle
=
SetWindowLongA
(
FindWindowA
(
NULL
,
"GTA:SA:MP"
)
,
GWL_WNDPROC
,
LONG
(
WindowProc
)
)
;
break
;
}
case
DLL_PROCESS_DETACH
:
{
break
;
}
}
return
TRUE
;
}



библиотеку надо собрать через cmake

guts 26.12.2022 00:40

Цитата:

Сообщение от imring

библиотеку надо собрать через cmake

Kak

AnWu 29.12.2022 23:26

Цитата:

Сообщение от Pozzibros71299

Kak

Open windows promot

cd path_to_rakhook

mkdir build && cd build

cmake .. -A Win32

cmake --build .

результптом будет rakhook.lib который необходимо подключить к проекту, а так же добавить инклюды.

Однако это не всë, ракхук имеет доп закисимости в виде цианида, а тот зависит от полихука. Всë это нужно подключать к проекту.

Как сказал имринг - лучше собирать через симейк. Могу выложить пример проекта, но только после нг. к тому же он нестабилен из-за хуков @kin4stat

AnWu 30.12.2022 20:55

Цитата:

Сообщение от Pozzibros71299

Kak

GitHub - AnWuPP/plugin

Contribute to AnWuPP/plugin development by creating an account on GitHub.

github.com


Мне сказали код говно, но да ладно. Собирал x86 компилятором студии.

открой папку в cmd в которой нужно собрать

Код:





Код:

git clone https://github.com/AnWuPP/plugin.git
cd plugin && code .



Если установлен VSCode - откроется.

https://forum.antichat.xyz/attachments/28225795/

Нужные расширения

Дальше сюда:

https://forum.antichat.xyz/attachments/28225795/

Выбираешь VS компилятор x86 или x86_64 (в зависимости чо есть в меню)

Дальше выбираешь Debug конфигурацию из меню

Создается кеш симейка,

Жмешь Build и ждёшь.

CMakeList.txt:

У меня там свой путь до папки с игрой, туда закинет файл OASys.asi. Измени путь, ну и название тоже.

Если есть вопросы - задавай. Отвечу если скилла хватит.

UPD: Изменил название, убрал путь до папки с игрой. MSVC будет собирать в Debug папку.

Rvmsitow 16.02.2024 13:31

do u know how to get memory offsets please ?

вайега52 16.02.2024 13:33

Цитата:

Сообщение от Rvmsitow

do u know how to get memory offsets please ?

какие именно?

Rvmsitow 16.02.2024 17:54

Цитата:

Сообщение от why ega

какие именно?

Я думаю, это сложно, но исправьте лимит CreateVehicle (AddStatic...) (611+) с клиента

Loku 23.08.2024 14:00

I noticed that no matter what, you never receive RPC 115 (GiveTakeDamage), does anyone know why?

Foxy01 03.11.2024 14:45

Добавь поддержку R2 и R5, у тебя есть форки, в которых были добавлены эти версии

pidr6800 04.02.2025 18:14

Из-за чего пакет может не всегда эмулироваться и как это можно пофиксить? (пакет для интерфейсов на радмире)

C++:





Код:

void
executeJs
(
const
std
::
string
&
code
)
{
if
(
code
.
empty
(
)
)
return
;
RakNet
::
BitStream bs
;
bs
.
ResetWritePointer
(
)
;
bs
.
Write
(
(
int8_t
)
215
)
;
bs
.
Write
(
(
int16_t
)
2
)
;
bs
.
Write
(
(
int32_t
)
2
)
;
bs
.
Write
(
(
int8_t
)
1
)
;
bs
.
Write
(
(
int32_t
)
code
.
length
(
)
)
;
bs
.
Write
(
code
.
c_str
(
)
,
code
.
length
(
)
)
;
rakhook
::
emul_packet
(
bs
)
;
}



Время: 01:01