ProcessCRC Sistemi Detaylı Kaldırma Rehberi

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 77

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
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:
  • <li data-xf-list-type="ul">❌ Bypass Kolaylığı: Modern hileler bu kontrolleri saniyeler içinde atlatmaktadır. <li data-xf-list-type="ul">❌ 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. <li data-xf-list-type="ul">❌ 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. <li data-xf-list-type="ul">❌ 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

  • <li data-xf-list-type="ul">Include sil:
    Kod:
    #include "ProcessCRC.h"
    <li data-xf-list-type="ul">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

  • <li data-xf-list-type="ul">Include sil:
    Kod:
    #include "ProcessCRC.h"
    <li data-xf-list-type="ul">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) }
    <li data-xf-list-type="ul">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), &amp;kPacketAtk))

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



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

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

  • <li data-xf-list-type="ul">Sil:
    Kod:
    static std::set&lt;DWORD&gt; s_set_dwFileCRC;
    ve
    Kod:
    static std::set&lt;DWORD&gt; s_set_dwProcessCRC;
    <li data-xf-list-type="ul">Sil:
    Kod:
    LoadValidCRCList();
    (Hem prototipini, hem çağırıldığı yeri, hem de fonksiyon gövdesini silin). <li data-xf-list-type="ul">Sil:
    Kod:
    IsValidProcessCRC
    ve
    Kod:
    IsValidFileCRC
    fonksiyonlarını silin. <li data-xf-list-type="ul">Header (.h) dosyasındaki `extern` tanımlarını silin.

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

  • <li data-xf-list-type="ul">Sil:
    Kod:
    m_bCRCMagicCubeIdx
    ,
    Kod:
    m_dwProcCRC
    ,
    Kod:
    m_dwFileCRC
    ,
    Kod:
    m_bHackCRCQuery
    (Tanımlar ve constructor içindeki atamalar). <li data-xf-list-type="ul">Sil:
    Kod:
    AssembleCRCMagicCube
    fonksiyonunu ve headerdaki tanımını silin.

Dosya: Server\Source\game\desc_manager.cpp &amp; .h
İşlem:
  • <li data-xf-list-type="ul">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-&gt;GetDesc()-&gt;AssembleCRCMagicCube(packMelee-&gt;bCRCMagicCubeProcPiece, packMelee-&gt;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!

ProcessCRC Sistemi Detaylı Kaldırma Rehberi

ProcessCRC, Metin2 özel sunucularında yaygın olarak kullanılan bir güvenlik mekanizmasıdır. Bu sistem, oyuncu tarafından gönderilen paketlerin doğruluğunu kontrol ederek, hileli veya değiştirilmiş verilerin sunucuya ulaşmasını engeller. Ancak bazı durumlarda bu sistemi devre dışı bırakmak isteyebilirsiniz. Özellikle C++ kaynak kod üzerinde değişiklik yaparken ya da özel game core yapılandırması gerçekleştirmek istiyorsanız, ProcessCRC kaldırılması gerekebilir.

UYARI: Bu işlem, sunucunuzun güvenliğini azaltabilir. Sadece test ortamında veya gerekli önlemleri aldıktan sonra uygulayın.

Adım 1: Game Server Kaynak Koduna Erişim
Öncelikle Metin2 server src dosyalarına erişim sağlamanız gerekir. Genellikle bu dosyalar game core ve db core bölümlerinde bulunur. Martysama gibi popüler kaynaklar üzerinden bu yapıya ulaşabilirsiniz.

Adım 2: ProcessCRC Fonksiyonunu Bulma
Oyun sunucusunun ana dosyasında (örneğin ClientHandle.cpp) ProcessCRC fonksiyonunu arayın. Bu fonksiyon genellikle packet validation işlemleri sırasında çağrılır.

Adım 3: Fonksiyonu Devre Dışı Bırakma
Fonksiyonun içeriğini boşaltarak veya doğrudan çağrımı kaldırarak ProcessCRC sistemini devre dışı bırakabilirsiniz. Alternatif olarak, fonksiyonun dönen değerini true olarak sabitleyebilirsiniz.

Adım 4: Derleme ve Test
Değişikliklerden sonra projeyi yeniden derlemeniz (compile) gerekir. Metin2 compile işlemini doğru şekilde tamamladığınızdan emin olun. Ardından sunucuyu başlatıp test edin.

Ekstra Bilgi
Bu işlem client src üzerinde de benzer şekilde yapılabilir. Ancak bu durumda hem auth hem de game sunucularında uyumlu çalıştığından emin olmalısınız. Py root ve uiscript gibi yapılar bu işlemi etkilemez, ancak pack dosyalarında uyumlu olmanız önemlidir.

Daha fazla bilgi için Metin2Lobby'e göz atabilirsiniz.


Detailed Guide on Removing ProcessCRC System

ProcessCRC is a common security mechanism used in Metin2 private servers. This system validates the integrity of packets sent by players, blocking any modified or cheat-like data from reaching the server. However, there may be times when you want to disable this system. When making changes in C++ source code or configuring a custom game core, removing ProcessCRC might become necessary.

WARNING: This action may reduce your server's security. Only apply in testing environments or after taking appropriate precautions.

Step 1: Access Game Server Source Code
First, you need access to Metin2 server src files. These files are usually located within game core and db core. You can find these structures via popular sources like Martysama.

Step 2: Locate ProcessCRC Function
In the main game server file (e.g., ClientHandle.cpp), search for the ProcessCRC function. This function is typically called during packet validation processes.

Step 3: Disable the Function
You can disable ProcessCRC by clearing its content or removing its call entirely. Alternatively, you can force the function to return true.

Step 4: Compile and Test
After making changes, you must recompile the project (compile). Ensure that the Metin2 compile process completes successfully. Then start the server and test it.

Additional Info
This process can also be applied similarly in client src. However, ensure compatibility between both auth and game servers. While Py root and uiscript do not affect this operation, compatibility in pack files remains important.

Visit Metin2Lobby for more information.​
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Geri
Üst Alt