Merhaba, Hoşgeldin!

VSRO.org, Silkroad Online, Knight Online, Metin2 ve diğer çevrimiçi oyunlar için öncü bir yardım ve geliştirme platformudur. Misyonumuz, bilgi ve deneyim sahibi bireyleri, bilgiye ihtiyaç duyanlarla bir araya getirerek, zengin bir etkileşim ortamı yaratmak ve farklı bakış açılarını birleştirmektir. Topluluğumuzda güçlü bir işbirliği ve öğrenme kültürü oluşturarak, herkesin değerli katkılarda bulunmasını sağlıyoruz.

vSRO Çözüldü Sro_Client Edit Crash Sorunu.

  • Konuyu Başlatan Konuyu Başlatan RİME
  • Başlangıç tarihi Başlangıç tarihi

RİME

.
Katılım
24 Ağu 2019
Mesajlar
180
Tepkime puanı
188
Puanları
43
Yaş
31
Konum
İstanbul
Web sitesi
kalitebilisim.com
Türk Lirası
0.00₺
Merhaba, arkadaşlar kolay gelsin.
Oyun hazırlıyorum fakat bi sorunum var sro_client party form kısmını 140'a göre uyarladığımda E'ye bastığım takdirde clientim crash oluyor. Ollydbg ile denemediğim yöntem kalmadı.
sro_clienti paylaşıyorum party form kısmını ayarlayacak biri olursa çok iyi olur.Şimdiden teşekkürler.
NOT : Sro_clientte mastery sorunu yoktur.Sadece PARTY FORM kısmı.

Ziyaretçiler için gizlenmiş link,görmek için Giriş yap veya üye ol.
 
Son düzenleme:
Vsropatch.exe ile denedin mi?
Bahsettiğin programın link mevcutmu başka bi program ile denemiştim adını tam hatırlamıyorum şuanda arayüzü görsem hatırlayabilirim.
EDİT : Bahsettiğin programı buldum onun ile denemiştim. Ne yazık ki gene E'ye bastığımda CRASH alıyorum.
 
Oyla 0
Bahsettiğin programın link mevcutmu başka bi program ile denemiştim adını tam hatırlamıyorum şuanda arayüzü görsem hatırlayabilirim.
EDİT : Bahsettiğin programı buldum onun ile denemiştim. Ne yazık ki gene E'ye bastığımda CRASH alıyorum.
aynı programdan bahsediyorsak buyur
Ziyaretçiler için gizlenmiş link,görmek için Giriş yap veya üye ol.
 
Oyla 0
codecave "saçma" bir yöntem değil, lütfen cahil cahil konuşma... bir yerden kopyala yapıştır yapacağına biraz öğrenmeye çalışsan yararı yine kendine olacak...
ben tekniği gösteriyorum clientini kendin düzenlersin... dll kullanıyorsan ve kaynak kodu varsa yapman çok daha kolay olur ama olly ile manuel şekilde gösteriyorum...

şimdi "Form Party" e bastığın zaman pencere açıldığında yazacak max. kısmı olly'de burada: 0x0073FACC

9650492b7427220aee9f08f83df61ae5.png


6E yani 110, default sro_client'te burası böyle.

cap değiştirmek için yapman gereken burayı editlemek, 6E yi istediğin cap yaparsın olur biter.
Ama burası kodda signed byte olarak yazılmış yani burayı max 127 yapabilirsin. 127'den sonra yazdığın değerler negatife döner. çünkü signed byte -128'ten 127'ye kadar olabilir.

O yüzden codecave yapmamız gerekiyor. Kısaca kodun çalıştırılması buraya geldiğinde başka bir yere zıplayacağız, istediğimiz cap'i integer olarak yazacağız. Tabi bu işlemden sonra kodun çalışma işleyişini bozmamamız için ilk baştaki yere geri dönmemiz lazım. Codecave kısaca buna deniyor.

Bir diğer problem de codecave'i başlatabilmemiz için (başka bir yere zıplayabilmemiz için) en az 5 byte yere ihtiyacımız var, çünkü jmp opcode'u 1 byte (0xE9), yanına yazacağımız adres de 4 byte. O yüzden 5 byte yere ihtiyacımız var.

Bizim codecave yapmak istediğimiz yer ise sadece 2 byte.
PUSH 6E, byte karşılığı 6A 6E.

O sebeple alttaki push komutunu da alacağız ve gittiğimiz yerde yapacağız onu da.

Şimdi sro_clientta boş bir yer bul, oyuna girip attach yaptıktan sonra bulursan daha iyi olur. Boş yerden kastım şu:

cccde827cce4c43cce0a229d07f5afe2.png


ben bu örnekte codecave'imi 0x00D7F260'a yaptım.

Şimdi gittiğin yerde sağ tık, assemble yap, keep size'ı kaldır. Ve öncelikle istediğimiz cap'i yazacağız.
Yani 140 cap diyelim, PUSH 8C. Yazdık, olly bize şöyle bir satır yaptı:

Kod:
İçeriği görebilmek için Giriş yap ya da üye ol.

ardından 5 byte zorunluluğu yüzünden yalan ettiğimiz satırı alıp burada yapıyoruz. yani PUSH OFFSET 00E18B1C.

parti max level için yapılması gerekenler tamam, şimdi kodun işleyişine geri dönelim.
codecave'e girmek için PUSH 6E satırını seçmiştik. ve alttakini de almıştık. şimdi ondan sonraki ilk komuta geri dönmemiz gerekiyor, yani bu durumda 0x0073FAD3 adresindeki CALL 00653950.

codecaveimize geri dönüp, bir jmp komutu ekliyoruz buraya geri dönmek için. Yani codecave son olarak böyle gözüküyor:

ca8a51c0dbaa0929395c2fea0e19a06b.png


codecavein içi ve çıkışıyla işimiz bitti. Tek kalan codecave'e girişimiz.
orjinal kodun işlendiği yere gidiyoruz. Codecave'e girmek için 0073FACC'teki PUSH 6E yi seçmiştik. Şimdi buraya bir jmp yapacağız ve codecaveimize yönlendireceğiz.

benim codecave 0x00D7F260'ta başlıyordu, oraya zıplayacağız.
Codecave'e girebilmek için 5byte zorunluluğumuz vardı. Biz bu yüzden push komutunun altındaki push offseti de aldık. PUSH 6E, 2 byte idi, yani bize 3extra byte lazımdı. Ama alttaki komut 5byte idi. Yani 2 fazladan aldık, ama bu durum normal, yani 2 tane NOPumuz olacak. Şimdi codecave e gireceğimiz yerdeki 2 satırı seçiyoruz:

b25bb6f87c8fd3cbc84d08d8a1f4849c.png


sağ tık > assemble dedikten sonra (keep size işaretli olacak ki işleyişi noplar kendi gelsin, işleyiş bozulmasın) codecaveimiz için jump ekliyoruz: JMP 00D7F260.
sonuç bu oldu:
3b04e0f4a997e0a143b1274aad77eee1.png


kodun işleyişi bu noktaya geldiğinde, bizim yazdığımız koda zıplayacak, capi ve diğer offseti yazacak, ve geri dönecek, bu kadar basit.
Sonuç:

1a09408b5e5d2d1dd5377ddd9b68ec6c.gif


tabi bu sadece açtığında yazan değer. eğer manuel değiştirmek istersen elle yine 140 yazamazsın, onun offseti az üstte, 0x0073FAAF.
Party matching için başka offsetler de var hangisi tam neye denk geliyor bilmiyorum, bazıları auto match, bazıları anasayfadaki arama kısmı için vs... hepsi için yapılması gerekiyor tek tek.

Kolay gele...
 
Son düzenleme:
Oyla 0
codecave "saçma" bir yöntem değil, lütfen cahil cahil konuşma... bir yerden kopyala yapıştır yapacağına biraz öğrenmeye çalışsan yararı yine kendine olacak...
ben tekniği gösteriyorum clientini kendin düzenlersin... dll kullanıyorsan ve kaynak kodu varsa yapman çok daha kolay olur ama olly ile manuel şekilde gösteriyorum...

şimdi "Form Party" e bastığın zaman pencere açıldığında yazacak max. kısmı olly'de burada: 0x0073FACC

9650492b7427220aee9f08f83df61ae5.png


6E yani 110, default sro_client'te burası böyle.

cap değiştirmek için yapman gereken burayı editlemek, 6E yi istediğin cap yaparsın olur biter.
Ama burası kodda signed byte olarak yazılmış yani burayı max 127 yapabilirsin. 127'den sonra yazdığın değerler negatife döner. çünkü signed byte -128'ten 127'ye kadar olabilir.

O yüzden codecave yapmamız gerekiyor. Kısaca kodun çalıştırılması buraya geldiğinde başka bir yere zıplayacağız, istediğimiz cap'i integer olarak yazacağız. Tabi bu işlemden sonra kodun çalışma işleyişini bozmamamız için ilk baştaki yere geri dönmemiz lazım. Codecave kısaca buna deniyor.

Bir diğer problem de codecave'i başlatabilmemiz için (başka bir yere zıplayabilmemiz için) en az 5 byte yere ihtiyacımız var, çünkü jmp opcode'u 1 byte (0xE9), yanına yazacağımız adres de 4 byte. O yüzden 5 byte yere ihtiyacımız var.

Bizim codecave yapmak istediğimiz yer ise sadece 2 byte.
PUSH 6E, byte karşılığı 6A 6E.

O sebeple alttaki push komutunu da alacağız ve gittiğimiz yerde yapacağız onu da.

Şimdi sro_clientta boş bir yer bul, oyuna girip attach yaptıktan sonra bulursan daha iyi olur. Boş yerden kastım şu:

cccde827cce4c43cce0a229d07f5afe2.png


ben bu örnekte codecave'imi 0x00D7F260'a yaptım.

Şimdi gittiğin yerde sağ tık, assemble yap, keep size'ı kaldır. Ve öncelikle istediğimiz cap'i yazacağız.
Yani 140 cap diyelim, PUSH 8C. Yazdık, olly bize şöyle bir satır yaptı:

Kod:
İçeriği görebilmek için Giriş yap ya da üye ol.

ardından 5 byte zorunluluğu yüzünden yalan ettiğimiz satırı alıp burada yapıyoruz. yani PUSH OFFSET 00E18B1C.

parti max level için yapılması gerekenler tamam, şimdi kodun işleyişine geri dönelim.
codecave'e girmek için PUSH 6E satırını seçmiştik. ve alttakini de almıştık. şimdi ondan sonraki ilk komuta geri dönmemiz gerekiyor, yani bu durumda 0x0073FAD3 adresindeki CALL 00653950.

codecaveimize geri dönüp, bir jmp komutu ekliyoruz buraya geri dönmek için. Yani codecave son olarak böyle gözüküyor:

ca8a51c0dbaa0929395c2fea0e19a06b.png


codecavein içi ve çıkışıyla işimiz bitti. Tek kalan codecave'e girişimiz.
orjinal kodun işlendiği yere gidiyoruz. Codecave'e girmek için 0073FACC'teki PUSH 6E yi seçmiştik. Şimdi buraya bir jmp yapacağız ve codecaveimize yönlendireceğiz.

benim codecave 0x00D7F260'ta başlıyordu, oraya zıplayacağız.
Codecave'e girebilmek için 5byte zorunluluğumuz vardı. Biz bu yüzden push komutunun altındaki push offseti de aldık. PUSH 6E, 2 byte idi, yani bize 3extra byte lazımdı. Ama alttaki komut 5byte idi. Yani 2 fazladan aldık, ama bu durum normal, yani 2 tane NOPumuz olacak. Şimdi codecave e gireceğimiz yerdeki 2 satırı seçiyoruz:

b25bb6f87c8fd3cbc84d08d8a1f4849c.png


sağ tık > assemble dedikten sonra (keep size işaretli olacak ki işleyişi noplar kendi gelsin, işleyiş bozulmasın) codecaveimiz için jump ekliyoruz: JMP 00D7F260.
sonuç bu oldu:
3b04e0f4a997e0a143b1274aad77eee1.png


kodun işleyişi bu noktaya geldiğinde, bizim yazdığımız koda zıplayacak, capi ve diğer offseti yazacak, ve geri dönecek, bu kadar basit.
Sonuç:

1a09408b5e5d2d1dd5377ddd9b68ec6c.gif


tabi bu sadece açtığında yazan değer. eğer manuel değiştirmek istersen elle yine 140 yazamazsın, onun offseti az üstte, 0x0073FAAF.
Party matching için başka offsetler de var hangisi tam neye denk geliyor bilmiyorum, bazıları auto match, bazıları anasayfadaki arama kısmı için vs... hepsi için yapılması gerekiyor tek tek.

Kolay gele...
Sadece emeğine sağlık diyebilirim. ??
 
Oyla 0
codecave "saçma" bir yöntem değil, lütfen cahil cahil konuşma... bir yerden kopyala yapıştır yapacağına biraz öğrenmeye çalışsan yararı yine kendine olacak...
ben tekniği gösteriyorum clientini kendin düzenlersin... dll kullanıyorsan ve kaynak kodu varsa yapman çok daha kolay olur ama olly ile manuel şekilde gösteriyorum...

şimdi "Form Party" e bastığın zaman pencere açıldığında yazacak max. kısmı olly'de burada: 0x0073FACC

9650492b7427220aee9f08f83df61ae5.png


6E yani 110, default sro_client'te burası böyle.

cap değiştirmek için yapman gereken burayı editlemek, 6E yi istediğin cap yaparsın olur biter.
Ama burası kodda signed byte olarak yazılmış yani burayı max 127 yapabilirsin. 127'den sonra yazdığın değerler negatife döner. çünkü signed byte -128'ten 127'ye kadar olabilir.

O yüzden codecave yapmamız gerekiyor. Kısaca kodun çalıştırılması buraya geldiğinde başka bir yere zıplayacağız, istediğimiz cap'i integer olarak yazacağız. Tabi bu işlemden sonra kodun çalışma işleyişini bozmamamız için ilk baştaki yere geri dönmemiz lazım. Codecave kısaca buna deniyor.

Bir diğer problem de codecave'i başlatabilmemiz için (başka bir yere zıplayabilmemiz için) en az 5 byte yere ihtiyacımız var, çünkü jmp opcode'u 1 byte (0xE9), yanına yazacağımız adres de 4 byte. O yüzden 5 byte yere ihtiyacımız var.

Bizim codecave yapmak istediğimiz yer ise sadece 2 byte.
PUSH 6E, byte karşılığı 6A 6E.

O sebeple alttaki push komutunu da alacağız ve gittiğimiz yerde yapacağız onu da.

Şimdi sro_clientta boş bir yer bul, oyuna girip attach yaptıktan sonra bulursan daha iyi olur. Boş yerden kastım şu:

cccde827cce4c43cce0a229d07f5afe2.png


ben bu örnekte codecave'imi 0x00D7F260'a yaptım.

Şimdi gittiğin yerde sağ tık, assemble yap, keep size'ı kaldır. Ve öncelikle istediğimiz cap'i yazacağız.
Yani 140 cap diyelim, PUSH 8C. Yazdık, olly bize şöyle bir satır yaptı:

Kod:
İçeriği görebilmek için Giriş yap ya da üye ol.

ardından 5 byte zorunluluğu yüzünden yalan ettiğimiz satırı alıp burada yapıyoruz. yani PUSH OFFSET 00E18B1C.

parti max level için yapılması gerekenler tamam, şimdi kodun işleyişine geri dönelim.
codecave'e girmek için PUSH 6E satırını seçmiştik. ve alttakini de almıştık. şimdi ondan sonraki ilk komuta geri dönmemiz gerekiyor, yani bu durumda 0x0073FAD3 adresindeki CALL 00653950.

codecaveimize geri dönüp, bir jmp komutu ekliyoruz buraya geri dönmek için. Yani codecave son olarak böyle gözüküyor:

ca8a51c0dbaa0929395c2fea0e19a06b.png


codecavein içi ve çıkışıyla işimiz bitti. Tek kalan codecave'e girişimiz.
orjinal kodun işlendiği yere gidiyoruz. Codecave'e girmek için 0073FACC'teki PUSH 6E yi seçmiştik. Şimdi buraya bir jmp yapacağız ve codecaveimize yönlendireceğiz.

benim codecave 0x00D7F260'ta başlıyordu, oraya zıplayacağız.
Codecave'e girebilmek için 5byte zorunluluğumuz vardı. Biz bu yüzden push komutunun altındaki push offseti de aldık. PUSH 6E, 2 byte idi, yani bize 3extra byte lazımdı. Ama alttaki komut 5byte idi. Yani 2 fazladan aldık, ama bu durum normal, yani 2 tane NOPumuz olacak. Şimdi codecave e gireceğimiz yerdeki 2 satırı seçiyoruz:

b25bb6f87c8fd3cbc84d08d8a1f4849c.png


sağ tık > assemble dedikten sonra (keep size işaretli olacak ki işleyişi noplar kendi gelsin, işleyiş bozulmasın) codecaveimiz için jump ekliyoruz: JMP 00D7F260.
sonuç bu oldu:
3b04e0f4a997e0a143b1274aad77eee1.png


kodun işleyişi bu noktaya geldiğinde, bizim yazdığımız koda zıplayacak, capi ve diğer offseti yazacak, ve geri dönecek, bu kadar basit.
Sonuç:

1a09408b5e5d2d1dd5377ddd9b68ec6c.gif


tabi bu sadece açtığında yazan değer. eğer manuel değiştirmek istersen elle yine 140 yazamazsın, onun offseti az üstte, 0x0073FAAF.
Party matching için başka offsetler de var hangisi tam neye denk geliyor bilmiyorum, bazıları auto match, bazıları anasayfadaki arama kısmı için vs... hepsi için yapılması gerekiyor tek tek.

Kolay gele...
Eline koluna sağlık çok net anlatım olmuş.
 
Oyla 0
Hazır clientler zaten heryerde bulunabiliyor ancak bunlar her server'a uymayabiliyor örneğin Trader sistemde DC sorunları ve stall limit problemleri ortaya çıkabiliyor.
Bunun yapımı tam olarak türkçe anlatım bulmak zor bulsanız bile verilen kaynaklar eksik bu yüzden sonuç çok da olumlu olmuyor.

Kendi clientinizi ollydbg kullanarak mastery ayarlarınızı aşağıdaki işlemleri uygulayarak çok rahat bir şekilde yapabilirsiniz.

Resime yer vermiyorum kısa süre sonra zaten resim linkleri çalışmamaya başlıyor.

Öncelikle ollydbg programına ihtiyacımız var. Son sürüme çok rahat ulaşabiliyorsunuz link vermiyorum.

- Ollydbg programını açıyoruz ve MOD yapacağımız sro_client.exe'yi sürükle bırak yöntemiyle programda açıyoruz. - 4 farklı bölümde farklı farklı şekiller açıkçası hangisi tam olarak ne işe yarıyor hiç bir fikrim yok https://www.********.com/forum/images/smilies/icon10.gif bizim işimiz sol üst bölüm ile.

- Öncelikle genelde gerekmemesine rağmen ben yine de tavsiye ederim, F9'a bir kere basıyor ve debug yapmasını sağlıyoruz. İkinci sefer basarsanız hata verebilir önemli değildir.
- Bizim kullandığımız sol üst bölümdeyken CTRL+G basarak aşağıdaki expressionlara gidiyor, istediğimiz değerde değiştiriyoruz.

// Expressionlar
//PT FORM
0x0073AFAE
0x0073B013
0x0073B030
0x0073FA4C
0x0073FAAF
0x0073FACC
// Mastery

CH-- 0x006AA4C3
CH-- 0x006A51BC
EU-- 0x006A5197
EU-- 0x006A51A2
EU-- 0x006AA4A3
EU-- 0x006AA498

Not: Eu mastery'leri değiştirmenize gerek yoktur. Zaten her level'de 2 adet alıyorlar. 100 Cap sw de Eu değerleri 500 dahi olsa max 200 alacaklardır.

- Şimdi nerelerde değişiklik yapacağımıza geliyorum. İlk olarak pt form ayarları için 0x0073AFAE memory satırımızı örnek alıyorum.
CTRL + G basıp 0x0073AFAE expressionunu aradığımızda,
0073AFAE 6A 78 PUSH 78
şeklinde bir satıra gelmiş olacağız. Burada PUSH 78 'e çift tıklıyoruz ve 78 yerine kendi istediğmiz değeri yazıyoruz.

Peki bu değer nedir ?
Bu değer Hexadecimal yani bilgisayar dilinde 16 lık sayı biriminde bir değerdir ve Decimal yani bizim kullandığımız değerdeki karşılığı 120'dir. Bunu nasıl hesaplayabileceğinizi anlatmak yerine zaten hesaplayan link vereceğim.

Bilgi: Hexadecimal 0'dan başlayıp F değerine kadar 16 rakamdan oluşan sayı birimidir. Bu rakamlar 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 'dir.

İkinci olarak mastery ayarlarından 0x006AA4C3 satırını örnek alıyorum.
Yine CTRL + G basarak 0x006AA4C3 expressionunu yapıştırıyor ve o satıra gidiyoruz.
006AA4C3 BE 68010000 MOV ESI,168
Şeklinde bir satıra geliyoruz bu sefer. Burada da MOV ESI,168 'e çift tıklıyor ve 168 rakamını kendimize göre değiştiriyoruz. Bu rakamında dilimizdeki karşılığı da 360'dır.

Hexadecimal(16) sayıları Decimal(10) çevirmek için
Ziyaretçiler için gizlenmiş link,görmek için Giriş yap veya üye ol.
kullanabilirsiniz.
Bizim asıl ihtiyacımız olan Decimal(10) sayılarımızı Hexadecimal(16) 'e çeviren converter'dır. Bunun için de
Ziyaretçiler için gizlenmiş link,görmek için Giriş yap veya üye ol.
kullanabilirsiniz.

Not: Memory'lere yalnızca Hexadecimal sayıları girmelisiniz yoksa yanlış sonuçlar elde edersiniz.

Örnek: 006AA4C3 BE 68010000 MOV ESI,168 (SKILL CAP AYARLARI)
168'i decimal çevirdik 360 elde ettik. Bizim serverimiz 100 CAP olsun. Skill mastery'leri 300 olması gerekiyor. Decimal to Hex Converter'e 300 yazıyor ve Hexadecimal değeri olarak bize 12C veriyor.
006AA4C3 BE 68010000 MOV ESI,168 =>> MOV ESI,12C olarak değiştiriyoruz.

Yaparken farkedeceksiniz expression satırları elinizde olduktan sonra gerisi çok kolay.

Umarım faydalı olur bir teşekkürü çok görmeyin https://www.********.com/forum/images/smilies/icon8.gif
michaeljackson.gif



Küçük bir düzenleme ekliyorum programı kaydetmeyi anlatmayı unutmuşum https://www.********.com/forum/images/smilies/icon10.gif

Yine sol üst bölümdeyken bütün gereken değişiklikleri yaptıktan sonra sağ tıklıyor, copy the executable tıklıyor oradan da All Modifications tıklıyoruz. Yeni bir pencere açılıyor. Sağ tıklıyor Save File tıklıyoruz bir yol gösterip kaydediyoruz. Yeni sro_client.exe 'miz hazırdır.
 
Oyla 0
Geri
Üst Alt