ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   bitstream readbits stack overflow fix (https://forum.antichat.xyz/showthread.php?t=1516904)

atomlin 24.07.2024 22:01

Исправляет https://www.blast.hk/threads/216813/

GitHub - atomlin-git/srv-crashfix: corrects the possibility crash samp 0.3.7 servers with incorrect read_bits size

corrects the possibility crash samp 0.3.7 servers with incorrect read_bits size - atomlin-git/srv-crashfix

github.com


thanks @Sargon

M O R R E T I 24.07.2024 22:10

всё проще намного, povargek зальет фикс думаю, т.к. пошел по рукам.

povargek 24.07.2024 22:13

Цитата:

Сообщение от M O R R E T I

всё проще намного, povargek зальет фикс думаю, т.к. пошел по рукам.

эта штука и фиксит корень проблемы на самом деле все таки.

то что было в самом крашере - видимо просто запутать

M O R R E T I 24.07.2024 22:14

Цитата:

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

эта штука и фиксит корень проблемы на самом деле все таки.
то что было в самом крашере - видимо просто запутать

я больше о том, что не каждый плагин соберет.

povargek 24.07.2024 22:19

А сигнатуры у тебя под какую версию сделаны? Крашит на первом же нормальном пакете (при подключении)

Код:





Код:

[24/07/2024 21:18:17] [debug] Server crashed due to an unknown error
[24/07/2024 21:18:17] [debug] Native backtrace:
[24/07/2024 21:18:17] [debug] #0 f7a79e8b in _ZN10StackTraceC1EPv () from plugins/crashdetect.so
[24/07/2024 21:18:17] [debug] #1 f7a72bcf in _ZN11CrashDetect20PrintNativeBacktraceERSoPv () from plugins/crashdetect.so
[24/07/2024 21:18:17] [debug] #2 f7a73dbc in _ZN11CrashDetect20PrintNativeBacktraceEPv () from plugins/crashdetect.so
[24/07/2024 21:18:17] [debug] #3 f7a74226 in _ZN11CrashDetect11OnExceptionEPv () from plugins/crashdetect.so
[24/07/2024 21:18:17] [debug] #4 f7a79adc in ?? () from plugins/crashdetect.so
[24/07/2024 21:18:17] [debug] #5 f7f25090 in __kernel_rt_sigreturn () from linux-gate.so.1
[24/07/2024 21:18:17] [debug] #6 f7bddcd5 in ?? () from /lib32/libc.so.6
[24/07/2024 21:18:17] [debug] #7 0804ce9a in ?? () from ./samp03testsvr
[24/07/2024 21:18:17] [debug] #8 f5709322 in _Z9read_bitsPvS_Phib () from plugins/lf.so
[24/07/2024 21:18:17] [debug] #9 0807e125 in ?? () from ./samp03testsvr
[24/07/2024 21:18:17] [debug] #10 0808106e in ?? () from ./samp03testsvr
[24/07/2024 21:18:17] [debug] #11 08073680 in ?? () from ./samp03testsvr
[24/07/2024 21:18:17] [debug] #12 0808ec9d in ?? () from ./samp03testsvr
[24/07/2024 21:18:17] [debug] #13 08074846 in ?? () from ./samp03testsvr
[24/07/2024 21:18:17] [debug] #14 080763fe in ?? () from ./samp03testsvr
[24/07/2024 21:18:17] [debug] #15 f7eedfd2 in ?? () from /lib32/libpthread.so.0
[24/07/2024 21:18:17] [debug] #16 f7b96c96 in clone () from /lib32/libc.so.6


mhertz 24.07.2024 22:21

Цитата:

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

А сигнатуры у тебя под какую версию сделаны? Крашит на первом же нормальном пакете (при подключении)

Код:





Код:

[24/07/2024 21:18:17] [debug] Server crashed due to an unknown error
[24/07/2024 21:18:17] [debug] Native backtrace:
[24/07/2024 21:18:17] [debug] #0 f7a79e8b in _ZN10StackTraceC1EPv () from plugins/crashdetect.so
[24/07/2024 21:18:17] [debug] #1 f7a72bcf in _ZN11CrashDetect20PrintNativeBacktraceERSoPv () from plugins/crashdetect.so
[24/07/2024 21:18:17] [debug] #2 f7a73dbc in _ZN11CrashDetect20PrintNativeBacktraceEPv () from plugins/crashdetect.so
[24/07/2024 21:18:17] [debug] #3 f7a74226 in _ZN11CrashDetect11OnExceptionEPv () from plugins/crashdetect.so
[24/07/2024 21:18:17] [debug] #4 f7a79adc in ?? () from plugins/crashdetect.so
[24/07/2024 21:18:17] [debug] #5 f7f25090 in __kernel_rt_sigreturn () from linux-gate.so.1
[24/07/2024 21:18:17] [debug] #6 f7bddcd5 in ?? () from /lib32/libc.so.6
[24/07/2024 21:18:17] [debug] #7 0804ce9a in ?? () from ./samp03testsvr
[24/07/2024 21:18:17] [debug] #8 f5709322 in _Z9read_bitsPvS_Phib () from plugins/lf.so
[24/07/2024 21:18:17] [debug] #9 0807e125 in ?? () from ./samp03testsvr
[24/07/2024 21:18:17] [debug] #10 0808106e in ?? () from ./samp03testsvr
[24/07/2024 21:18:17] [debug] #11 08073680 in ?? () from ./samp03testsvr
[24/07/2024 21:18:17] [debug] #12 0808ec9d in ?? () from ./samp03testsvr
[24/07/2024 21:18:17] [debug] #13 08074846 in ?? () from ./samp03testsvr
[24/07/2024 21:18:17] [debug] #14 080763fe in ?? () from ./samp03testsvr
[24/07/2024 21:18:17] [debug] #15 f7eedfd2 in ?? () from /lib32/libpthread.so.0
[24/07/2024 21:18:17] [debug] #16 f7b96c96 in clone () from /lib32/libc.so.6



скорее всего проблема в том, что он хукает на линуксе функу как thiscall

povargek 24.07.2024 22:45

Цитата:

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

скорее всего проблема в том, что он хукает на линуксе функу как thiscall

фикс работает

Цитата:

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

фикс работает

тут речт шла не то том фиксе, что щас на гите появился. он все равно крашит. просто сделал так:

С++:





Код:

bool __fastcall read_bits(void* ptr, unsigned char* output, int num_to_read, bool align_to_read) { // , void* edx
    printf("Test");
    int NumberOfUnreadBits = *((unsigned long *)ptr) - *((unsigned long *)ptr + 2);
    if(NumberOfUnreadBits (ptr, output, num_to_read, align_to_read);
};



@atomlin

delanov 24.07.2024 23:20

У меня плагин не загружается даже, и не знаю что приложить к этому сообщению

cl : командная строка error D8016: несовместимые параметры командной строки "/O2" и "/RTC1" [C:\Users\Vladislav\srv-cr

ashfix\scf.vcxproj]

povargek 24.07.2024 23:58

@atomlin стоит проверить это все: https://github.com/SLikeSoft/SLikeNe...ab949ba038b5ab

говорят доблят сервы и с плагином

atomlin 25.07.2024 00:17

Цитата:

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

@atomlin стоит проверить это все: https://github.com/SLikeSoft/SLikeNe...ab949ba038b5ab

говорят доблят сервы и с плагином

падают сервера с самописной защитой, то что в коммите - посмотрю

Цитата:

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

конечно долбят, искать вред пакет по паттерну)0)0)

к чему ты это написал? паттерн в коде для нахождения функции BitStream::ReadBits

iAmir 25.07.2024 00:21

Исправление также доступно в open.mp.

- fixed multiple security vulnerabilities in the BitStream class · openmultiplayer/RakNet@021dd2f

Our own modification of RakNet used in open.mp. Contribute to openmultiplayer/RakNet development by creating an account on GitHub.

github.com


Еще один повод мигрировать!

Armanish 25.07.2024 00:46

Failed (/lib/libc.so.6: version GLIBC_2.33' not found (required by plugins/libscf.so)) - Как исправить?

uymuym 25.07.2024 00:52

всмисле а как его залить там нету плагина или инклуда

povargek 25.07.2024 00:54

Цитата:

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

падают сервера с самописной защитой, то что в коммите - посмотрю

к чему ты это написал? паттерн в коде для нахождения функции BitStream::ReadBits

все же все больше людей говорят обход какой-то нашли

povargek 25.07.2024 00:59

Цитата:

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

я конечно не ультрахакер, но я просто поменял хеш и оно дальше кроет

не крашит

delanov 25.07.2024 01:01

Цитата:

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

не крашит

у меня крашил рашу рп, когда старая его версия не крашила

NaN_ 25.07.2024 01:05

Возможно сделать фикс с помощю pawn raknet?

povargek 25.07.2024 01:06

@atomlin все же это действительно так, добрались и до моего

[25/07/2024 00:01:03] [debug] Server crashed due to an unknown error

Armanish 25.07.2024 01:12

Failed (/lib/libc.so.6: version GLIBC_2.33' not found (required by plugins/libscf.so)) - Как исправить?

uymuym 25.07.2024 01:13

а как его залить если там нет плагина компилировать штоли?

NaN_ 25.07.2024 01:19

Возможно сделать фикс с помощю pawn raknet?

uymuym 25.07.2024 01:42

@atomlin как его залить его надо через визуал студио код компилить?

RazorRw 25.07.2024 01:57

Цитата:

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

Возможно сделать фикс с помощю pawn raknet?

да

neonpro5 25.07.2024 02:00

ИНУСТРУКЦИЯ ДЛЯ Linux серверов.

Подключаетесь к хостингу по ssh или запускаете на виртуалке тот дистрибутив линукса, на котором у вас стоит сервер.

Далее скачиваете git и cmake (вероятнее всего для вас это будет команда sudo apt install git, sudo apt install cmake).

Далее скачиваем репозиторий с помощью команды git clone https://github.com/atomlin-git/srv-crashfix.git

Переходим в него с помощью команды cd srv-crashfix

Создаём папку build, с помощью команды mkdir build

заходим в папку cd build

собираем проект с помощью cmake: cmake ..

компилируем проект make

проект собран

uymuym 25.07.2024 02:10

Цитата:

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

ИНУСТРУКЦИЯ ДЛЯ Linux серверов.
Подключаетесь к хостингу по ssh или запускаете на виртуалке тот дистрибутив линукса, на котором у вас стоит сервер.
Далее скачиваете git и cmake (вероятнее всего для вас это будет команда sudo apt install git, sudo apt install cmake).
Далее скачиваем репозиторий с помощью команды git clone https://github.com/atomlin-git/srv-crashfix.git
Переходим в него с помощью команды cd srv-crashfix
Создаём папку build, с помощью команды mkdir build
заходим в папку cd build
собираем проект с помощью cmake: cmake ..
компилируем проект make
проект собран

root@vds-97946:~/srv-crashfix# cmake cmake /root/srv-crashfix

-- The C compiler identification is GNU 5.4.0

-- The CXX compiler identification is GNU 5.4.0

-- Check for working C compiler: /usr/bin/cc

-- Check for working C compiler: /usr/bin/cc -- works

-- Detecting C compiler ABI info

-- Detecting C compiler ABI info - done

-- Detecting C compile features

-- Detecting C compile features - done

-- Check for working CXX compiler: /usr/bin/c++

-- Check for working CXX compiler: /usr/bin/c++ -- works

-- Detecting CXX compiler ABI info

-- Detecting CXX compiler ABI info - done

-- Detecting CXX compile features

-- Detecting CXX compile features - done

You have called ADD_LIBRARY for library scf without any source files. This typically indicates a problem with your CMakeLists.txt file

-- Configuring done

-- Generating done

-- Build files have been written to: /root/srv-crashfix

root@vds-97946:~/srv-crashfix# cmake: cmake ..

-bash: cmake:: command not found

root@vds-97946:~/srv-crashfix# make

Scanning dependencies of target scf

[ 50%] Building CXX object CMakeFiles/scf.dir/source/main.cpp.o

In file included from /usr/include/dlfcn.h:22:0,

from /root/srv-crashfix/includes/urmem.hpp:32,

from /root/srv-crashfix/includes/headers.hpp:3,

from /root/srv-crashfix/source/main.cpp:1:

/usr/include/features.h:367:25: fatal error: sys/cdefs.h: No such file or directory

compilation terminated.

CMakeFiles/scf.dir/build.make:62: recipe for target 'CMakeFiles/scf.dir/source/main.cpp.o' failed

make[2]: *** [CMakeFiles/scf.dir/source/main.cpp.o] Error 1

CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/scf.dir/all' failed

make[1]: *** [CMakeFiles/scf.dir/all] Error 2

Makefile:83: recipe for target 'all' failed

make: *** [all] Error 2

root@vds-97946:~/srv-crashfix# cd build

root@vds-97946:~/srv-crashfix/build# make

Scanning dependencies of target scf

[ 50%] Building CXX object CMakeFiles/scf.dir/source/main.cpp.o

In file included from /usr/include/dlfcn.h:22:0,

from /root/srv-crashfix/includes/urmem.hpp:32,

from /root/srv-crashfix/includes/headers.hpp:3,

from /root/srv-crashfix/source/main.cpp:1:

/usr/include/features.h:367:25: fatal error: sys/cdefs.h: No such file or directory

compilation terminated.

CMakeFiles/scf.dir/build.make:62: recipe for target 'CMakeFiles/scf.dir/source/main.cpp.o' failed

make[2]: *** [CMakeFiles/scf.dir/source/main.cpp.o] Error 1

CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/scf.dir/all' failed

make[1]: *** [CMakeFiles/scf.dir/all] Error 2

Makefile:83: recipe for target 'all' failed

make: *** [all] Error 2

root@vds-97946:~/srv-crashfix/build# make

[ 50%] Building CXX object CMakeFiles/scf.dir/source/main.cpp.o

In file included from /usr/include/dlfcn.h:22:0,

from /root/srv-crashfix/includes/urmem.hpp:32,

from /root/srv-crashfix/includes/headers.hpp:3,

from /root/srv-crashfix/source/main.cpp:1:

/usr/include/features.h:367:25: fatal error: sys/cdefs.h: No such file or directory

compilation terminated.

CMakeFiles/scf.dir/build.make:62: recipe for target 'CMakeFiles/scf.dir/source/main.cpp.o' failed

make[2]: *** [CMakeFiles/scf.dir/source/main.cpp.o] Error 1

CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/scf.dir/all' failed

make[1]: *** [CMakeFiles/scf.dir/all] Error 2

Makefile:83: recipe for target 'all' failed

make: *** [all] Error 2

что делать

kpect_94 25.07.2024 02:10

Цитата:

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

ИНУСТРУКЦИЯ ДЛЯ Linux серверов.
Подключаетесь к хостингу по ssh или запускаете на виртуалке тот дистрибутив линукса, на котором у вас стоит сервер.
Далее скачиваете git и cmake (вероятнее всего для вас это будет команда sudo apt install git, sudo apt install cmake).
Далее скачиваем репозиторий с помощью команды git clone https://github.com/atomlin-git/srv-crashfix.git
Переходим в него с помощью команды cd srv-crashfix
Создаём папку build, с помощью команды mkdir build
заходим в папку cd build
собираем проект с помощью cmake: cmake ..
компилируем проект make
проект собран

И радуемся от того что сервер всё равно крашится)

pendaras 25.07.2024 02:19

Цитата:

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

И радуемся от того что сервер всё равно крашится)

А что ты хотел увидеть? Никто бесплатно тебе "супер рабочий" скрипт не напишет.

asgardov 25.07.2024 02:20

Цитата:

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

А что ты хотел увидеть? Никто бесплатно тебе "супер рабочий" скрипт не напишет.

Сколько ты хочешь за нормальный фикс? Если хочешь поговорить о цене.

MrCreepTon 25.07.2024 03:09

Цитата:

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

Сколько ты хочешь за нормальный фикс? Если хочешь поговорить о цене.

Если текущее решение ТС не идеально (не могу об этом судить т.к. не тестил), то в любом случае более совершенное решение выйдет в публичном доступе, ибо это в интересах большинства игровых серверов. Вопрос времени и терпения. В данный момент я бы не рекомендовал что-либо покупать в плане фикса, ибо вероятнее всего это будет абсолютно непрагматичная трата денег. А мб вообще надурят.

pendaras 25.07.2024 04:19

Цитата:

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

Если текущее решение ТС не идеально (не могу об этом судить т.к. не тестил), то в любом случае более совершенное решение выйдет в публичном доступе, ибо это в интересах большинства игровых серверов. Вопрос времени и терпения. В данный момент я бы не рекомендовал что-либо покупать в плане фикса, ибо вероятнее всего это будет абсолютно непрагматичная трата денег. А мб вообще надурят.

По этому я и не предлагал никому услуги, я продавал между своими знакомыми, они мне заплатили я и написал.

povargek 25.07.2024 06:19

Автору на заметку: всегда собирай статик в условиях сампа

FYP 25.07.2024 07:36

с этим фиксом можно крашить любыми пакетами с любыми данными, для этого нужно всего лишь пофлудить пакетами. но можно ничего и не делать, сервер сам крашнется. это из-за того, что хук в urmem туда-сюда перезаписывает инструкции при вызове оригинальной функции, а ReadBits вызывается из разных потоков и очень часто, в какой-то момент она вызовется с невалидными инструкциями в прологе в результате датарейса. для исправления надо заменить хуки на нормальные, например subhook, или сделать нормальный фикс, вместо хука пропатчив байт 0x7E по адресу 0x0804CE76 (linux 0.3.7-r2-1) на 0x76 (инструкцию jle на jbe).

а так можно пропатчить бинарник линукс сервера любой версии:

Код:

xxd -p -c0 samp03svr | sed 's/\(7e098b470801f03b07\)7e/\176/' | xxd -p -r > samp03svr_patched

Maddy 25.07.2024 08:32

Цитата:

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

с этим фиксом можно крашить любыми пакетами с любыми данными, для этого нужно всего лишь пофлудить пакетами. но можно ничего и не делать, сервер сам крашнется. это из-за того, что хук в urmem туда-сюда перезаписывает инструкции при вызове оригинальной функции, а ReadBits вызывается из разных потоков и очень часто, в какой-то момент она вызовется с невалидными инструкциями в прологе в результате датарейса. для исправления надо заменить хуки на нормальные, например subhook, или сделать нормальный фикс, пропатчив байт 0x7E по адресу 0x0804CE76 (linux 0.3.7-r2-1) на 0x76 (инструкцию jle на jbe).
а так можно пропатчить бинарник линукс сервера любой версии:

Код:

xxd -p -c0 samp03svr | sed 's/\(7e098b470801f03b07\)7e/\176/' | xxd -p -r > samp03svr_patched

легенда

timmylich. 25.07.2024 08:34

Цитата:

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

с этим фиксом можно крашить любыми пакетами с любыми данными, для этого нужно всего лишь пофлудить пакетами. но можно ничего и не делать, сервер сам крашнется. это из-за того, что хук в urmem туда-сюда перезаписывает инструкции при вызове оригинальной функции, а ReadBits вызывается из разных потоков и очень часто, в какой-то момент она вызовется с невалидными инструкциями в прологе в результате датарейса. для исправления надо заменить хуки на нормальные, например subhook, или сделать нормальный фикс, пропатчив байт 0x7E по адресу 0x0804CE76 (linux 0.3.7-r2-1) на 0x76 (инструкцию jle на jbe).
а так можно пропатчить бинарник линукс сервера любой версии:

Код:

xxd -p -c0 samp03svr | sed 's/\(7e098b470801f03b07\)7e/\176/' | xxd -p -r > samp03svr_patched

Спасибо.

Пока одна проблема - хостер MyArena не позволяет подгрузить свой samp03svr на сервер, придётся ждать пока они проснуться...

Benjes 25.07.2024 09:30

Solución usando Pawn.RakNet

Pawn.RakNet:





[CODE]
IRawPacket
:
20
(
playerid
,
BitStream
:
bs
)
// 20 = ID_RPC
{
new
PacketID
,
RPC_ID
,
NumberOfBitsOfData
;
BS_ReadValue
(
bs
,
PR_UINT8
,
PacketID
,
PR_UINT8
,
RPC_ID
,
PR_CUINT32
,
NumberOfBitsOfData
)
;
printf
(
"IRawPacket -> ID_RPC: playerid: %d, RPC_ID: %d, NumberOfBitsOfData: %d"
,
playerid
,
RPC_ID
,
NumberOfBitsOfData
)
;
if
(
PacketID
==
40
||
(
NumberOfBitsOfData
>=
0x1FFFFF
||
NumberOfBitsOfData


fzfzfz123 25.07.2024 11:34

Цитата:

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

с этим фиксом можно крашить любыми пакетами с любыми данными, для этого нужно всего лишь пофлудить пакетами. но можно ничего и не делать, сервер сам крашнется. это из-за того, что хук в urmem туда-сюда перезаписывает инструкции при вызове оригинальной функции, а ReadBits вызывается из разных потоков и очень часто, в какой-то момент она вызовется с невалидными инструкциями в прологе в результате датарейса. для исправления надо заменить хуки на нормальные, например subhook, или сделать нормальный фикс, вместо хука пропатчив байт 0x7E по адресу 0x0804CE76 (linux 0.3.7-r2-1) на 0x76 (инструкцию jle на jbe).
а так можно пропатчить бинарник линукс сервера любой версии:

Код:

xxd -p -c0 samp03svr | sed 's/\(7e098b470801f03b07\)7e/\176/' | xxd -p -r > samp03svr_patched

это просто исправление одного бита! идеально 😆

Nexius 25.07.2024 11:58

Цитата:

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

А что ты хотел увидеть? Никто бесплатно тебе "супер рабочий" скрипт не напишет.

Как видишь, уже написали (бинарники тут). Но лично я рекомендую омп как вариант, с которым вряд ли возникнут и любые возможные прецеденты в дальнейшем, при нахождении чего-то подобного в иной раз у самп сервера.

RazorRw 25.07.2024 13:00

[QUOTE="Benjes"]

Solución usando Pawn.RakNet

Pawn.RakNet:





[CODE]
IRawPacket
:
20
(
playerid
,
BitStream
:
bs
)
// 20 = ID_RPC
{
new
PacketID
,
RPC_ID
,
NumberOfBitsOfData
;
BS_ReadValue
(
bs
,
PR_UINT8
,
PacketID
,
PR_UINT8
,
RPC_ID
,
PR_CUINT32
,
NumberOfBitsOfData
)
;
printf
(
"IRawPacket -> ID_RPC: playerid: %d, RPC_ID: %d, NumberOfBitsOfData: %d"
,
playerid
,
RPC_ID
,
NumberOfBitsOfData
)
;
if
(
PacketID
==
40
||
(
NumberOfBitsOfData
>=
0x1FFFFF
||
NumberOfBitsOfData

Nexius 25.07.2024 13:23

[QUOTE="Benjes"]

Solución usando Pawn.RakNet

Pawn.RakNet:





[CODE]
IRawPacket
:
20
(
playerid
,
BitStream
:
bs
)
// 20 = ID_RPC
{
new
PacketID
,
RPC_ID
,
NumberOfBitsOfData
;
BS_ReadValue
(
bs
,
PR_UINT8
,
PacketID
,
PR_UINT8
,
RPC_ID
,
PR_CUINT32
,
NumberOfBitsOfData
)
;
printf
(
"IRawPacket -> ID_RPC: playerid: %d, RPC_ID: %d, NumberOfBitsOfData: %d"
,
playerid
,
RPC_ID
,
NumberOfBitsOfData
)
;
if
(
PacketID
==
40
||
(
NumberOfBitsOfData
>=
0x1FFFFF
||
NumberOfBitsOfData

Benjes 25.07.2024 16:17

Цитата:

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

Not a proper solution, the cause is not related exactly to this packet you're checking

В этот момент пришла хорошая идея 😅👌🏻

Цитата:

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

а если пакет будет обернут в ID_TIMESTAMP?

💥


Время: 02:41