- 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 ₺
Silkroad Online sunucu tarafı mimarisi; istemciden gelen paketlerin mantıksal olarak işlendiği, dünya simülasyonunun ve fizik kurallarının koşturulduğu **`SR_GameServer_Andreas.exe`** (8.5 MB, PE32 x86) ile istemci soketlerini çoklayarak arka uç sunucularına yönlendiren **`AgentServer.exe`** (912 KB, PE32 x86) ikililerine dayanır.
Bu teknik monografta; GameServer ikilisinin tersine mühendisliği (reverse engineering) ile ortaya çıkarılan **`0xCCF110` tabanlı 2048 girdilik paket dağıtım tablosu (Dispatch Table)**, RTTI sınıf ağacı (`IGObj` ➔ `CGObjPC` / `CGObjMob` / `CGObjCOS`), sunucu durum numaralandırmaları (LifeState, MotionState, BodyMode), **tam paket yapıları (`0x3013`, `0x3015`)** ve Shard veritabanının 60'tan fazla saklı yordamı (Stored Procedure) akademik bir titizlikle incelenmektedir.
---
### 1. Sunucu Mimarisi ve Çekirdek RTTI Sınıf Hiyerarşisi
GameServer, nesne yönelimli C++ mimarisinde tüm oyun varlıklarını `IGObj` saf sanal arayüzü (pure virtual interface) üzerinden yönetir:
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
---
### 2. Sunucu Durum Numaralandırmaları (Server State Enums)
GameServer, varlıkların canlılık, animasyon, savaş ve PK durumlarını katı enum tanımlarıyla yönetir:
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
---
### 3. GameServer Paket Dağıtım Tablosu (Opcode Dispatch Table)
GameServer'ın kalbi, istemciden gelen paketleri anında ilgili işleyiciye (handler) yönlendiren statik bellek içi dağıtım tablosudur.
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. Çekirdek Paket Yapıları: `0x3013` (Karakter Verisi) ve `0x3015` (Spawn)
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. `IGObj` Arayüz Metotları ve Shard Veritabanı Şeması
GameServer binary'si içerisindeki C++ assert ifadeleri, `IGObj` taban sınıfının 160'tan fazla sanal metodunu doğrular:
- **Yaşam ve Stat:** `GetCurHP()`, `GetMaxHP()`, `GetCurMP()`, `GetMaxMP()`, `DoDamage()`, `AddExp()`.
- **Konum ve Bölge:** `GetRegionID()`, `GetWorldPos()`, `GetDestPos()`, `IsInDungeon()`, `UpdateMovement()`.
- **Eylemler:** `ActionSkill()`, `ActionAttack()`, `ActionPickup()`, `ChangeMotionState()`.
- **Envanter ve Ekipman:** `GetInventory()`, `GetEquipItem()`, `GetItemBySlot()`.
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
---
### 6. AgentServer Analizi (912 KB)
`AgentServer.exe`, istemci ile GameServer arasındaki tampon köprüdür:
1. **Soket Çoklama (Multiplexing):** Binlerce istemci soketini toplar ve GameServer ile tek bir yüksek hızlı dahili hat üzerinden haberleşir.
2. **Paket Yönlendirme:** İstemciden gelen paketin işlem koduna bakarak; hesap doğrulamasını Gateway'e, dünya eylemlerini GameServer'a dağıtır.
3. **DDoS ve Flood Koruması:** Hatalı paket veya aşırı istek gönderen istemci soketlerini GameServer'ın ana döngüsünü (main loop) yormadan anında sonlandırır.
---
### 7. Geliştirici Standartları ve Sistem Bütünlüğü
1. **Dağıtım İndeks Kuralı:** GameServer'a yeni bir opcode enjekte edilirken veya hook atılırken `(opcode & 0x7FF)` indeksleme kuralı ve `0xCCF110` taban ofseti esas alınmalıdır.
2. **MotionState Disiplini:** Animasyon ve yetenek müdahalelerinde 19 hareket modu arasındaki geçiş kurallarına uyulmalı; örneğin `MOTIONSTATE_KNOCKDOWN` durumundaki bir varlığa anında `MOTIONSTATE_SKILL` verilmemelidir.
3. **v80 ABI ve vtable Düzeni:** `IGObj` sanal metot tablosuna yapılacak hook girişimlerinde sanal fonksiyon ofsetleri (`__thiscall`) kesinlikle korunmalıdı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!



