SuperSpongeBobCollapse oyununu keygene çevirmek

maviboynuz

Program Url: http://www.gamehouse.com

Program Tipi: süre kısıtlaması

     Araçlar: ollydbg, asm bilgisi,

Basit ( x )  Orta (  )  Zor ( )  Pro ( )


Başlangıç

Selamün Aleyküm, bu yazımda adı geçen gamehouse oyununun lisans kodunu bir messagebox içerisinde göstermeyi anlatacağım. Gerçek kodu hata mesajı yerine de gösterebilirsiniz. Ama biz ayrıca bir messagebox hazırlayacağız. Gamehouse oyunlarının lisans algoritması hemen hemen aynı olsa da bir kaçı hariç diğerlerinde gerçek lisans kodunu hafızada bulamıyorsunuz. Çünkü girdiğiniz lisans kodu ile direk karşılaştırma yapmıyorlar. Ancak bu oyunda hafızada görebildiğimiz için mesaj kutusuna da yazdırabileceğiz inşallah.

Yazı

 

Programı bir çalıştıralım ve nasıl bir ekranla karşı karşıya olduğumuzu görelim.

License Name ve ona uygun bir License Code. Amacımız Lisans ismi girildikten sonra rasgele bir de kod girilmesi. Böylece  Enter License Information aktif duruma geçecek. Ve bu butona tıklayınca bir mesaj penceresinde gerçek lisans kodu görünecek. E ondan sonrası size kalmış lisans  ismi var. Kodu da var. Belki yine de try now butonuna basarsınız???

Gamehouse oyunlarının algoritmasını çözmüştük. Onun için ayrıntıya girmeden sadece değiştirmemiz gereken yerlere bakacağız. Yani programı adım adım çalıştırmaya gerek yok. Hadi başlayalım.

Enter License Information butonunun aktif olması için License Name ve License Code kısımlarının doldurulması gerekiyor. İkisi için de 1 karakter yeter. Öncelikle programın lisans kodunu oluşturması ve bizim girdiğimiz lisans kodu ile karşılaştırması gerekiyor. Bizim girdiğimiz yanlış lisans kodunun 15 karakter olması gerekiyordu. (Gamehouse oyunlarının License Code ları 15 karakter uzunluğunda.) 15 karakter değilse program gerçek lisans kodunu hiç hesaplamıyor. Herkese 15 karakter gir diyemeyeceğimize göre o kısmı patch edelim. Böylece lisans kod yerine 1 karakter de yazsak gerçek lisans kodunu hesaplasın.

 

Oyunumuzu ollydbg ile yükleyelim. Siz yorulmayın. Girilen License Code 15 karakter mi? Karşılaştırmasının olduğu yere gelelim.

 

100025AA jnz short sbcol.100025ce satırında dallanmanın gerçekleşmesi gerekiyor. Girilen lisans kodu 15 karakter değilse dallanma gerçekleşmiyor ve hata mesajı ile gerçek lisans kodu hesaplanmadan program sonlanıyor. Jnz nin hemen üstündeki call çağrısında bizim girdiğimiz lisans kodunun kaç karakter olduğu sayılıyor. Bilmeyenler için bu satıra gelmek için oyunu ollydbg ile yükledikten sonra ctrl+g tuşlarına basıyoruz ve açılan penceredeki kutucuğa 100025aa adresini yazıp ok butonuna tıklayın.

100025aa satırında boşluk(space) tuşuna basın ve yukarda gördüğünüz pencereye koşulsuz dallanma komutu olan jmpı ve dallanacağı yeri yazın. Assemble butonuna tıklayın demeye gerek yok herhalde. Bunu yaptık ki license code kısmına kaç karakter girersek girelim program bize gerçek lisans kodunu üretsin. Son görüntü aşağıdaki gibi

Görüldüğü gibi kapladıkları alanlar aynı olduğundan her hangi bir sorun çıkmadı. Şimdi ikinci kısma geçebiliriz.

Ctrl+g tuşlarına basalım ve bu sefer 10001f37 adresini girip ok butonuna tıklayalım. Bu kısımda gerçek lisans kod hesaplanmış ve bizim girdiğimiz yanlış lisans kod ile karşılaştırma yapılmış oluyor. Ancak hata mesajı ekranda gözükmedi. Çünkü ikisi arasındayız. F2 tuşu ile break point koyalım ki program burada dursun. F9 ile programı çalıştıralım. Ve Licanse Name yerine maviboynuz licanse code yerine de 12345 girelim. ve Enter License Information butonuna tıklayalım.

 

10001f00 adresinde gerçek lisans kodu ile bizim lisans kodumuz byte byte karşılaştırılıyor ve karakterler aynı değilse 10001f2a adresinde jnz ile program 10001f37 adresine dallanıyor ve hata mesajına doğru program akışı değişiyor. Eğer girdiğimiz lisans kodu doğru ise bu sefer 10001f09 adresindeki je dallanma komutu ile program 10001f3a adresine dallanıyor ve lisans işlemi tamamlanıyor. Registerlara baktığımız zamanda görüyoruz ki bizim yanlış lisans kodumuz edx de, gerçek kod edi ve esi de.

Bundan sonrası biraz karışık olabilir. Sabırla okursanız anlaşılır inşallah.

Mesajkutumuzu programlamak için boş bir yerlere ihtiyacımız var. Ollydbg ile programın sonlarına doğru bakalım. Orada boş yerler olacak. Her programda olur.

10003d0d adresinden itibaren boş yerler başlıyor. Bu kısımlara kendi kodlarımızı yazacağız. Ama önce Ctrl+A tuşlarına basarak analiz kod görünümüne geçelim.

Kodlarımızı yazmaya başlayalım. 10003d0e adresinden itibaren fare ile bir miktar yer işaretleyelim. Ve CTRL+e tuşuna basarak daha sonra mesaj penceremizin başlığı olacak olan metni yazalım.

Ok tuşuna tıklayalım. Ve Ctrl+A tuşlarına basalım.

Artık geriye sadece mesaj kutusunun tanımı ve bir iki tane ayrıntı kaldı. Mesaj kutusu için MessageBoxA apisini kullanacağız. Nasıl kullanıldığı nette var. Onun için ayrıntıya gerek yok. Yalnız MessageBoxA apisinin işi bittikten sonra bazı registerların değerleri değişiyor. Bu da programın bir hata mesajı ile kapanmasına sebep oluyor. Bunu engellemek için önce registerları push edip, mesajdan sonra da pop edeceğiz. Böylece değişen registırlar eski halini alacaklar. ecx,edx,esp registerlarının değerlerinin değiştiğini gördüm. Nasıl mı anladık. Adım adım çalıştırırken registerlara bakın. Call user32.MessageBoxA satırı çalıştıktan sonra değeri değişen registerlar kırmızı renkle gösteriliyor. Şimdi mesajımızın bir miktar altına space(boşluk) tuşuna basarak kodlarımızı girelim.

1,2 ve 3 nolu satırlarda ecx, edx ve esp registerlarının değerlerini saklıyoruz. İşimiz bittikten sonra da 9,10 ve 11. satırlarda eski değerlerini geri yüklüyoruz. Sıralamaya bakarsanız push sırası ile pop sırası terstir. Çünkü stack filo( first in last out) prensibine göre çalışır. Yani ilk giren son çıkar prensibi. Aynı bir kova gibi. Kovaya ilk önce koyduğunuz elmalar diyelim kovadan en son çıkacaktır. Çünkü en altta kalıyorlar. Neyse konumuza dönelim.

4,5,6,7 ve 8. sastırlar MessageBoxA apisiyle ilgili. 4. satır mesaj penceresinin türünü belirliyor. 5 numara başlık. 6 numara mesajımız. Burada gerçek lisans kod yazacak. Gerçek kod edi registırındaydı. 7 nolu satır handle numarası. 8 nolu satır da Mesaj penceremizi çağırıyoruz. Evet artık programı bu kısma yönlendirmek kaldı. Bunun için tekrar yukarıya çıkacağız. Ve jmp komutunu kullanıp program akışını buraya yönlendireceğiz.

Karşılaştırmanın yapıldığı yere geri döndük. 10001f37 nolu adresin bulunduğu yere jmp 10003d2a yazacağız. Böylece bizim kodlara program akışı yönlenecek. Ancak bu kısımdaki kodlar kaybolacak. Bundan dolayı kaybolan kodları da mesaj kutusunun bulunduğu kısma yazıyoruz.

4 satır komut yerine 2 satır komut yazdık. Kaybolan 4 satırı da aşağıya yazalım ki program düzgün çalışsın.

4 satırı ekledik ve program akışını jmp 10003d2a nın altındaki nop satırına gönderdik. Evet burası tamam ancak yukarıda 1 işlem daha kaldı. Onu da hallettik mi işimiz bitiyor.

10001f09 adresindeki je short sbcol.10001f3A satırı karşılaşmanın bittiğini ve lisans kodunun doğru olduğunuz gösteren kısma programı dallandırıyordu. Ancak dallandığı yerdeki kodları silip jmp ve nop komutlarını yazmıştık. Oradaki kodları da alttaki boş yerlere yazmıştık. Peki ne yapacağız. Nop ların olduğu yerleri kullanıp silinmiş yerlere eski kodları yazacağız. Böylece aynı kodlardan 2 tane olacak. Yani yanlış lisans kod girildiğinde aşağıya taşıdığımız kodlar çalışacak. Doğru lisans kodu girildiğinde ise şimdi yazacağımız kodlar çalışacak ve lisans işlemi bitecek. Yazılmış şekli aşağıda görüyoruz. 10001f44 den 10001f4f e kadar nop yani kullanabileceğimiz alan.

 

10001f09 adresindeki je short sbcol.10001f3a satırını je short sbcol.10001f45 olarak değitirdik ve oradaki kodları da boşluğa tekrar yazık. Evet işlem bitti. Kaydetmesi kaldı. Kaydetmek için farenin sağ tuşuna tıklıyoruz ve çıkan menüden copy to executable seçeneğinden all modifications’ı seçiyoruz. Açılan pencereden copy all’a tıklıyoruz. Ollydbg bize değişiklikleri gösteriyor sağ üst kısımdaki X işaretinden pencereyi kapatıyoruz. File Changed penceresine evet diyoruz. Sbcol.dll dosyası olarak kaydediyoruz. Demek ki yaptığımız değişiklikler bu dosyada. Kaydet diyoruz ve eski dosyanın üstüne yazdırıyoruz. Şimdi deneyelim. Önce yanlış sonra gerçek kodu girelim. Ve sonuca bakalım.

Fena değil. Hayırlı akşamlar………. Değişikliklerin yapıldığı dosya sbcol.dll dosyasını indirebilirsiniz.

 Son Notlar

program kodları parayı hak ediyor ama fazlasını değil. yine de bir programdan para kazanıyorsanız, programı satın alınız. Bu tutorial yalnızca bilgi vermek maksadıyla yazılmıştır. kötü bir amacımız yok yani. farklı bir amaçla kullanılacak olursa sorumluluk kabul edilmeyecektir. Lisansız kullanımdan tutoriali hazırlayanlar sorumlu değildir. insanlar açlıktan ölürken bir oyuna da bu kadar para verilmez ki. Belki de programları daha çok insan tarafından kullanılsın diye korumaları bu kadar basit. Neyse Formda bilgi paylaşan herkese teşekkürler. 

E-Mail: maviboynuz@mynetNOKTAcom