- Katılım
- 23 Eki 2022
- Mesajlar
- 8,299
- Çözümler
- 12
- Tepkime puanı
- 5,166
- Puanları
- 113
- Yaş
- 28
Bu rehber, vSRO / Silkroad Online client içerisinde kullanılan Direct3D (D3D9) objelerinin nasıl tespit edildiğini ve render pipeline mantığının nasıl analiz edildiğini öğretmek amacıyla hazırlanmıştır.
Amaç, oyunun grafik akışında kullanılan temel Direct3D fonksiyonlarının (Clear, BeginScene, EndScene, Present vb.) tespit edilerek daha sonra overlay / custom GUI / hook sistemleri için referans alınabilecek noktaların belirlenmesidir.
Bu dokümanda:
adım adım açıklanmaktadır.
Bu yöntem özellikle:
için temel oluşturur.
Aşağıdaki yapıyı direkt kullanabilirsin:
void initD3D(HWND hWnd)
{
// DEVICE OLUŞTURMA NOKTASI
[Direct3DCreate9 / CreateDevice HOOK NOKTASI]
d3d = Direct3DCreate9(D3D_SDK_VERSION);
d3d->CreateDevice(...);
// INIT END MARKER
}
void render_frame()
{
// FRAME START
[Clear HOOK POINT]
d3ddev->Clear(...);
[BeginScene HOOK POINT]
d3ddev->BeginScene();
[ENDSCENE HOOK POINT]
d3ddev->EndScene();
[PRESENT HOOK POINT]
d3ddev->Present(...);
// FRAME END
}
void cleanD3D()
{
// DEVICE RELEASE
[Release DEVICE HOOK]
d3ddev->Release();
d3d->Release();
// SDK RELEASE END
}
Bu yaklaşımın temel gücü şudur:
Bu sayede büyük client (SRO / vSRO) içindeki karmaşık D3D çağrıları kolayca izole edilir.
Amaç, oyunun grafik akışında kullanılan temel Direct3D fonksiyonlarının (Clear, BeginScene, EndScene, Present vb.) tespit edilerek daha sonra overlay / custom GUI / hook sistemleri için referans alınabilecek noktaların belirlenmesidir.
Bu dokümanda:
- Direct3D device (LPDIRECT3DDEVICE9) yapısının mantığı
- COM tabanlı function pointer çağrıları
- Render loop içerisinde kritik D3D fonksiyonlarının davranışı
- Debug ortamında (OllyDbg) analiz yaklaşımı
- Render pipeline üzerinden fonksiyon izleme mantığı
adım adım açıklanmaktadır.
Bu yöntem özellikle:- Overlay sistemleri geliştirme
- Game UI modifikasyonu
- Render hook tabanlı sistemler
- Client içi grafik analiz çalışmaları
için temel oluşturur.
Kod Yerleşim Şablonu (Senin Eklemen İçin Hazır)
Aşağıdaki yapıyı direkt kullanabilirsin:
1. Direct3D Initialization
void initD3D(HWND hWnd)
{
// DEVICE OLUŞTURMA NOKTASI
[Direct3DCreate9 / CreateDevice HOOK NOKTASI]
d3d = Direct3DCreate9(D3D_SDK_VERSION);
d3d->CreateDevice(...);
// INIT END MARKER
}
2. Render Loop (En Kritik Bölüm)
void render_frame()
{
// FRAME START
[Clear HOOK POINT]
d3ddev->Clear(...);
[BeginScene HOOK POINT]
d3ddev->BeginScene();
[ENDSCENE HOOK POINT]
d3ddev->EndScene();
[PRESENT HOOK POINT]
d3ddev->Present(...);
// FRAME END
}
3. Cleanup / Release
void cleanD3D()
{
// DEVICE RELEASE
[Release DEVICE HOOK]
d3ddev->Release();
d3d->Release();
// SDK RELEASE END
}
Mantık Özeti
Bu yaklaşımın temel gücü şudur:
- Küçük bir Direct3D demo ile "pattern" oluşturulur
- Aynı pattern oyun client içinde aranır
- COM vtable üzerinden gerçek fonksiyon adresleri bulunur
- Render döngüsü içinde kritik noktalar yakalanır
- Hook yapılacak entry point'ler belirlenir
Bu sayede büyük client (SRO / vSRO) içindeki karmaşık D3D çağrıları kolayca izole edilir.
İçeriği görüntülemek için Giriş yapın veya Kayıt olun.

