- Mesaj
- 357
- Çözümler
- 3
- Beğeni
- 249
- Puan
- 764
- Ticaret Puanı
- 0
Linkleri görebilmek için
giriş yap veya kayıt ol.
Linkleri görebilmek için
giriş yap veya kayıt ol.
.so (senin dosya libdb_notxt.so) aslında “garip bir kütüphane” değil; çalışan metin2 db prosesinin içine enjekte edilip hard-coded adreslere detour atarak proto sisteminin davranışını değiştiriyor.
1) peki libdb_notxt.so ne yapıyor?
- 4 tane hook kuruyor (hepsi bool(*)(char*) imzalı fonksiyonlara):
- 0x80785e0 → Hooks::InitializeItemTable::hook
- 0x8077890 → Hooks::InitializeMobTable::hook
- 0x8079050 → Hooks::MirrorItemTableToDB::hook
- 0x8079680 → Hooks::MirrorMobTableToDB::hook
- “Mirror…ToDB” hook’ları bilerek NO-OP:
- Hooks::MirrorItemTableToDB::hook sadece "Skipping" log basıp return 1;
- Hooks::MirrorMobTableToDB::hook usleep(60000) + "Skipping" log + return 1;
- Yani amaç: DB’ye proto’yu geri yazmayı/overwrite etmeyi engellemek.
- “Initialize…Table” hook’ları ise proto’yu MySQL’den direkt çekip bellekte tabloyu dolduruyor:
- Item için query açıkça görünüyor: SELECT vnum, type, subtype, name, <localeColumn>, ... FROM item_proto ORDER BY vnum
- Mob için benzer şekilde mob_proto okunup vector<SMobTable> dolduruluyor.
- Locale kolon adı için g_stLocaleNameColumn kullanılıyor (decompile’da “basic_string ctor” gibi görünmüş ama kaynakta bunun gerçek değeri config/locale ile set ediliyor).