kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Cancan.1234 1
Cancan.1234
Hikaye Ekle

ProcessCRC Sistemi Detaylı Kaldırma Rehberi

  • Konuyu başlatan Konuyu başlatan MaviAy44
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 1
  • Görüntüleme Görüntüleme 238

Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!

Gereksiz Yükten Kurtulun: ProcessCRC & MagicCube Kaldırma Rehberi
Saldırı paketlerini hafifletin, gereksiz güvenlik simülasyonlarından kurtulun.



Nedir ve Neden Kaldırıyoruz?

Metin2’nin çok eski dönemlerinde client bütünlüğünü kontrol etmek amacıyla eklenmiş bir güvenlik mekanizmasıdır. Mantık olarak client çalışırken belleğinden ve exe dosyasından CRC alır, bunu parça parça (MagicCube denilen yöntemle) server’a gönderir ve server da bu değerleri önceden tanımlı bir liste ile karşılaştırır.

Ancak günümüzde bu sistem tamamen işlevsizdir:
  • ❌ Bypass Kolaylığı: Modern hileler bu kontrolleri saniyeler içinde atlatmaktadır.
  • ❌ Derleyici Sorunları: Modern Visual Studio sürümleri, ASLR ve optimizasyonlar yüzünden temiz clientlerde bile farklı CRC çıkararak oyuncuların oyundan atılmasına sebep olabilir.
  • ❌ Paket Kirliliği: En çok kullanılan Saldırı (Attack) paketinin içine gömülüdür. Gereksiz yere veri trafiği yaratır.
  • ❌ Yönetilemezlik: CRC listelerini yöneten resmi araçlar elimizde yoktur.

Bu rehber ile Client ve Server tarafından bu eski yapıyı tamamen söküp atacağız.



⚠️ DİKKAT ⚠️
İşlemlere başlamadan önce mutlaka Source yedeğinizi alınız!



BÖLÜM 1: Client Source (İstemci Kaynakları)

Dosya: Client\Source\UserInterface\Packet.h
İşlem: Aşağıdaki yapıları bulun ve belirtilen satırları silin.

Bul:
Kod:
typedef struct command_attack
İçinden Sil:
Kod:
    BYTE    bCRCMagicCubeProcPiece;
    BYTE    bCRCMagicCubeFilePiece;

Bul ve Sil (Tüm struct):
Kod:
typedef struct command_crc_report
{
    BYTE header;
    BYTE byPackMode;
    DWORD dwBinaryCRC32;
    DWORD dwProcessCRC32;
    DWORD dwRootPackCRC32;
} TPacketCGCRCReport;

Dosya: Client\Source\UserInterface\PythonNetworkStream.cpp

  • Include sil:
    Kod:
    #include "ProcessCRC.h"
  • Bul ve Sil (
    Kod:
    RecvPhasePacket
    içinde):
    Kod:
    BuildProcessCRC();

Dosya: Client\Source\UserInterface\PythonNetworkStream.h
İşlem: Aşağıdaki fonksiyon tanımlarını silin.

Kod:
bool SendSpecial(int nLen, void* pvBuf);
bool __SendCRCReportPacket();

Dosya: Client\Source\UserInterface\PythonNetworkStreamPhaseGame.cpp

  • Include sil:
    Kod:
    #include "ProcessCRC.h"
  • Bul ve Sil (
    Kod:
    SendSpecial
    fonksiyonu ve içeriği):
    Kod:
    bool CPythonNetworkStream::SendSpecial(int nLen, void* pvBuf)
    {
        // ... (tüm fonksiyon içeriğini silin)
    }
  • Bul ve Sil (
    Kod:
    __SendCRCReportPacket
    fonksiyonu ve içeriği):
    Kod:
    bool CPythonNetworkStream::__SendCRCReportPacket()
    {
        // ... (tüm fonksiyon içeriğini silin)
    }

⚠️ ÖNEMLİ DEĞİŞİKLİK: Saldırı paketini gönderirken artık `SendSpecial` yerine normal `Send` kullanacağız.

Bul:
Kod:
if (!SendSpecial(sizeof(kPacketAtk), &kPacketAtk))

Değiştir:
Kod:
if (!Send(sizeof(kPacketAtk), &kPacketAtk))



BÖLÜM 2: Server Source (Sunucu Kaynakları)

Dosya: Server\Source\game\config.cpp & .h
İşlem: CRC listelerini yükleyen ve kontrol eden kodları temizliyoruz.

  • Sil:
    Kod:
    static std::set<DWORD> s_set_dwFileCRC;
    ve
    Kod:
    static std::set<DWORD> s_set_dwProcessCRC;
  • Sil:
    Kod:
    LoadValidCRCList();
    (Hem prototipini, hem çağırıldığı yeri, hem de fonksiyon gövdesini silin).
  • Sil:
    Kod:
    IsValidProcessCRC
    ve
    Kod:
    IsValidFileCRC
    fonksiyonlarını silin.
  • Header (.h) dosyasındaki `extern` tanımlarını silin.

Dosya: Server\Source\game\desc.cpp & .h
İşlem: MagicCube birleştirme mantığını kaldırıyoruz.

  • Sil:
    Kod:
    m_bCRCMagicCubeIdx
    ,
    Kod:
    m_dwProcCRC
    ,
    Kod:
    m_dwFileCRC
    ,
    Kod:
    m_bHackCRCQuery
    (Tanımlar ve constructor içindeki atamalar).
  • Sil:
    Kod:
    AssembleCRCMagicCube
    fonksiyonunu ve headerdaki tanımını silin.

Dosya: Server\Source\game\desc_manager.cpp & .h
İşlem:
  • Sil:
    Kod:
    m_bDisconnectInvalidCRC
    değişkenini ve
    Kod:
    IsDisconnectInvalidCRC
    ,
    Kod:
    SetDisconnectInvalidCRCMode
    metodlarını silin.

Dosya: Server\Source\game\input_main.cpp
İşlem: Saldırı paketi işlenirken yapılan MagicCube çağrısını siliyoruz.

Bul ve Sil:
Kod:
ch->GetDesc()->AssembleCRCMagicCube(packMelee->bCRCMagicCubeProcPiece, packMelee->bCRCMagicCubeFilePiece);

Dosya: Server\Source\game\input_p2p.cpp
İşlem:
Kod:
HEADER_GG_RELOAD_CRC_LIST
case bloğunu silin.

Dosya: Server\Source\game\packet.h
İşlem: Server tarafındaki paket yapısını Client ile eşitlememiz gerek.

Bul ve Sil:
Kod:
HEADER_GG_RELOAD_CRC_LIST = 19,

Bul (
Kod:
typedef struct command_attack
):
İçinden Sil:

Kod:
    BYTE    bCRCMagicCubeProcPiece;
    BYTE    bCRCMagicCubeFilePiece;

Dosya: Server\Source\game\packet_info.cpp
Sil:
Kod:
Set(HEADER_GG_RELOAD_CRC_LIST, sizeof(BYTE), "ReloadCRCList");

Dosya: Server\Source\game\questmanager.cpp
Sil:
Kod:
else if (name == "crcdisconnect")
bloğunu silin.



Tüm işlemleri yaptıktan sonra Build almayı unutmayın.
İyi forumlar!
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst