- 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.
İ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ı
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 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ıra | Alan Adı | Veri Tipi | Boyut | İstemci Okuma Adresi | Açıklama |
|---|---|---|---|---|---|
| 1 | byFlag | uint8_t | 1 | 0x004B1E06 | Güvenlik modu bayrağı (0x01: Basit, 0x02: Tam Şifreleme) |
| 2 | bytesSecurity | bytes | Dinamik | 0x004B1E1B | İkili güvenlik sertifikası / imza bloğu |
| 3 | dwClientSeed | uint32_t | 4 | 0x004B1E33 | İstemci tarafından üretilen 32-bit rastgele tohum |
| 4 | dwServerSeed | uint32_t | 4 | 0x004B1E3A | Sunucu tarafından üretilen 32-bit rastgele tohum |
| 5 | ullChallenge | uint64_t | 8 | 0x004B1E50 | 64-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!



