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