İçeriğe geç
Türkiye'nin SRO tanıtım & topluluk platformu

vSro Paylaşım [Joymax Ağ Protokolü] Güvenlik ve El Sıkışma Protokolü (0x5000 - 0x9FFF): Blowfish, CRC32 ve Seed Matematiği

Cevaplar0
Görüntüleme6
Ticaret Puanı
0
Katılım
19 Ocak 2026
Mesajlar
277
Tepkime puanı
225
Puanları
0
Web sitesi
www.youtube.com
Discord
ayzekk.
Mevcut Bakiye
4605 ₺
[Joymax Ağ Protokolü] Güvenlik ve El Sıkışma Protokolü (0x5000 - 0x9FFF): Blowfish, CRC32 ve Seed Matematiği

Silkroad Online istemcisi ile sunucuları (GatewayServer ve AgentServer) arasındaki iletişim, TCP bağlantısı kurulduğu anda şifrelenmemiş (plaintext) olarak başlar. Ancak oyun içi hassas verilerin, kimlik bilgilerinin ve hareket/savaş komutlarının korunması amacıyla ilk aşamada katı bir el sıkışma (Handshake) ve anahtar takası (Key Exchange) protokolü işletilir.

Bu monografide, `0x5000 GLOBAL_HANDSHAKE` ve `0x9000 GLOBAL_HANDSHAKE_OK` mesajlarının ikili formatı, `sro_client.exe` binary'sindeki okuma ofsetleri, Joymax'a özgü Little-Endian Blowfish blok şifrelemesi ve oturum doğrulama matematiği incelenmektedir.


1. El Sıkışma Yaşam Döngüsü (Handshake Lifecycle)

Joymax güvenlik katmanı, Diffie-Hellman benzeri simetrik anahtar türetme prensibine dayanır. İstemci ve sunucu, oturum başlangıcında paylaşılan tohum (seed) değerleri üzerinden bağımsız olarak aynı 8 baytlık Blowfish anahtarını üretir.

Protokol Adımları:
1. TCP Bağlantısı:** İstemci sunucu portuna (Gateway: 15779, Agent: dinamik) bağlanır.
2. Sunucu İnisiyatifi (0x5000 Gönderimi):** Sunucu, bağlantıyı kabul ettiği anda istemciye rastgele üretilmiş `ServerSeed` ve güvenlik bayraklarını içeren `0x5000` paketini iletir.
3. İstemci Yanıtı (0x5000 Karşı Yanıt):** İstemci, sunucunun tohumunu alır, kendi ürettiği `ClientSeed` ve çözülmüş `Challenge` cevabını içeren bir `0x5000` paketiyle sunucuya geri döner.
4. Anahtar Türetme (KDF):** Her iki taraf da `ClientSeed` ve `ServerSeed` bileşenlerini özel bir permütasyon algoritmasından geçirerek Blowfish S-Kutusu ve P-Dizisi anahtarını oluşturur.
5. El Sıkışma Onayı (0x9000):** Sunucu, istemcinin challenge yanıtını doğrularsa `0x9000 GLOBAL_HANDSHAKE_OK` gönderir. Bu andan itibaren tüm paket başlıklarında `HandshakeDone` bayrağı aktifleşir.


2. Opcode 0x5000 — GLOBAL_HANDSHAKE Alan Yapısı

`sro_client.exe` binary'sinde `0x004B1DA0` handler fonksiyonu tarafından yönetilir. Minimum 17 bayt ve değişken uzunluklu güvenlik dizgisi taşır.

SıraAlan AdıVeri TipiBoyutİstemci Okuma AdresiAçıklama
1byFlaguint8_t10x004B1E06Güvenlik modu bayrağı (0x01: Basit, 0x02: Tam Şifreleme)
2bytesSecuritybytesDinamik0x004B1E1Bİkili güvenlik sertifikası / imza bloğu
3dwClientSeeduint32_t40x004B1E33İstemci tarafından üretilen 32-bit rastgele tohum
4dwServerSeeduint32_t40x004B1E3ASunucu tarafından üretilen 32-bit rastgele tohum
5ullChallengeuint64_t80x004B1E5064-bit kriptografik meydan okuma (challenge) değeri

İkili Debug Log Referansları (Client PE):**
- `ACTIVE_SESSION::_OnMsgReceivedBeforeHandshake() - Handshake ServerSignature Error[MsgID: 0x%x]`
- `_OnMsgReceivedBeforeHandshake() - Initialize [MsgID: 0x%x]`
- `SecurityModeCheck - Mode:%d, Handshake:%d`
- `_OnMsgReceivedBeforeHandshake() - Handshake Failed:%d [MsgID: 0x%x]`


3. Blowfish Şifrelemesi ve KDF Algoritması Kanıtları

Bu gizli bloğun içeriği yalnızca şu üyeler tarafından görülebilir. Bu İçerik Premium Üyelere Özeldir. Engelsiz Tüm Gizli İçerikleri Görmek İçin Premium Üyelik satın alabilirsiniz. Ücretli Üyelikler



4. Filtre ve Bot Geliştiricileri İçin Kritik Uyarılar

1. Replay Attack Koruması (Security Count): Başlıktaki 4-bitlik sayaç (0-15 arası döner), sunucu ve istemci tarafından bağımsız artırılır. Gönderilen paketin sayacı sunucunun beklediği değerle uyuşmazsa paket doğrudan atılır (drop).
2. Gövde Doldurma (Padding): Blowfish blok şifreleyici olduğu için gövde uzunluğu 8'in katı olmak zorundadır. Şifrelenen paketlerde gövde sonuna 1 ila 7 bayt arasında rastgele dolgu (padding) eklenir; paketin gerçek uzunluğu başlığın ilk 2 baytında saklanır.
3. 0x9000 Yanıtının Beklenmesi:** İstemci, sunucudan `0x9000` almadan önce hiçbir mantıksal istek (`0x6103`, `0x7001` vb.) iletmemelidir. Aksi halde Gateway soketi anında kapatır.

🙏 Silkroad Geliştirici Camiasına Teşekkür ve Saygı

Bu kapsamlı teknik dokümantasyon, tersine mühendislik mimarisi ve protokol analizlerinin gün ışığına çıkmasında Silkroad ekosistemine yıllardır karşılıksız devasa emekler veren ve bu mirası ileriye taşımaya devam eden öncü geliştiricilerimize en içten teşekkürlerimizi sunarız:

⭐ DaxterSoul — Paket filtreleme, proxy mimarileri ve sunucu güvenliğindeki temel çalışmaları ve topluluğa kazandırdığı standartlar için,
⭐ florian0 — İstemci (Client) ve GameServer ikili (binary) tersine mühendisliği, hook ve assembly düzeyindeki rehber niteliğindeki araştırmaları için,
⭐ JellyBitz — Açık kaynak Silkroad araçları, paket analiz kütüphaneleri ve geliştirici ekosistemine sunduğu paha biçilmez açık kaynak yazılımlar için,
⭐ ferdoran — İstemci-sunucu protokol analizlerinin, opcode referanslarının ve teknik dokümantasyonun derlenip topluluğa kazandırılmasındaki büyük gayretleri için.

Silkroad geliştirici topluluğuna kattığınız değer, paylaştığınız bilgi birikimi ve sunduğunuz vizyon için sonsuz teşekkürler. İyi ki varsınız!
 

Konuyu görüntüleyenler

Yükleniyor...
Yükleniyor...
Şu anda sitemizde 17,788 Aktif Kullanıcı
Çevrimiçi üyeler
Konular 1,209
Mesajlar 4,051
Kullanıcılar 1,597
Son üye serkankacan
Geri
Üst