Client - AntiCheat - Server & Oyunlarda paket sistemi ile bilgi transferi.

Hexist

Gold Üye
Katılım
9 Kas 2024
Mesajlar
169
Beğeniler
78
Herkese selamlar iyi forumlar , son zamanlarda MMORPG oyunlarına merak saldım ve bazılarında hile & bot yazılımları geliştirmeye başladım ,oyunlar da ki hemen hemen tüm kontroller server taraflı korunuyor örneğin karakterin parası canı atağı aklınıza gelebilecek her türlü veriyi server iletiyor tabi ki olması gerektiği gibi . Çoğu işlem de paket alışverişi ile yapılıyor , örneğin bir moba saldırı , pot basma , mob seçme gibi temel MMORPG işlemleri client tarafında PTR_PACKET ve SND_FUNCTION olarak tanımladığım iki adet bellek adresi var PTR_PACKET gönderilecek paketi alıyor saklıyor ve SND paketi ile birlikte sunucuya iletiyor , basitçe bir pointer gönderilecek paketi temsil ediyor diğer bir pointer paketin gönderilmesini sağlıyor , bazı oyunlar send fonksiyonuna değişik kontroller koymuşlar sanırım bot yapımı engellemek ve illegal paket alışverişini gözlemlemek için .

C++:
void send(BYTE* pBuf,int len) {
    __asm{
    MOV ECX,PTR_PACKET   // Paket pointerı
    MOV ECX,DWORD PTR DS:[ECX]
    PUSH len // paket uzunluğu
    PUSH pBuf // paket boyutu
    MOV EAX,SND_FUNCTION // send fonksiyonu
    CALL EAX
    }
 }

yukarıda paket iletişimi için hazırladığım bir send fonksiyonu mevcut kabaca bahsetmek gerekirse , dikkat edilmesi gereken hususlar ; paket ve send pointerı doğruluğu , paket uzunluğu tanımlaması , paket boyutu tanımlaması . Reserve eng. kullanarak illegal paket alışverişi yapacağımız için sunucuya istediğimiz paketleri iletebilmenin tek yolu sunucunun paketleri kabul ettiği şekilde göndermek . yaptığım incelemelerde sunucunun dikkat ettiği şeyin paket uzunluğu ve paket boyutu olduğunu farkettim . Örneğin basit bir base atma paketi 4800 olarak belirlenmiş bu paketi yukarıda yazdığımız fonksiyon 0x48, 00 olarak yollayacaktır ki paket sunucu tarafında doğru açılsın ve işleme geçirilsin. Bu konuyu açmamda ki sebep biraz beyin fırtınası yapıp ufku genişletme çabası . Lütfen konu hakkında bilgi sahibi olan arkadaşlar konuya fikirlerini yazsınlar her yorum benim için kıymetli sizin önemsiz gördüğünüz bir detay belki de çok farklı bir şeyi farketmemi sağlayacak. AYNI ZAMANDA RİCA EDİYORUM , ZERRE BİLGİSİ OLMAYAN ARKADAŞLAR BİLGİLİ GÖZÜKMEK İÇİN APTAL APTAL FİKİRLERİNİ BELİRTMEYE ÇALIŞMASINLAR FENA BOZARIM.
 
hocam discorddan eklermisiniz .valnova.
 
knight online , fakat silkroad ve albion online için de aynı sistem geçerli paket alışverişi oyunun işleyişinin %90'lık bir kısmını kapsıyor . Albion x64 client kullandığı için send fonksiyonunda geniş çaplı güncellemeler gerekiyor benim uzmanlık alanımın biraz dışında ben x86 mimaride çalışıyorum uzun yıllardır sadece kernel çalışırken x64 kullanıyorum . Konuyu açma amacım belki forumda benim gibi ilgisi olan başka üyelerde vardır fikir alışverişi yaparız ortak bir proje geliştiririz .
 
knight online , fakat silkroad ve albion online için de aynı sistem geçerli paket alışverişi oyunun işleyişinin %90'lık bir kısmını kapsıyor . Albion x64 client kullandığı için send fonksiyonunda geniş çaplı güncellemeler gerekiyor benim uzmanlık alanımın biraz dışında ben x86 mimaride çalışıyorum uzun yıllardır sadece kernel çalışırken x64 kullanıyorum . Konuyu açma amacım belki forumda benim gibi ilgisi olan başka üyelerde vardır fikir alışverişi yaparız ortak bir proje geliştiririz .
Anladim. x64 ASM de kafana takilan birsey olursa bana sorabilirsin.
 
Herkese selamlar iyi forumlar , son zamanlarda MMORPG oyunlarına merak saldım ve bazılarında hile & bot yazılımları geliştirmeye başladım ,oyunlar da ki hemen hemen tüm kontroller server taraflı korunuyor örneğin karakterin parası canı atağı aklınıza gelebilecek her türlü veriyi server iletiyor tabi ki olması gerektiği gibi . Çoğu işlem de paket alışverişi ile yapılıyor , örneğin bir moba saldırı , pot basma , mob seçme gibi temel MMORPG işlemleri client tarafında PTR_PACKET ve SND_FUNCTION olarak tanımladığım iki adet bellek adresi var PTR_PACKET gönderilecek paketi alıyor saklıyor ve SND paketi ile birlikte sunucuya iletiyor , basitçe bir pointer gönderilecek paketi temsil ediyor diğer bir pointer paketin gönderilmesini sağlıyor , bazı oyunlar send fonksiyonuna değişik kontroller koymuşlar sanırım bot yapımı engellemek ve illegal paket alışverişini gözlemlemek için .

C++:
void send(BYTE* pBuf,int len) {
    __asm{
    MOV ECX,PTR_PACKET   // Paket pointerı
    MOV ECX,DWORD PTR DS:[ECX]
    PUSH len // paket uzunluğu
    PUSH pBuf // paket boyutu
    MOV EAX,SND_FUNCTION // send fonksiyonu
    CALL EAX
    }
 }

yukarıda paket iletişimi için hazırladığım bir send fonksiyonu mevcut kabaca bahsetmek gerekirse , dikkat edilmesi gereken hususlar ; paket ve send pointerı doğruluğu , paket uzunluğu tanımlaması , paket boyutu tanımlaması . Reserve eng. kullanarak illegal paket alışverişi yapacağımız için sunucuya istediğimiz paketleri iletebilmenin tek yolu sunucunun paketleri kabul ettiği şekilde göndermek . yaptığım incelemelerde sunucunun dikkat ettiği şeyin paket uzunluğu ve paket boyutu olduğunu farkettim . Örneğin basit bir base atma paketi 4800 olarak belirlenmiş bu paketi yukarıda yazdığımız fonksiyon 0x48, 00 olarak yollayacaktır ki paket sunucu tarafında doğru açılsın ve işleme geçirilsin. Bu konuyu açmamda ki sebep biraz beyin fırtınası yapıp ufku genişletme çabası . Lütfen konu hakkında bilgi sahibi olan arkadaşlar konuya fikirlerini yazsınlar her yorum benim için kıymetli sizin önemsiz gördüğünüz bir detay belki de çok farklı bir şeyi farketmemi sağlayacak. AYNI ZAMANDA RİCA EDİYORUM , ZERRE BİLGİSİ OLMAYAN ARKADAŞLAR BİLGİLİ GÖZÜKMEK İÇİN APTAL APTAL FİKİRLERİNİ BELİRTMEYE ÇALIŞMASINLAR FENA BOZARIM.
bu tür bilgileri daha iyi pekiştirmek için silkroad mbot public aracının içeriğini inceliyebilirsin.
 
bu tür bilgileri daha iyi pekiştirmek için silkroad mbot public aracının içeriğini inceliyebilirsin.
mbotu inceledim fakat biraz çağ dışı ve basit kalıyor , silkroad'ın kullandığı anti cheatlerde mbota zaten izin veriliyor o yüzden send fonksiyonunda hiç bir değişikliğe gidilmeden doğrudan veri akışı sağlanıyor , şu durumda buna pek ihtiyacım yok yıllar öncesinden uzmanı olduğum bir konu . örnek vermek gerekirse orta düzey bir anti cheat ile karşılaştığımda dahi ;
C++:
void hooksend()
{
    
        pushdegsyo = ReadLong(KO_SND_FNC + 3);
        BYTE jmp[] = { 0x78, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xAC }; // anti dev yeni send yazarsa adresleri güncelle.
        DWORD adr = (DWORD)SendFunc;
        memcpy(jmp + 1, &adr, 4);
        pushdegsyo = ReadLong(KO_SND_FNC + 4); // ++addr yada +0x08 atlamalara ihtiyaç duyabilirim notu kaldırma burdan
        std::string result;
        for (size_t i = 0; i < sizeof(jmp); ++i)
        {
            result += IntToHex(jmp[i], 2) + " ";
        }
        memcpy((void*)KO_SND_FNC, jmp, 7);

    
}

send fonksiyonuna hook atmam gerekiyor , genel olarak paketler doğrudan tek fonksiyon ile iletilmiyor SEND1 , SEND2 ,SEND3, ... SEND9 gibi çok fazla fonksiyondan geçiyor ve en son send ediliyor .
 

  Şuanda konuyu görüntüleyen kullanıcılar


Üst Alt