HandShake Bufferoverflow Deneysel Fix for GPT

WebElbir

Metin2 Developer
Üye
Mesaj
28
Beğeni
70
Puan
735
Ticaret Puanı
0
Merhaba arkadaşlar Şu konuda geçen saldırı metodunu chatgpt'ye sordum ve birkaç fix önerisi verdi ama deneyecek bir sunucuya veya saldırı metoduna sahip olmadığım için deneyemedim forumdaki benden usta arkadaşlarımız belki yorumda bulunur birlikte çözüm üretiriz diye konu açmak istedim :)

1772221501625.webp

desc.cpp:
Genişlet Daralt Kopyala
    Bul: bytes_read = socket_read(m_sock, (char*)buffer_write_peek(m_lpInputBuffer), buffer_has_space(m_lpInputBuffer));
    Değiştir;
    int bytes_to_read = buffer_has_space(m_lpInputBuffer);
    // Safety: if the input buffer is full, close to prevent memory/CPU abuse under flood.
    if (bytes_to_read <= 0)
    {
        sys_err("DESC::ProcessInput : input buffer overflow fd %d host %s", m_sock, m_stHost.c_str());
        SetPhase(PHASE_CLOSE);
        return -1;
    }
    bytes_read = socket_read(m_sock, (char*)buffer_write_peek(m_lpInputBuffer), bytes_to_read);

1772221570542.webp


input.cpp:
Genişlet Daralt Kopyala
Bul: else if (!m_pPacketInfo->Get(bHeader, &iPacketLen, &c_pszName))
İçerisinde bul: lpDesc->SetPhase(PHASE_CLOSE);
Altına ekle: r_iBytesProceed += m_iBufferLeft;

Bul: if (iExtraPacketSize < 0)
İçerisinde bul: return true;
Üstüne ekle: r_iBytesProceed += m_iBufferLeft;

1772221669669.webp


input.cpp:
Genişlet Daralt Kopyala
Bul: sys_log(0, "HANDSHAKE phase does not handle packet %d (fd %d) (source %s:%u)", bHeader, d->GetSocket(), d->GetHostName(), d->GetPort());
Değiştir;
        sys_log(0, "HANDSHAKE phase does not handle packet %d (fd %d) (source %s:%u)", bHeader, d->GetSocket(), d->GetHostName(), d->GetPort());
        d->SetPhase(PHASE_CLOSE);
        return -1;
 
Hocam hepinizin yanıldığı bir nokta var siz sadece 1 methota yöneliyorsunuz methot değiştikçe fixler işe yaramayacaktır.
 
birini çözelimde diğeri olunca diğerinide çözeriz elbet hocam böyle hedef alanları engellemek gerek
 
Hocam hepinizin yanıldığı bir nokta var siz sadece 1 methota yöneliyorsunuz methot değiştikçe fixler işe yaramayacaktır.
O yüzden şuan bütün saldırı olasılıkları üzerine çalışıyorum hocam, şuana kadar paketleri RAM'de banlamayı başardım, şimdi de Blacklist yapıya geçirmeye çalışıyorum, böylece script ile yönetilebilir bir IP list tabanı oluşturacağım. DdoS atak yer gibi olası paket saldırılarına karşı korunma mekaniği olacak yani inşallah :)
 
O yüzden şuan bütün saldırı olasılıkları üzerine çalışıyorum hocam, şuana kadar paketleri RAM'de banlamayı başardım, şimdi de Blacklist yapıya geçirmeye çalışıyorum, böylece script ile yönetilebilir bir IP list tabanı oluşturacağım. DdoS atak yer gibi olası paket saldırılarına karşı korunma mekaniği olacak yani inşallah :)
Tahminim onunda fixli methodunu bulurlar diye düşünüyorum
 
Tahminim onunda fixli methodunu bulurlar diye düşünüyorum
Muhtemelen ama ben her çalışmayı direk kanca prensibi ile kuruyorum, oyunun orjinal mekaniğine kanca attığım için ister istemez yakalanıyor 😂 Mesela Login girişlerin bir çoğu sunucularda limitsiz, itemlerin yer değiştirme özelliği limitsiz, sunucuya yük bindirme adına basit makrolar bile manipüle edebilir, denemeden bilemeyiz tabi ama ben bunları da limitlemenin derdindeyim. En büyük korkum bu anlamda k envanter ve envanter düzenleme. Onu da kendim düzenleme süresi ile indirgeme yapıyorum ama paylaştığım kişi bilinçsiz kullanırsa oyuncusu k envanter, offline shop vb durumlarda laga girerse falan paket saldırı olarak algılanır sonra GG 😀
 
Geri
Üst