Reklam
nasıl indiricem serveriSelamlar .Birkaç ciddi bug bulup Fixledim. Öyle rastgele indridim bir dosyadir. geliştirmek için baya sorunlari vardi fixledim yeni sorun bulursaniz direk konu altindan yazin fixlemeye devam ederim .test edecek cok fazla vaktim yok saygilarimla.
İçeresine kurulum talimati ekledim. yapamayan veya pus ayarlarina kadar hazir halde testlim de edebilirim özelden yazabilirisniz bunun için.
*** Gizli metin: alıntı yapılamaz. ***
Son günlerde kaynakta debug yaparken üç şey bulduk, hepsi klasik "config hatası" değil, gerçek kod seviyesinde sorunlardı:
1) KOSocket'te uzaktan tetiklenebilen çökme (integer underflow)
shared/KOSocket.cpp → DecryptPacket() içinde şifreli paket işleme yolunda bir boyut kontrolü eksikti. Paket 4-7 bayt aralığında bir uzunlukla gelirse, kod bundan 8 çıkarıyor — uint16 olduğu için bu işlem taşıyor (underflow) ve boyut değişkeni ~65530 gibi anlamsız bir sayıya dönüşüyor. Hemen ardından o "boyut" kadar memcpy çalıştırılınca bellek sınırlarının çok dışına okuma yapılıyor, sonuç: anında access violation.
En zor kısmı buydu aslında: local/loopback testte bu hiç görünmüyor çünkü tüm paket tek recv() çağrısında geliyor. Gerçek internet bağlantısında TCP segmentasyonu yüzünden paket parçalı geldiğinde tetikleniyor. Bunu yakalamak için elle, byte-byte, gecikmeli TCP paketleri gönderen bir test scripti yazıp fragmentasyonu simüle ettik, ancak öyle reprodüklenebildi.
2) Debugger olmadan crash dump analizi
Sunucuda WinDbg/cdb kurulu değildi, internetten indirmeye de vakit yoktu. dbghelp.dll'i doğrudan P/Invoke ile çağırıp kendi sembol çözücümüzü yazdık — ham crash offset'ini PDB üzerinden gerçek dosya/satır numarasına çevirip bug'ı memcpy çağrısına kadar geriye izledik. Klasik "hatayı tahmin et" yöntemi değil, doğrudan kanıta dayalı debugging.
3) Launcher'da kasıtlı olarak gizlenmiş bir kilit mekanizması
Launcher, belirli bir IP'ye bağlanmaya çalışınca sahte bir hata mesajı ("Unknown data stream.") gösterip kapanıyordu — sanki ağ hatasıymış gibi. Kod tabanına inince bunun aslında bir IP whitelist kontrolü olduğunu, hata mesajının bilerek yanıltıcı yazıldığını gördük. Bulup düzelttik.
Ekli dosyayı görüntüle 20180
Ekli dosyayı görüntüle 20181
src si var zatenteşekkürler src side olsaydı daha güzel olucaktı fakat benim beklediğim 26xx şuanki usko yenede teşekkürler
tesekkurlerSelamlar .Birkaç ciddi bug bulup Fixledim. Öyle rastgele indridim bir dosyadir. geliştirmek için baya sorunlari vardi fixledim yeni sorun bulursaniz direk konu altindan yazin fixlemeye devam ederim .test edecek cok fazla vaktim yok saygilarimla.
İçeresine kurulum talimati ekledim. yapamayan veya pus ayarlarina kadar hazir halde testlim de edebilirim özelden yazabilirisniz bunun için.
*** Gizli metin: alıntı yapılamaz. ***
Son günlerde kaynakta debug yaparken üç şey bulduk, hepsi klasik "config hatası" değil, gerçek kod seviyesinde sorunlardı:
1) KOSocket'te uzaktan tetiklenebilen çökme (integer underflow)
shared/KOSocket.cpp → DecryptPacket() içinde şifreli paket işleme yolunda bir boyut kontrolü eksikti. Paket 4-7 bayt aralığında bir uzunlukla gelirse, kod bundan 8 çıkarıyor — uint16 olduğu için bu işlem taşıyor (underflow) ve boyut değişkeni ~65530 gibi anlamsız bir sayıya dönüşüyor. Hemen ardından o "boyut" kadar memcpy çalıştırılınca bellek sınırlarının çok dışına okuma yapılıyor, sonuç: anında access violation.
En zor kısmı buydu aslında: local/loopback testte bu hiç görünmüyor çünkü tüm paket tek recv() çağrısında geliyor. Gerçek internet bağlantısında TCP segmentasyonu yüzünden paket parçalı geldiğinde tetikleniyor. Bunu yakalamak için elle, byte-byte, gecikmeli TCP paketleri gönderen bir test scripti yazıp fragmentasyonu simüle ettik, ancak öyle reprodüklenebildi.
2) Debugger olmadan crash dump analizi
Sunucuda WinDbg/cdb kurulu değildi, internetten indirmeye de vakit yoktu. dbghelp.dll'i doğrudan P/Invoke ile çağırıp kendi sembol çözücümüzü yazdık — ham crash offset'ini PDB üzerinden gerçek dosya/satır numarasına çevirip bug'ı memcpy çağrısına kadar geriye izledik. Klasik "hatayı tahmin et" yöntemi değil, doğrudan kanıta dayalı debugging.
3) Launcher'da kasıtlı olarak gizlenmiş bir kilit mekanizması
Launcher, belirli bir IP'ye bağlanmaya çalışınca sahte bir hata mesajı ("Unknown data stream.") gösterip kapanıyordu — sanki ağ hatasıymış gibi. Kod tabanına inince bunun aslında bir IP whitelist kontrolü olduğunu, hata mesajının bilerek yanıltıcı yazıldığını gördük. Bulup düzelttik.
Ekli dosyayı görüntüle 20180
Ekli dosyayı görüntüle 20181