Metin2 Buffer & Packet Security Fix – Protecție Network
Thanks @SystemPolaris
Acest fix îmbunătățește securitatea și stabilitatea sistemului de buffer și a pachetelor de rețea din Metin2. Sunt adăugate mai multe verificări pentru dimensiuni invalide, overflow-uri, citirea datelor și procesarea pachetelor dinamice.
- blochează lungimile negative și dimensiunile invalide;
- previne citirea în afara datelor existente în buffer;
- adaugă verificări pentru overflow la alocarea memoriei;
- reutilizează spațiul consumat din buffer înainte de realocare;
- validează pachetele dinamice și pachetele HybridCrypt;
- adaugă verificări suplimentare pentru Guild Mark și Symbol Data.
*Link download / Code:
Deschide libthecore/src/buffer.c si cauta:
Code:
void buffer_realloc(LPBUFFER& buffer, int length);Cauta in ambele functii buffer_get_pool_index si buffer_get_exac_pool_index:
Code:
for (i = 0; i < 32; ++i) {Cauta:
Code:
LPBUFFER buffer_new(int size)Cauta:
Code:
void buffer_write(LPBUFFER& buffer, const void *src, int length)Cauta:
Code:
void buffer_read(LPBUFFER buffer, void * buf, int bytes)Cauta aceste trei functii:
Code:
buffer_byte
buffer_word
buffer_dwordCauta:
Code:
void buffer_read_proceed(LPBUFFER buffer, int length)Cauta:
Code:
void buffer_write_proceed(LPBUFFER buffer, int length)Cauta:
Code:
void buffer_adjust_size(LPBUFFER& buffer, int add_size)Cauta:
Code:
void buffer_realloc(LPBUFFER& buffer, int length)Deschide EterLib/NetStream.cpp si cauta:
Code:
void CNetworkStream::SetRecvBufferSize(int recvBufSize)
void CNetworkStream::ReleaseRecvBuffer()Cauta:
Code:
void CNetworkStream::SetSendBufferSize(int sendBufSize)Dupa m_sendBuf si m_sendTEABuf adauga:
Cauta in CNetworkStream::CNetworkStream:
Code:
m_sendTEABufCauta:
Code:
bool CNetworkStream::Peek(int size)Cauta:
Code:
bool CNetworkStream::Peek(int size, char * pDestBuf)Cauta:
Code:
bool CNetworkStream::Send(int size, const char * pSrcBuf)Cauta toate aparitiile:
Code:
if (recvSize < 0)Deschide UserInterface/PythonNetworkStream.cpp si cauta:
Code:
TDynamicSizePacketHeader DynamicSizePacketHeader;Deschide UserInterface/Packet.h si cauta:
Code:
SPacketGCHybridCryptKeys
SPacketGCHybridSDBDeschide UserInterface/PythonNetworkStreamPhaseHandShake.cpp si cauta:
Code:
bool CPythonNetworkStream::RecvHybridCryptKeyPacket()Cauta:
Code:
bool CPythonNetworkStream::RecvHybridCryptSDBPacket()Deschide UserInterface/AccountConnector.cpp si cauta:
Code:
bool CAccountConnector::__AuthState_RecvHybridCryptKeys(int iTotalSize)Cauta:
Code:
bool CAccountConnector::__AuthState_RecvHybridCryptSDB(int iTotalSize)Cauta in CAccountConnector::__AnalyzeVarSizePacket:
Code:
TDynamicSizePacketHeader dynamicHeader;
if (!Peek(sizeof(dynamicHeader), &dynamicHeader))
return true;Deschide UserInterface/GuildMarkDownloader.cpp si cauta:
Code:
__LoginState_RecvMarkBlockInainte de bucla pentru block-uri adauga:
Valideaza fiecare block comprimat cu:
Dupa bucla adauga:
Cauta:
Code:
__LoginState_RecvSymbolData

la acest mesaj și conținutul se va afișa automat.



