- 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ü] 364 Paketlik Ana Mesaj İndeksi, Opcode Dağılım Taksonomisi ve RPC Yaşam Döngüsü
Silkroad Online istemci-sunucu haberleşmesi, Joymax tarafından geliştirilen yüksek verimli, durumsal (stateful) ve asenkron bir ikili (binary) RPC protokolüne dayanır. Protokolün temel amacı, devasa çok oyunculu bir dünyada binlerce istemcinin hareket, savaş, envanter, ticaret ve çevre güncellemelerini milisaniyeler seviyesinde ve minimum bant genişliğiyle yönetebilmektir.
Bu monografik rehberde, sro_client.exe ve GameServer binary'lerinin tersine mühendisliği (Reverse Engineering) sonucu doğrulanmış 364 ağ mesajının sayısal aralıkları, işlem yönleri (Direction), opcode matematiksel bağıntıları ve paket yaşam döngüsü eksiksiz bir akademik disiplinle incelenmektedir.
1. Joymax İkili Protokol Mimarisi ve Paket Anatomisi
Silkroad ağ paketleri, TCP/IP akışı üzerinde 6 baytlık sabit bir başlık (header) ve değişken uzunluklu bir gövdeden (payload) oluşur. Tüm tamsayı ve kayan nokta alanları Little-Endian bayt sıralamasına sahiptir.
Sunucu ve istemci arasındaki tüm oturumlar, el sıkışma (handshake) tamamlanana kadar düz metin (plaintext) başlıklarla çalışır; el sıkışma sonrasında ise güvenlik bayraklarına bağlı olarak Blowfish şifrelemesi ve CRC32 bütünlük denetimi devreye girer.
2. Opcode Sayısal Aralıkları ve Matematiksel Bağıntı Kuralı
Joymax mühendisleri, protokol opcode'larını gelişigüzel seçmemiş; mesajın işlevine, yetki düzeyine ve akış yönüne göre katı sayısal aralıklara ayırmıştır. Bu tasarım, istemci ve sunucu tarafındaki `switch-case` ve dizi tabanlı fonksiyon işaretçisi (function pointer table) aramalarını O(1) karmaşıklığına indirmek üzere optimize edilmiştir.
Temel Aralık Dağılımı:
1. 0x0000 - 0x2FFF (Sistem & Çekirdek Protokolü): Bağlantı yaşatma (Keepalive), gecikme ölçümü (Ping), küresel tanımlama (Identification) ve X-Trap anti-hile el sıkışması.
2. 0x3000 - 0x4FFF (Sunucu -> İstemci Olay & Bildirim Akışları): İstemci tarafından talep edilmeksizin (unsolicited) sunucunun dünyaya ve oyuncuya duyurduğu asenkron durum güncellemeleri. Varlıkların doğması (Spawn), yok olması (Despawn), hareket senkronizasyonu, can/mana değişimleri, sohbet mesajları ve hava durumu.
3. 0x5000 - 0x9FFF (Güvenlik, Kimlik & El Sıkışma): Bağlantı açılış el sıkışması (`0x5000`), istemci kabul onayı (`0x9000`), Blowfish anahtar üretimi ve tohum takası.
4. 0x6000 - 0x7FFF (İstemci -> Sunucu İstek Paketleri - RPC Requests): Oyuncunun yaptığı her aktif eylem (Giriş isteği, karakter seçimi, yürüme, hedef seçme, eşya taşıma, beceri kullanma, tezgah kurma).
5. 0xA000 - 0xBFFF (Sunucu Yanıt Paketleri - RPC Responses): İstemcinin 0x6000-0x7FFF aralığında gönderdiği isteklere sunucunun verdiği resmi onay, red veya sonuç paketleri.
Kritik Matematiksel İlişki: `+0x4000` Kuralı
Silkroad protokolünde istemci istekleri ile sunucu yanıtları arasında deterministik bir simetri bulunur. Bir istemci isteğine doğrudan karşılık gelen sunucu yanıtının opcode'u, istek opcode'una tam olarak 0x4000 eklenerek hesaplanır:
Doğrulanmış Örnekler:
- Karakter Seçim Giriş İsteği: 0x7001 + 0x4000 = 0xB001 (Karakter Seçim Giriş Yanıtı)
- Karakter Hareket İsteği: 0x7021 + 0x4000 = 0xB021 (Hareket Yanıtı / Echo)
- Sohbet Mesajı İsteği: 0x7025 + 0x4000 = 0xB025 (Sohbet Gönderim Yanıtı)
- Envanter Eşya Taşıma: 0x7034 + 0x4000 = 0xB034 (Eşya Taşıma Sonucu)
- Varlık Hedef Seçimi: 0x7045 + 0x4000 = 0xB045 (Hedef Seçim Onayı)
- Beceri/Mastery Yükseltme: 0x70A1 + 0x4000 = 0xB0A1 (Mastery Seviye Yanıtı)
3. Tersine Mühendislik Kaynakları ve İsimlendirme Çelişkileri
Topluluk kaynaklarında ve eski paket botlarında birçok opcode hatalı isimlendirilmiştir. Bunun temel sebebi, eski analizlerin yalnızca istemci PE binary'sindeki (`sro_client.exe`) handler fonksiyonlarının yüzeysel incelenmesine dayanmasıdır (`Client RE`).
Buna karşılık, GameServer ve ShardManager binary'lerinin kaynak kod assert'leri ve hata ayıklama sembolleri (`Server RE`), Joymax mühendislerinin gerçek terminolojisini açığa çıkarmıştır:
4. Protokol Güvenlik Katmanı ve Kritik Teknik Detaylar
5. Sonuç ve Sonraki Bölümler
Bu ana indeks rehberi, Joymax ağ mimarisinin haritasını ortaya koymaktadır. Takip eden monograflarda bu 364 mesajın her biri sayısal aralıklarına göre:
- **0x0000 - 0x2FFF (Sistem ve El Sıkışma)**
- **0x3000 - 0x4FFF (Sunucu Olay ve Bildirim Paketleri)**
- **0x5000 - 0x9FFF (Güvenlik, Anahtar Değişimi ve Handshake)**
- **0x6000 - 0x7FFF (İstemci İstek Paketleri - RPC Requests)**
- **0xA000 - 0xBFFF (Sunucu Yanıt Paketleri - RPC Responses)**
başlıkları altında wire format struct'ları, Ghidra disassembly referansları ve sunucu doğrulama algoritmalarıyla detaylandırılacaktır.
Silkroad Online istemci-sunucu haberleşmesi, Joymax tarafından geliştirilen yüksek verimli, durumsal (stateful) ve asenkron bir ikili (binary) RPC protokolüne dayanır. Protokolün temel amacı, devasa çok oyunculu bir dünyada binlerce istemcinin hareket, savaş, envanter, ticaret ve çevre güncellemelerini milisaniyeler seviyesinde ve minimum bant genişliğiyle yönetebilmektir.
Bu monografik rehberde, sro_client.exe ve GameServer binary'lerinin tersine mühendisliği (Reverse Engineering) sonucu doğrulanmış 364 ağ mesajının sayısal aralıkları, işlem yönleri (Direction), opcode matematiksel bağıntıları ve paket yaşam döngüsü eksiksiz bir akademik disiplinle incelenmektedir.
1. Joymax İkili Protokol Mimarisi ve Paket Anatomisi
Silkroad ağ paketleri, TCP/IP akışı üzerinde 6 baytlık sabit bir başlık (header) ve değişken uzunluklu bir gövdeden (payload) oluşur. Tüm tamsayı ve kayan nokta alanları Little-Endian bayt sıralamasına sahiptir.
| Ofset | Alan Adı | Veri Tipi | Boyut (Bayt) | Açıklama |
|---|---|---|---|---|
| 0x00 | Payload Length | uint16_t | 2 | Başlık hariç gövde boyutu (0 - 4096 bayt arası) |
| 0x02 | Opcode | uint16_t | 2 | Paketin fonksiyonel işlem kimliği |
| 0x04 | Security / Sequence | uint16_t | 2 | Güvenlik bayrakları, sayaç ve şifreleme bilgisi |
Sunucu ve istemci arasındaki tüm oturumlar, el sıkışma (handshake) tamamlanana kadar düz metin (plaintext) başlıklarla çalışır; el sıkışma sonrasında ise güvenlik bayraklarına bağlı olarak Blowfish şifrelemesi ve CRC32 bütünlük denetimi devreye girer.
2. Opcode Sayısal Aralıkları ve Matematiksel Bağıntı Kuralı
Joymax mühendisleri, protokol opcode'larını gelişigüzel seçmemiş; mesajın işlevine, yetki düzeyine ve akış yönüne göre katı sayısal aralıklara ayırmıştır. Bu tasarım, istemci ve sunucu tarafındaki `switch-case` ve dizi tabanlı fonksiyon işaretçisi (function pointer table) aramalarını O(1) karmaşıklığına indirmek üzere optimize edilmiştir.
Temel Aralık Dağılımı:
1. 0x0000 - 0x2FFF (Sistem & Çekirdek Protokolü): Bağlantı yaşatma (Keepalive), gecikme ölçümü (Ping), küresel tanımlama (Identification) ve X-Trap anti-hile el sıkışması.
2. 0x3000 - 0x4FFF (Sunucu -> İstemci Olay & Bildirim Akışları): İstemci tarafından talep edilmeksizin (unsolicited) sunucunun dünyaya ve oyuncuya duyurduğu asenkron durum güncellemeleri. Varlıkların doğması (Spawn), yok olması (Despawn), hareket senkronizasyonu, can/mana değişimleri, sohbet mesajları ve hava durumu.
3. 0x5000 - 0x9FFF (Güvenlik, Kimlik & El Sıkışma): Bağlantı açılış el sıkışması (`0x5000`), istemci kabul onayı (`0x9000`), Blowfish anahtar üretimi ve tohum takası.
4. 0x6000 - 0x7FFF (İstemci -> Sunucu İstek Paketleri - RPC Requests): Oyuncunun yaptığı her aktif eylem (Giriş isteği, karakter seçimi, yürüme, hedef seçme, eşya taşıma, beceri kullanma, tezgah kurma).
5. 0xA000 - 0xBFFF (Sunucu Yanıt Paketleri - RPC Responses): İstemcinin 0x6000-0x7FFF aralığında gönderdiği isteklere sunucunun verdiği resmi onay, red veya sonuç paketleri.
Kritik Matematiksel İlişki: `+0x4000` Kuralı
Silkroad protokolünde istemci istekleri ile sunucu yanıtları arasında deterministik bir simetri bulunur. Bir istemci isteğine doğrudan karşılık gelen sunucu yanıtının opcode'u, istek opcode'una tam olarak 0x4000 eklenerek hesaplanır:
Kod:
Yanıt Opcode = İstek Opcode + 0x4000
Doğrulanmış Örnekler:
- Karakter Seçim Giriş İsteği: 0x7001 + 0x4000 = 0xB001 (Karakter Seçim Giriş Yanıtı)
- Karakter Hareket İsteği: 0x7021 + 0x4000 = 0xB021 (Hareket Yanıtı / Echo)
- Sohbet Mesajı İsteği: 0x7025 + 0x4000 = 0xB025 (Sohbet Gönderim Yanıtı)
- Envanter Eşya Taşıma: 0x7034 + 0x4000 = 0xB034 (Eşya Taşıma Sonucu)
- Varlık Hedef Seçimi: 0x7045 + 0x4000 = 0xB045 (Hedef Seçim Onayı)
- Beceri/Mastery Yükseltme: 0x70A1 + 0x4000 = 0xB0A1 (Mastery Seviye Yanıtı)
3. Tersine Mühendislik Kaynakları ve İsimlendirme Çelişkileri
Topluluk kaynaklarında ve eski paket botlarında birçok opcode hatalı isimlendirilmiştir. Bunun temel sebebi, eski analizlerin yalnızca istemci PE binary'sindeki (`sro_client.exe`) handler fonksiyonlarının yüzeysel incelenmesine dayanmasıdır (`Client RE`).
Buna karşılık, GameServer ve ShardManager binary'lerinin kaynak kod assert'leri ve hata ayıklama sembolleri (`Server RE`), Joymax mühendislerinin gerçek terminolojisini açığa çıkarmıştır:
| Opcode | Eski Yanıltıcı İsim (Client RE) | Doğrulanmış Gerçek İsim (Server RE) | Gerçek Fonksiyonu |
|---|---|---|---|
| 0x3015 | SERVER_CHARACTER_DELETE_RESPONSE | SERVER_ENTITY_SPAWN | Görüş alanına yeni bir varlığın (oyuncu, NPC, mob, skill bölgesi) girmesi |
| 0x3016 | SERVER_CHARACTER_RESTORE_RESPONSE | SERVER_ENTITY_DESPAWN | Görüş alanından bir varlığın çıkması veya silinmesi |
| 0x3017 | SERVER_GROUP_SPAWN_START | SERVER_ENTITY_GROUPSPAWN_BEGIN | Toplu varlık spawn akışının başlatılması |
| 0x3018 | SERVER_GROUP_SPAWN_END | SERVER_ENTITY_GROUPSPAWN_END | Toplu spawn akışının sonlandırılması |
| 0x3020 | SERVER_CELESTIAL_UPDATE | SERVER_ENVIROMENT_CELESTIAL_POSITION | Güneş/Ay gök cisimlerinin açısal konumu |
4. Protokol Güvenlik Katmanı ve Kritik Teknik Detaylar
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
5. Sonuç ve Sonraki Bölümler
Bu ana indeks rehberi, Joymax ağ mimarisinin haritasını ortaya koymaktadır. Takip eden monograflarda bu 364 mesajın her biri sayısal aralıklarına göre:
- **0x0000 - 0x2FFF (Sistem ve El Sıkışma)**
- **0x3000 - 0x4FFF (Sunucu Olay ve Bildirim Paketleri)**
- **0x5000 - 0x9FFF (Güvenlik, Anahtar Değişimi ve Handshake)**
- **0x6000 - 0x7FFF (İstemci İstek Paketleri - RPC Requests)**
- **0xA000 - 0xBFFF (Sunucu Yanıt Paketleri - RPC Responses)**
başlıkları altında wire format struct'ları, Ghidra disassembly referansları ve sunucu doğrulama algoritmalarıyla detaylandırılacaktı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!



