Kayıt
22 Aralık 2010
Mesajlar
7.631
Beğeniler
343
Merhaba arkadaşlar, bu konuda sizlere detaylı olarak gameserver editlemeyi anlatacağım.

Öncelikle ihtiyacımız olan programlar;
OllyDbg
Desimal Heksadesimal Dönüştüren Herhangi bir site

OllyDbg programını indirip çalıştırın. Ardından F3e basarak veya File>Open yaparak "SR_Gameserver.exe" yi seçin.
NOT:Herhangi bir olumsuzlukla karşılaşmamak için gameserver.exe'nin yedeğini almayı unutmayın.

Açılması biraz zaman alabilir. Açıldıktan sonra karşınıza şöyle bir ekran gelecektir;

Screenshot_1.png


Adress Bulma;

Adressler komutların sol taraflarında yazan heksadesimal (16lık sayı sistemi) sayılardır. Şimdi örnek olarak Capture The Flag ödüllerini değiştirmeyi anlatacağım.

CTFde oyuncu birisini kestiği zaman otomatik olarak çantasına ICE TROPHY gelir. Bunu değiştirmek için bu kodun gerçekleştiği adresi bulacağız;


1. Bunun için ollydbg programında açtığımız gameserverin sol üst kutucuğunda herhangi bir yere sağ tıklayıp Searc For > All Reference String seçeneğini seçiyoruz.

Screenshot_2.png


Screenshot_3.png


Karşımıza çıkan pencereden en üst satıra tıklatıp klavyeden CTRL + F kombinasyonuyla arama menüsünü açıyoruz. Büyük harflerle TROPHY yazıp aratıyoruz.

Screenshot_4.png


Karşımıza ilk sonuç çıkacaktır. Çıkan sonuca sağ tıklayıp Copy To Clipboard > Adress seçeneğini seçip adresi kopyalıyoruz. Burada not defteri açıp kopyaladığımız ilk adresi oraya yapıştırın. Ve tekrar ollydbg programına geçip CTRL + L kombinasyonuyla sonraki sonuçları bulup onlarında adreslerini açtığınız not defterine kaydedin. Son sonucunda adresini kopyaladıktan sonra açtığımız Referance String penceresini kapatıyoruz ve ilk pencereye dönüyoruz.

Screenshot_5.png


Bu adresler;
00876070 ; Her kesilen kişi için verilecek ödülün adresi,
00876935 ; Her kazanan takıma verilecek ödülün adresi.

Son sonucunda adresini kopyaladıktan sonra açtığımız Referance String penceresini kapatıyoruz ve ilk pencereye dönüyoruz.

2. Öncelikle yeni bir ödül girişi yapmamız gerekiyor. Bunun için Sol üst kutucukta aşağılara inip komutların bittiği yerden itibaren herhangi boş bir adresi seçip CTRL + E tuşlarına basıyoruz. Örneğin global chat eklemek istiyorsak keep Size tikini kaldırıp ASCII satırına ITEM_MALL_GLOBAL_CHATTING yazıyoruz ve OK'a basıyoruz.

Screenshot_6.png


OK dedikten sonra boş adreslerin karşılarında şöyle kodlar çıkacaktır. Bu kodların en üstündekinin adresini (kırmızı dikdörtgen içerisinde) not defterimize yazıyoruz.

Screenshot_7.png


3. Verilecek ödülü oluşturmuş olduk. Şimdi sıra bu ödülü ICE_TROPHY ile değiştirmeye geldi. Yine sol üst pencerede CTRL + G tuşlarına basarak Searc For > All Reference String yaparak bulduğumuz adresslerden ilkini yapıştırıp OK Diyoruz.

Screenshot_8.png


Karşımıza ilk komutumuz geliyor.

Screenshot_9.png


Bulduğumuz satıra tıklayıp SPACE tuşuna basarak karşımıza çıkan komutu silip PUSH yazıp bir boşluk bıraktıktan sonra ödülü eklediğimiz adresi yazıyoruz. Ben PUSH 00AD8EF0 yazıyorum sizinki muhtemelen farklı olacaktır.

Screenshot_11.png


Değiştirdikten sonra Assemble tıklıyoruz. Program otomatik olarak bir sonraki satıra geçebilir, ona dokunmadan Close tıklıyoruz.

Screenshot_10.png


Sonuç şu şekilde gözükecektir;

Screenshot_12.png


Eğer maçı kazanan takıma da aynı ödülü vermek istiyorsak bu işlemi Searc For > All Reference String ile bulduğumuz ikinci adrese de uyguluyoruz. Farklı bir ödül vermek istiyorsak 2. adımdaki gibi yeni bir ödül oluşturup 3. adımı uyguluyoruz.

Edit işlemlerimiz bittikten sonra sağ tıklayıp Edit > Select All seçeneğini seçiyoruz.

Screenshot_13.png


Daha sonra tekrar sağ tıklayıp Edit > Copy To Excutable seçeneğini seçiyoruz.

Screenshot_14.png


Karşımıza çıkan pencerede yine sağ tıklayıp Edit > Select All yapıyoruz ve ardından yine sağ tıklayıp Save File seçeceği ile editlemiş olduğumuz Gameserver'i kaydediyoruz.


Screenshot_15.png

Screenshot_16.png


Battle Arena Adressleri;
00669158 ; Guild ve Job Battle Arena kazanan takımın ödülü
0066915F ; Random ve Party Battle Arena kazanan takımın ödülü
00669173 ; Guild ve Job Battle Arena kaybeden takımın ödülü
0066917A ; Random ve Party Battle Arena kaybeden takımın ödülü

Mesela arena coin miktarını arttırıp 30 yapmak istiyorsak;
Kod:
00669158     C64424 16 07              MOV BYTE PTR SS:[ESP+16],7
Bu adreste SPACE tuşuna bastığımızda komutunun sonundaki 7 sayısını 30a karşılık gelen heksadesimal sayı ile yani 1E ile değiştirmemiz gerekiyor

Screenshot_17.png


Kod:
00669158     C64424 16 07              MOV BYTE PTR SS:[ESP+16],1E
Aynı şekilde sro_client.exe dosyasınıda editleyebilirsiniz.

İşinize yarayabilecek diğer Adressler;
Kod:
Guild Union Chat Limit
SR_GameServer
005E81D2       837C24300C      CMP DWORD PTR SS:[ESP+30],0C--193
005C4B42   837C24300C     CMP DWORD PTR SS:[ESP+30],0C--188

SRO_Client
005AA0F8       3C0C             CMP AL,0C--193
005AC538    3C0C                CMP AL,0C--188

Cap level (SR_Gameserver)
004E52C7   80F97D                 CMP CL,7D--188


120 Mastery limit (SRO_Client)
006B5BF8     3C8C               CMP AL,78--193
0069C7C8   3C78                CMP AL,78--188


120 level up limit (SRO_Client)
008C1162     80FB8C             CMP BL,78--193
008A99A2   80FB6E              CMP BL,6E--188

Max Mastery Limit (SRO_Client)
006C3A73   BE 68010000      MOV ESI,168--193
006A51BC   BF 77010000          MOV EDI,177--188

240 EU Mastery Limit (SRO_Client)
--193
006C3A48     3D FA000000         CMP EAX,0F0
006C3A53     BE FA000000         MOV ESI,0F0
006BE747     3D FA000000         CMP EAX,0F0
006BE752     BF FA000000         MOV EDI,0F0
--188
006A5197   3D F0000000          CMP EAX,0F0
006A51A2   BF F0000000          MOV EDI,0F0
006AA498   3D F0000000          CMP EAX,0F0
006AA4A3   BE F0000000          MOV ESI,0F0

240 EU Mastery Limit (SR_Gameserver)
--193
005C0569   - E9 15FDE3FF         JMP SR_GameS.00400283
00400283     E8 18251C00         CALL SR_GameS.005C27A0
00400288     8BC8                MOV ECX,EAX
0040028A     0FB6450C           MOVZX EAX,BYTE PTR SS:[EBP+C]
0040028E     03C8                ADD ECX,EAX
00400290     894C240C           MOV DWORD PTR SS:[ESP+C],ECX
00400294     DB4424 0C           FILD DWORD PTR SS:[ESP+C]
00400298     DC1D 78A7BC00       FCOMP QWORD PTR DS:[BCA778]
0040029E     DFE0                FSTSW AX
004002A0     81F9 FA000000       CMP ECX,0FA;mastery limit offset
004002A6   -0F8F20031C00       JG SR_GameS.005C05CC
004002AC   - E9 DA021C00         JMP SR_GameS.005C058B
--188
0059c57A
0059c57B
0059c57C
0059c57D
0059c57E
0059c57F
0059c580
0059c581
0059c582
0059c583
0059c584
0059c585
0059c586
0059c587
0059c588
0059c589
0059c58A

Pet Level (SR_Gameserver)
004E27FB     807E5878          CMP BYTE PTR DS:[ESI+58],78--193
004D641B   807E586E       CMP BYTE PTR DS:[ESI+58],6E--188

Party matching cap (SRO_Client)
--188
0073940E6A6E PUSH 6E(automatch)
007394536A6E PUSH 6E(automatch)
0073AFAE6A6E PUSH 6E(party match search min level write-able)
0073B0136A6E PUSH 6E(party match search max level write-able)
0073B0306A6E PUSH 6E(party match search default max level)
0073FA4C6A6E PUSH 6E(form party min level write-able)
0073FAAF6A6E PUSH 6E(form party max level write-able)
0073FACC6A6E PUSH 6E(form party default max level)

Levelup bugfix (SR_Gameserver)
004F19F2   7C24            JL SHORT SR_GameS.004F1A18--193
004E5471   817C2420 E00100>|CMP DWORD PTR SS:[ESP+20],1E0--188
-Not:004F19F5(10e=120/4)

Bir hesaptan maksimum kaç char açılacağı  (SRO_Client)
0085DE67   80BE2C01000008     CMP BYTE PTR DS:[ESI+12C],4--188

Bir hesaptan maksimum kaç char açılacağı ( Sql prosedürlerinide değiştirmek gerekli)
--193
0040F5AC       83F81E           CMP EAX,1E
0042AAA3       83F81E           CMP EAX,1E
--188
0040F47C   83F804          CMP EAX,4
00429B83   83F804          CMP EAX,4

Görev Cap
00955134   8078207D       CMP BYTE PTR DS:[EAX+20],6E--188

Job Level
0060DE69->JobCapCheck(default7)

Job Cezası (Saniye olarak)
004E816C   68803A0900      PUSH 93A80

Guild Cezası( Saniye olarak)
005C3F94   6880F40300      PUSH 3F480
009DF194   3D80F40300      CMP EAX,3F480
005C8B3D   6880F40300      PUSH 3F480
 
Son düzenleme:
Kayıt
22 Ağustos 2010
Mesajlar
1.866
Beğeniler
515
Takımı
Seçiniz...
Hocam tane tane miss gibi anlatmışsın eline koluna emeğine sağlık. Sakin bir kafayla okuyup uygulamak gerekli. Anlamadığım tek şey şu oldu ICE TROPHY ödülü demişsin. Bu CTF 'de bulunan sabit ödül oluyor demi? Yani biz o ödül 'ün yerine farklı bir ödül editliyoruz bu şekilde.
 
Kayıt
22 Aralık 2010
Mesajlar
7.631
Beğeniler
343
CTF de birini kestiğin zaman çantana gelen Ticket. Event So-Ok'a 10 tane götürürsen elixir, pot, alchemy stone vs veriyor.
 
Kayıt
22 Ağustos 2010
Mesajlar
1.866
Beğeniler
515
Takımı
Seçiniz...
Anladım hocam, tahmin ettiğim gibi.
Uzun bir edit süresi gerekecek, bakalım nasıl olacak :)
 
Yukarı Alt