Üye olurken lütfen saçma mail adresleri yazmayınız üyeliğinizin aktif olabilmesi için mail adresinize gelen onay link'ine tıklamanız gerekiyor..
www.koxppers.forummum.net

Aradığını Bulanların Forumu! Ko-xppers

Join the forum, it's quick and easy

Üye olurken lütfen saçma mail adresleri yazmayınız üyeliğinizin aktif olabilmesi için mail adresinize gelen onay link'ine tıklamanız gerekiyor..
www.koxppers.forummum.net

Aradığını Bulanların Forumu! Ko-xppers
Would you like to react to this message? Create an account in a few clicks or log in to continue.

Bağlı değilsiniz. Bağlanın ya da kayıt olun

Memory Olayları

Aşağa gitmek  Mesaj [1 sayfadaki 1 sayfası]

1Memory Olayları Empty Memory Olayları Ptsi Tem. 26, 2010 12:13 am

GisTo

GisTo
Admin
Admin

Memory
derken kastettiğim şey bildiğiniz ram değil, bir oyunun ram de
kapladığı yer, yani işlenen geçici verilerinin saklandığı adres
aralığıdır. Eee bu geçici verilerden hangileri işimize yarar ? örneğin
hp, lvl puanı, mana, para vs.. gibi değişken değerler bize gerekenlerdir
Smile

Neler yapabiliriz bu değerlerle, örneğin hp mizi
dondurabiliriz, aynı şekilde mana mızı, oyuncumuzdaki parayı
değiştirebiliriz, veya bot yaparız karakterimizi bu değerlerle kontrol
ederiz. Nasıl kontrol ederiz hemen onuda açıkliyim, diyelimki bıraktık
biryere karakter kasıyor Smile ama dmg de alıyoruz arada dolayısıyla
canımız iniyor, 0 oluncada malum, ölüyoruz Smile botumuza değeri gireriz,
hp şu değere indiğinde bas can potunu ölmiyelim deriz oda basar Smile

Hp
dondurmaktan bahsettik, bu nedemek ? hp mizi 1000e dondururuz misal,
yaratık vursada canımız inmez, cunku o değere surekli 1000
yazılmaktadır. 900e insede tekrar 1000 olacaktır. Ancakkk..... burda
dikkat etmemiz gereken şey Client-Side , Server-Side olayıdır. Nedir bu
olay hemen açıklayalım. Biz oyunu oynadığımız için Client side de
bulunuruz. Misal olarak biz karakterimizin canı normalde 1000 se bunu
10.000, 100.000 yaparız ama sorun şudur ki Server karakterimizin gerçek
canını biliyorsa 1.000.000 da yapsak 1000 dmg alınca ölürüz Smile Ki çoğu
online oyunda bu böyledir, bazı temel değerler server tarafındanda
bilinir. Serverin databasesinde karakterimizin tüm temel özellikleri
kayıtlıdır. Eğerki kayıtlı değilse, zaten o oyun oynanmayacak bir hal
alır ve dandirikde bir oyundur zaten Smile Metin 2 de sanırım bu olay vardı
ortalıkda canı inmeyen adamlar dolasıyordu Smile)) Neyse kısaca server
side client-side yi en basit şekilde anlatmaya çalıştım anlaşılmıştır
umarım. Serverin bilmediği şeyler üzerinde değişiklik yapabiliriz bu
anlaşılmıştır, bildiği şeyler üzerinde ise değişiklik yapamayız ama bu
konuda bi artımız vardır, onları bizde bilebiliriz. Smile

Memory
karışık olduğu kadar aslında basittirde. Eminimki bu yazıyı okuyanların
yuzde 80 i Cheat-Engine kullanmıştır. Cheat-Engine saygıdeğer bir
yazılımdır onsuz işimiz çok zor olurdu Smile

Memory i bugüne kadar
kullanan veya kullanmaya çalışanların eminimki coğunluğu "Yaa bu benim
pc de çalışıyor, arkadaşda çalışmıyor veya Oyunu kapayıp açınca bir daha
çalışmıyor" gibi yakarışlar içindedir Very Happy Bu hataya coğu kişi düşer
aslında bu bi hata bile değil sadece bi başlangıçtır, siz birşeyler
yaptığınızı sanırsınız ama olaya daha yeni başlamışsınızdır.

Memory
de tutulan değerlerin adresleri, oyun her açıldığında değişir. HP, MP,
Vs.. i daha once kullananlar, her değer için farklı adres olduğunu
sanarlar ama bu bir bakıma yanlıştır. Knight Online yi örnek alarak
anlatmaya devam edelim.

Her patch de exenin boyutları değişir
bildiğiniz gibi 1kb da olsa 1mb da olsa 1byte da olsa değerlerin
adresleri değişecektir. Bir önceki bahsettiğim değişmeyle bu değişme bir
değildir. Patch geldiğinde adresler gerçekten değişir Smile yani patch
başına programdaki adresleri tekrar güncellemeniz gerekir. He
diyceksinizki ben oyuna her girişimde adresmi güncelliyicem.. evet...
şaka Very Happy hayır. Dediğim gibi o ve bu farklı şeylerdir. İşin aslı ne biliyormusunuz... Pointer diye dümbelek bişey var o Smile))

Pointer
Nedir : Dediğim gibi oyun her yüklenişinde adresler değişir..
Ancakkkk.... Değişmeyen bir şey vardır... Smile oda değişen adresin
adresini barındıran pointer dır ve bu temel adresden istediğimiz değere
(hp,mp,vs..) gitmemizi sağlayacak Offset dir. Pointer işaret demek
ingilizce galiba. Yani bize o değişen adresi işaret eder. Derki bak bu
dallama yine yer değiştirdi buldum şuraya gitmiş. Bizde temel adresi
alırız, ve zaten bildiğimiz ve elimizde olan Offsetide onla toplayıp
istediğimiz değere ulaşırız. Pointer ve offset hiç bir zaman değişmez.
Takiii bir sonraki patch gelene kadar.

Hemen şunuda söyliyim.
Dedim ya hani hp mp vs değerleri daha oncede bulup kullanmış olanlar,
her birinin ayrı bir adres olduğunu düşünürler. Bu yanlıştır. Temel bir
adres vardır. Yani hemen şöyle açıklıyıyım. Array ın ne olduğunu
bilenler için arraya benzer bişeydir bu Razz Diyelimki temel adresimiz
"0xABCDEF" olsun. HP değerini bir offset yardımıyla buluruz. Yani şu
şekilde olacaktır. "0xABCDEF" + "0x510" burdaki "0x510" hp nin
offsetidir. Aynı şekilde diyelimki "0xDE5" de mananın offseti olsun,
"0xABCDEF" + "0xDE5" olarak onuda bulacagızdır Smile (bulacagızdır Very Happy..)
Offset ne ya nasıl bulucaz demeyin onuda anlatıcam meraklanmayın Very Happy

Oncelikle
Cheat-Engine de adres ve offset bulmakdan bahsedelim biraz. Bu konuda
Cheat-Engine nin forum sitesindeki tutorial ve yardım konularını
okumanız gerçekten sizin için çok faydalı ve kesinlikle gereklidir!. Ben
çünkü resimli anlatamıycam şimdi dediğim gibi konu zaten uzun ve resim
çek ekle vs.. uğraştıracağı için elimden geldiği kadar basit bi şekilde
adım adım anlatmaya çalışıcam.

Cheat-Engine de pointer ve offset bulmak :
(Knight Online den örneklendiriyorum, "CE = Cheat-Engine", "KO.exe = KnightOnLine.exe")

1-> Oyunumuza giriyoruz. Karakter gelene kadar bekliyoruz..
2-> CE açıyoruz yukardan pc iconuna basıp KO.exe seçiyoruz ok luyoruz.
3-> Artık CE KO.exe nin memory adres aralığında işlem yapmaya hazır durumda.
4->
Oyundaki hp mizi CE ye giriyoruz ve first scan basıyoruz. (Decimal
olarak arıyacaız yani HEX seçili olmaycak. Hex 0x123, 0xABC şeklindeki
değerdir, decimalse sadece sayılardan oluşr)
5-> Sol tarafta 100 200 veya birkaç yüz değer çıkıcak.
6-> Oyuna dönüyoruz, hp mizi değiştiriyoruz. (yükseltmek veya azaltmak farketmez, değişmesi yeterli)
7-> Daha sonra hp değerini bir daha giriyoruz ve next scan a basıyoruz.
8-> Sadece bir adres kalmış olması gerekir eger kalmamış ise tesadufdur baştan yapın bir adres kalana kadar.
9->
Artık hp nin adresini bulduk. Bulduğumuz bu adres pointer değildir
karıştırmayın. Temel adresde değildir. Temel adress ve offset
toplamıdır. Oyunu tekrar başlattığımızda bu adres değişecektir. O yüzden
pointer bulmamız gerekiyor. (üstüne basıyorumki anlaşılsın Smile.)
10-> CE de solda kalan tek adresi cift tıklayarak aşşağa alıyoruz.
11-> Buna sağ tıklayıp "find out what writes to this address" diyoruz. Bişey cıkıor hede hodo dior yes dioruz.
12-> Karşımıza gelen ekran oyle kalıor dokunmuyoruz.
13-> Tekrar oyuna donuyoruz hp mizi bir daha değiştiriyoruz.
14-> CE donuyoruz bakıyoruzki o ekranda bişey yazıyor. mov eax esi cart curt şeklinde.
15-> Şimdi stop a basıyoruz ve o gelen yazıya çift tıklıyoruz.
16->
Karşımıza gelen ekranda, the pointer you probably find hede hodo is :
0ABCDEF şekline bişey yazıyor. Onu bir kenara not alıyoruz. Ve burda en
ortada kırmızı ile yazan satırda misal olarak : "mov, [eax+00000e4]"
şeklinde bir yazı var. burada + dan sonraki kısım bizim aradığımız
offset dir. bu e4 değilde 500 510 600 de olabilirdi. veya eax*4+00000e4
şeklinde daha komplex bişeyde olabilirdi. mesela bu komplexden
alacağımız sonuc 4+e4 = e8 olacaktır.
Bunları anlamak için cheat
engine tutoriallerini mutlaka okumanızı tavsiye ederim. Google a yazın
cheat engine diye ana sayfasınadan forumlara girin tutorialleri
bulursunuz Very Happy Ayrıca + yada dikkat edin mesela o [eax-00000e4] olsaydı
offsetimiz E4 yerine -E4 olacaktı yani temel adresle toplamak yerine
çıkarıcaktık...
17-> Neyse, Şimdi bu the pointer you propably hede
hodo dedim ya o değeri bir kenara yazıyoruz. O bizim aradığımız temel
adresdir. Offset ide tabiki yazıyoruz bir kenara oda hp nin offsetidir.
Şimdi o pencereyi kapayalım. CE geri donelim, New scan yapıp hex
kutusunu seçelim.
O bulduğumuz temel adresi yapıştırıp first scan
diyelim. Karşımıza coğu zaman sadece 1 adres gelir. ama 1 kaçda
gelebilir boyle durumlarda merak etmeyin, gerçek adres coğu zaman %90
cogunlugu sayılardan olusan, sayıyla baslayan, veya en bastaki en küçük
değerdir. Bu bulduğumuz adress, bizim temel adresimizi işaret eden
Pointer dir.
18-> Pointeri bulduk Smile artık her oyuna girdiğimizde
baştan adress aramıycaz Very Happy Pointeri doğru buldukmu diye göz atmak
isterseniz hemen CE den add new adress i tıklayarak pointer kutucugunu
isaretleyebilir kutuya bu yeni adressi (karıştırmayın sol tarafta olan
yani onceki buldugumuz temel adres dediğimiz değil, sol tarafdaki)
yazıyoruz ve offsetide yazıp ok basıyoruz. Aşşağıya yeni bir address
eklenicek bu addressin value kısmında eğer hp değerimiz yazıyorsa doğru
adresdeyiz demektir Smile eğer ??? şeklinde bişey yazıyorsa bir yanlışlık
yaptık demektir, ve baştan tekrar denememiz gerekmektedir. dikkatlice Smile
19->
Elimizdeki değerlere bir göz atarsak, Temel adress e artık gerek
kalmadı neden ? cevabını kendi kendinize bi verin, ondan sonra okumaya
devam edin!

Çünkü pointeri bulduk.. Bu pointer oyuna her girdiğimizde değişen temel adresi bize verecektir.
Bizde offsetleri girip istediğimiz değere ulaşacağız.
20->
Sonuc olarak pointer ve hp offseti elimizde. Sadece hp yi bulduk,
bundan sonrası size kalıyor. Aynı şekilde manayı vs de bulacaksınız. Ama
bu sefer bize gereken sadece offseti. Pointeri nasıl olsa bulduk.
Unutmayın ki birçok temel değer bir arada bulunur. yani aynı temel
adresi kullanırlar. En azından ko da öyle. Ama şunuda söyliyim hemen
farklı konulardaki şeyler farklı adreslerde buluna bilir. yani silahın
durabiltysi ile karakter ozellikleri ayrı temel adresler kullanırlar.

Tutorial bu kadar artık autoit e dönelim Smile bende nerde olduğumu ne yazıcağımı unuttum ya gerçi bi yerden girelim neyse. Smile

Auto-it De Memory İşlemleri
Oncelikle
bu olay için bize bir memory include si gerek bende olan
NomadMemory.au3, bundan orneklerle calısıcam sizinde bunu temin etmeniz
gerek devam etmek için. Autoit in forumlarında aynı şekilde yazarsanız
bulabilirsiniz.

En baştan başlıyalım artık detaya girmiycem,
kodun yanına açıklamasını yazıcam. Temel komutları açıklamıycam zaten
biliyorsunuz..

$pid = ProcessExists("KnightOnLine.exe") ; bu
memory open fonksiyonu için gerekli. yani bunun return değeriyle memory
açabiliyoruz.
$mem = _MemoryOpen($pid) ; KO nun memory sine erişimi açıyoruz.

Bunları
en başa global olarak ekleyebiliriz. bir kere kullanıcaz. bundan sonra
bir fonksiyon yapmanızı size oneririm. fonksiyonlarla çalışmak daha
kolaydır. ilk yapıcagımız fonksiyon temel adresi ogrenmektir. bunun için
fonksiyonumuz şudur:

Func _BaseAddressBul($sPointer)
Return
$BaseAddress = _MemoryRead($sPointer,$mem) ;elimizde zaten bulunan
pointer adresini _MemoryOpen ile yeni açtığımız $mem değerinden
okuyoruz. Burda hata almamak için en uste Global $BaseAddress = ""
eklememiz lazım. Variableyi tanıtmayı unutmayın.. aslında bunuda
yazmamam gerekti ya neyse sonradan okuyanlar için, birdaha yazmıcam ama
bu tip bi açıklama Smile
EndFunc

Artık $BaseAddress değerimiz
oyunu her açtığımızda değişen temel adresi pointerimiz yardımıyla bize
bulucak. Geri kalan şey ise Offseti buna ekleyip istediğimiz değeri
bulmak. Buyrun oda bu şekilde:

Func _DegerOku($sAddress = $sBaseAddress,$sOffset,$sMem)
$sOffset = Dec($sOffset)
$finalAddress = "0x" & Hex($sAddress+$sOffset)
Return _MemoryRead($finalAddress,$sMem)
Endfunc

Bu fonksiyon direk bize istediğimiz değeri verecektir, hp mp vsss.
Açıklamasını
yapalım hemen, $sOffset i dec e cevirmemizin nedeni şudur pointerden
gelen adres bize decimal olarak gelir yani sayılardan oluşur.
Toplayacağımız için onunda dec olması gerekir. Final adres değişkeninde
başına "0x" eklememizin nedeni nomak memory nin bu şekilde okuması
ornegin visual basicde &H ekleriz 0x yerine. daha sonrada toplamı
hex e çeviriyoruz.
sonucta elimizde kalan değer "0xE295034" vs
tarzında bişey oluyor. Fonksiyonun kullanımını söylemiycem çözmeniz zor
değil bu kadar hazırcı olmayın, hatta çözülecek birşey bile yok Smile

Son
olarak herşeyi düzgün yaptık, hp değeri elimizde. Bunu nasıl kontrol
edicez onuda basitce söliyim hemen Smile Mesela onceki testmac de verdiğim
ornek bununla cok guzel bi şekilde kullanılır. Tek yapmanız gereken
değeri bi değişkende tutmak, loopda input box daki değeri okuyup, eğer
aldığımız hp değeri input boxdakinden küçükse Send(Pot tuşu) şeklinde
olacaktır.

Memoryi kullanarak yapabileceğiniz şey çokdur, hayal
gücünüzü kullanın. Bu sizin Cheat Engine yi ve memory i nekadar
bildiğinize bakar. Misal olarak wallhack, gm modu bunlarda client side
memory ile yapılır. örnek olarak wallhack Client Side dir, yani server
sizin duvara girip girmediğinizi kontrol etmez.. Client, Server side
olayına iyi bir ornekdir bu. Wallhack e gm mod da dahildir. Yazınız mor
gozukur. Ama sadece siz gorursunuz. Neden ? cevap verdiniz siz verdiniz
Smile Doğru cevap. Çünkü server gerçek GM nin siz olmadığınızı bilir.

Bu
konuya yapacağınız yorumlarda lütfen şunu nasıl yapıcam bunu nasıl
yapıcam diye sormayın. Eğer bir hatanız veya takıldığınız biyer varsa
cevaplamakdan mutlu olurum Smile Ama dediğim gibi ya chardaki parayı nasıl
değiştiricem, dex i nasıl 500 yapabilirim, Aga dupe yapakmı vs bu tip
sorularınız cevapsız kalacaktır Smile)) Çünkü bu tip şeyleri benden
öğrenmeniz size hiç bir şey katmaz, kendi kendinize birşeyler üretmeniz
her zaman kalıcı olacaktır ve sizi dahada ileriye taşıyacaktır, bunu
tamamen yaptıktan pişirdikten sonra bakıcaksınız ki artık daha farklı
daha zor şeylerle uğraşıyor olucaksınız. Orneğin ko ya direk paket
gondermek gibi... Şuan bende o aşamadayım ve baya yol kat ettim. Eğer
iyice pişirirsem sizede bi parça bişeyler düşer elbet Razz

Sonuç
olarak ben size işin temelini ve zor olan kısmını verdim, size kalansa
kolay olan kısmını yapmak, bu fonksiyonları scriptinize direk olarak
ekleyebilirsiniz ve kullanabilirsiniz. Sabahtan beridir bu yazıyı
yazıyorum uzadıda uzadı dolayısıyla varsa bir hata kendiniz
duzeltebilirsiniz. Mantığı anlamış olmanız yeter. Şimdilik sendkey ile
idare edin, birdahaki konuda oyunun KeyboardBuffer ini kullanmayı
anlatıcam, yani sizin anlayacağınız dilden ALT+TAB modu Smile

Son
olarak benim korkum şudur piyasanın AhmetKOXP mehmetKOXP dolması. Bu
konuda unutmayınki herkezle eşit olursanız sizin hiçbir ayrıcalığınız
kalmaz, yapın geliştirin, ama nolursa olsun yaymayın kendiniz kullanın.
Kabiliyetinizi ve pc başında harcadığınız onca zamanı hiç anlamayan
beleşçi aga kardeşlerimize yedirmeyin Smile Geliştirip para kazanma
amacında olanlarada şunu söliyebilirim. Piyasanın en iyisi bildiğiniz
gibi HF dir. Ancak onun seviyesine geldiğinizde pazarlama işine atılın
Smile Bi ara çıkan kole gibi 2 ay sonra yalan olmayacak durumdaysanız
atılın, Inanınki insanlarla uğraşmak zordur. Bu işin yasal
sorumluluklarınıda unutmayın tabiki. Sonuç olarak kalite bi bot yapmak
%100 ise bu işide yaptıktan sonra siz bu yolun %40 ında olacaksınız ve
siz %10 daha ilerledikçe %100 %110 olacak bunu unutmayın.

Bu
kadar edebiyat yeter Very Happy ama hoş görün burda birşey paylaşıyorum ve doğru
insanlara gittiğinden emin olmak isterim. Neyse, Sağlıcakla kalın, iyi
scriptlemeler.

http://koxppers.forummum.com

Sayfa başına dön  Mesaj [1 sayfadaki 1 sayfası]

Bu forumun müsaadesi var:
Bu forumdaki mesajlara cevap veremezsiniz