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.
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
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 (
içinde):Kod:
RecvPhasePacketKod: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 (
fonksiyonu ve içeriği):Kod:
SendSpecial
Kod:bool CPythonNetworkStream::SendSpecial(int nLen, void* pvBuf) { // ... (tüm fonksiyon içeriğini silin) } - Bul ve Sil (
fonksiyonu ve içeriği):Kod:
__SendCRCReportPacket
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:
veKod:
static std::set<DWORD> s_set_dwFileCRC;Kod:static std::set<DWORD> s_set_dwProcessCRC; - Sil:
(Hem prototipini, hem çağırıldığı yeri, hem de fonksiyon gövdesini silin).Kod:
LoadValidCRCList(); - Sil:
veKod:
IsValidProcessCRCfonksiyonlarını silin.Kod:IsValidFileCRC - 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(Tanımlar ve constructor içindeki atamalar).Kod:m_bHackCRCQuery - Sil:
fonksiyonunu ve headerdaki tanımını silin.Kod:
AssembleCRCMagicCube
Dosya: Server\Source\game\desc_manager.cpp & .h
İşlem:
- Sil:
değişkenini veKod:
m_bDisconnectInvalidCRC,Kod:IsDisconnectInvalidCRCmetodlarını silin.Kod:SetDisconnectInvalidCRCMode
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
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")
Tüm işlemleri yaptıktan sonra Build almayı unutmayın.
İyi forumlar!
İyi forumlar!
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 4
- Görüntüleme
- 339
- Cevaplar
- 5
- Görüntüleme
- 487
- Cevaplar
- 1
- Görüntüleme
- 192
- Cevaplar
- 1
- Görüntüleme
- 249
- Cevaplar
- 2
- Görüntüleme
- 222
