Merhaba arkadaşlar,
Code cracking, reverse engineering, game
hacking gibi konuların tekrardan konuşulur hale gelmesi için böyle bir
aksiyon başlatmaya karar verdim :) Umarım uzun ve katılımın bol olduğu
bir seri olur.
Eğer game hacking, code cracking gibi konular size
gerçekten çekici geliyor ve ben de 1-2 şey yapmak istiyorum diyorsanız
dikkatlice okuyun. Bu yazıdaki konum Game hackingin temel mantığı ve
başlangıç terimleri üzerine olacaktır.
Belkemiğimiz Memory;
Memory bir oyunun ramde kapladığı yere denir. Geçici değerlerin
saklandığı adres aralığıdır. Geçici adresler bizim oyun içerisinde
ölümsüz olmamıza, sınırsız paramızın olmasına ve aklınıza gelecek birçok
değer ile oynamamızda yardımcı olur.
Cheat engine bu değerleri saptamamızda yardımcı olacak olan kullanımı basit olan bir programdır. Zaten çoğunuzun kullandığına da eminim :)
Örneğin;
oyun içerisinde 50.000 paramız var. Cheat Engine ile adressini tespit
edip değeri 999.999 yaptık diyelim. Eğer oyunumuz MultiPlayer oynanan
bir oyun değilse yani değerler sadece bizde varsa değişiklik başarıyla
gerçekleşecektir. Fakat oynadığımız oyun MMO(Massive Multiplayer Online)
türü bir oyunsa işlem bu kadar basit olmayacaktır. MMO oyunlarda
bilgiler server tarafında depolanır yani server side. Serverda paranız,
canınız, oyun içi değerleriniz gibi değerler hilenin önüne geçmek için
saklanır. Şöyle bir örnek vereyim oyun içerisinde markette 60.000 para
değerindeki bir eşya gördünüz ve almak istiyorsunuz fakat sizin para
değeriniz 50.000. Cheat engine'i açıp para değerinizi 70.000 olarak
değiştireceksiniz ve başarılı bir şekilde değiştini göreceksiniz fakat
markete gidip istediğiniz item'i almaya çalışıp alamayınca hayal
kırıklığına uğramayın :) Çünkü oyun içi para önemli bir değer olduğu
için server side bir bilgidir server tarafından bilinir. Kısacası MMO
oyunlarda serverin bildiği değerler üzerinde oynayamayız. (Fakat online
oyunlarda paketler yollayarak hile yapmak mümkün olacak. İlerki
yazılarda göreceksiniz)
Bahsettiğimiz Para, can, oyun içi değerler
memorydeki adresslerde depo edilir. Çoğu kişi buraya kadar tamamdır ama
bu noktadan sonra kopar :) Fakat bu yazıdan sonra sıkıntınız kalacağını
sanmıyorum. Memory içindeki adressler değişkendir uygulamayı kapatıp,
açtığınızda adresslerin kısmen* değiştini bulduğunuz eski adresslerin
hiçbir önemi olmadığını göreceksiniz. Bu noktada anahtarımız Pointer!
Pointer;
Türkçe
karşılığı işaretçidir, adından da anlayacağınız üzere bizlere bişeyleri
işaret eder :) Uygulamayı aç-kapa işleminden sonra adreslerin
değiştiğini söylemiştik. Değişen adresi tekrar tekrar aramamız için
pointer bize sunulan bir nimettir. Pointer oyuna yama gelmediği, exe
değişmediği sürece kesinlikle değişmez. Yani uygulamayı aç kapa yapsanız
bile değer geçerli olacaktır. Pointer bize değişen adresleri işaret
eden temel bir adresdir. Bu temel adres üzerinden istediğimiz değere
gitmemize yardımcı olacak olan değer ise offsettir.
Pointer + offset bize değişen değeri işaret eder.
Örneğin pointerimiz, temel adresimiz 0x123456 olsun.
Paramızın offseti 0x123 (Para değerimiz 50.000 olsun)
Oyun içerisindeki canımızın değeri de 0x456 olsun. (Oyun içindeki healthımı da 100 olsun)
Pointer + Paramızın offseti bize değişen paranın değerini verecektir, şöyle ki;
"0x123456" + "0x123" = 50.000
"0x123456" + "0x456" = 100
İşin güzel yanı pointer ve offseti bir kere bulmak yeterlidir :) Oyuna bir yama gelmediği sürece pointer ve offset değişmez.
Şimdi sizlere bir video aracılığı ile Pointer ve offset'i nasıl bulacağınızı göstereceğim;
http://www.youtube.com/watch?v=M-sIhDuY_TU
iyi oyunlar :)
not: serinin devamında C#, VB ve C++ gibi diller kullanarak bulduğumuz pointer + offset aracılığı ile read/write yapacağız