Memory Olayları

Selamlar arkadaşlar, uzun bi aradan sonra memory konusuna nihayet girmeyi başarıcaz :P
Malum iş güç, okul vs derken hayat akıp gidior insanın vakti kalmıyor, neyse konumuz uzun hemen geçelim..

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 :)

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 :) ama dmg de alıyoruz arada dolayısıyla canımız iniyor, 0 oluncada malum, ölüyoruz :) botumuza değeri gireriz, hp şu değere indiğinde bas can potunu ölmiyelim deriz oda basar :)

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 :) 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 :) Metin 2 de sanırım bu olay vardı ortalıkda canı inmeyen adamlar dolasıyordu :))) 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. :)

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 :)

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 :D 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 :) yani patch başına programdaki adresleri tekrar güncellemeniz gerekir. He diyceksinizki ben oyuna her girişimde adresmi güncelliyicem.. evet...
şaka :D hayır. Dediğim gibi o ve bu farklı şeylerdir. İşin aslı ne biliyormusunuz... Pointer diye dümbelek bişey var o :)))

Pointer Nedir : Dediğim gibi oyun her yüklenişinde adresler değişir.. Ancakkkk.... Değişmeyen bir şey vardır... :) 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 :P 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 :) (bulacagızdır :D..) Offset ne ya nasıl bulucaz demeyin onuda anlatıcam meraklanmayın :D

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 :).)
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 :D 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 :) artık her oyuna girdiğimizde baştan adress aramıycaz :D 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 :) eğer ??? şeklinde bişey yazıyorsa bir yanlışlık yaptık demektir, ve baştan tekrar denememiz gerekmektedir. dikkatlice :)
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 :) bende nerde olduğumu ne yazıcağımı unuttum ya gerçi bi yerden girelim neyse. :)

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 :)
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 :)

Son olarak herşeyi düzgün yaptık, hp değeri elimizde. Bunu nasıl kontrol edicez onuda basitce söliyim hemen :) 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 :) 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 :) 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 :))) Çü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 :P

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 :)

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 :) 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 :) 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 :D 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.

46 yorum:

Adsız dedi ki...

Usta ellerine saglık çok güzel anlatmışsın fakat ben olayı kavramkta baya zorlandım.Senin kullandıgın script bende hatalar verince bende en basitini yapmaya calıstım.Allahtan pointer olaylarını filan çok net ve anlaşılacak şekilde(en azından script konusunda yeni olanlar için) anlatmışsın yoksa imkanı yok beceremezdim.onuda burada paylaşayım

---------------------------------

Global $pid = ProcessExists("sro_client.exe")
Global $mem = _MemoryOpen($pid)

$Pointer = Dec("00A0465C")
$Offset = Dec("00000350")


$Temel = _MemoryRead($Pointer, $mem)
$Adres = ($Temel+$Offset)
$Value = _MemoryRead($Adres, $mem)

MsgBox(0, "HP", $Value)
----------------------------------

usta biran önce şu KeyboardBuffer
olayınada bi el atsanda onuda kavrasak fena olmaz diyorum..
Herşey için teşekkürler :)

taha dedi ki...
Bu yorum yazar tarafından silindi.
taha dedi ki...
Bu yorum yazar tarafından silindi.
taha dedi ki...
Bu yorum yazar tarafından silindi.
taha dedi ki...
Bu yorum yazar tarafından silindi.
313 dedi ki...

RoutéBlazin

Sen memory komutlarını kullanmamışsınki kardesim :)

mesela en ustte _MemoryOpen olucak sonra _MemoryRead var Write var.

çalışmamasının nedeni o.
Pid i 1 kere kullanman yeterli yani memoryopen 1 kerelik olucak.

gerisi doğru gibi. pointer address ise pointerden okudugunda zaten dec olarak geliyor. yani dec(00b6 yapmana gerek yok.gerçi bişey farketmez ama gereksiz.

taha dedi ki...
Bu yorum yazar tarafından silindi.
taha dedi ki...
Bu yorum yazar tarafından silindi.
Adsız dedi ki...

Çünkü Degeri okuyamadıgı için 0 degerini verio 0 currentHP den kücük olduguna göre sürekli potu basar. bukadar basit :D

çünkü bende okutamıom



int main()
{

HWND hWnd;
DWORD pID;
HANDLE hProcess;
BOOL bResult;
DWORD dwRead;
DWORD adres=0xPointer + 0xOfset;
int value;


hWnd=FindWindow(NULL,"Windows Name");
GetWindowThreadProcessId(hWnd,&pID); (PROCESS_ALL_ACCESS,false,pID);

bResult = ReadProcessMemory(hProcess,(LPVOID)adres,&value,4) ;

printf("%d",value);

CloseHandle(hProcess);
getch();
return 0;
}

ne yazıkki nerde hata yaptıgımı bilmiyorum

313 dedi ki...

RouteBlazin,

orada çok basit bi hata var hatta gözden kaçırmışsın diyebilirim :)

Guictrlread($HpInput) olayı çozucektir eğer değeri memoryden almayı başardıysan :)

taha dedi ki...
Bu yorum yazar tarafından silindi.
Adsız dedi ki...

Keyboard bufferi yazıcamda vakit bulamıyorum pek veya üşeniyorum :P

al sana çalışan bir temel adres bulma kodu. Bu benim kendi yazdığım ve kullandığım fonksiyon. Şuanda UDF geliştiriyorum. ilerleyen günlerde UDF paylaşıcam.

Func _GetValue($sOffset,$sPointer = "0x00B6D38C",$sTypo = "dword")
Sleep(10)
$sAddress = _MemoryRead($sPointer,$mem)
$sOffset = Dec($sOffset)
$finalAddress = "0x" & Hex($sAddress+$sOffset)
Return _MemoryRead($finalAddress,$mem,$sTypo)
EndFunc

bunu kullanmak için sana gereken tek şey istediğin değerin offsetidir. misal olarak hp diyelim offsetinede ornek olarak 510 diyelim. Şu şekilde bulacaksın:

$KarakterHP = _GetValue("590")

bu kadar açıklama ve kıyakta yeter sanırım :P :)

taha dedi ki...
Bu yorum yazar tarafından silindi.
taha dedi ki...
Bu yorum yazar tarafından silindi.
Adsız dedi ki...

Pardon orda yanlışlık yaptım :P
510 yazıcan 80 falan yok 590 yazdığıma bakma dalgınlıktan xD

sana önerim. o yazdığın scripti sil, kapat :)

yeni bir script aç, includeleri ver. daha sonra while dongusu yap boş bi döngü sleep ekle biraz. Ve döngünün içinde hp değerini doğru bulduğundan emin olana kadar tooltiple izle.
yani önce fonksiyonları tek tek gerçekleştir, daha sonra guini scriptini falan oluştur. benden sana son bir kıyak. o verdiğim fonksiyondaki pointer şuanda 1720 versionda calısıyor. ve hp nin offsetide şuan 594(güncel) ve 590(toplam). başka yardım isteme artık :)

taha dedi ki...

Lanet olsun yha xP MemoryRead la ugrasmycam artk :D sadece KeyboadBufferi ögretsen yeter :D

Adsız dedi ki...

şansın yok, oda memoryWrite ile çalışıyor :)))

bak sana basit bi script yaziyim belliki bıkmışsın artık uğraşmaktan ama çok ufak biryerde hata yapıyorsun farkında olmadan.

#include "NomadMemory.au3"

Global $pid = ProcessExists("KnightOnLine.exe")
Global $mem = _MemoryOpen($pid)

While 1
$hp = _GetValue("594")
Tooltip($hp,0,0)
Sleep(250)
Wend

Func _GetValue($sOffset,$sPointer = "0x00B6D38C",$sTypo = "dword")
Sleep(10)
$sAddress = _MemoryRead($sPointer,$mem)
$sOffset = Dec($sOffset)
$finalAddress = "0x" & Hex($sAddress+$sOffset)
Return _MemoryRead($finalAddress,$mem,$sTypo)
EndFunc

al bunu olduğu gibi bi kullan bakalım. olmuyorsa artık senin için yapabileceğim başka birşey yok :) oyuna girdikten sonra aç.

taha dedi ki...
Bu yorum yazar tarafından silindi.
Adsız dedi ki...

Scriptindeki hatalar cok basit aslında :) sen blogdan işin mantığını okumamışsın heralde tam anlaman için sag taraftaki yazıları baştan sona okumanı oneririm. ozellikle loop ve syntax ın geçtiği yazılar.

Burada senin yaptığın hata şudur.
HP pot basması için bize sürekli bir işlem gereklidir, çünkü healtı surekli kontrol etmeli sadece bir kere değil. Surekli kontrol etmesi lazımki düşünce bassın değilmi ?

sen burda hp check i 1 kere kontrol edilen yere yazmışsın. syntax da sadece 1 kere işlenir birdaha gorulmez. tıpkı form u 1 kere oluşturması gibi. en başta. oraya program acılıp kapanmadan birdaha donmez.

Şimdi scriptine bir bakalım :

$hp = _GetValue("594")
If $hp<$HPInput Then
Send($SenderKey1)
$SenderKey1 = Guictrlread($Combo2)
EndIf

bunu fonksiyonların arasına gelişi güzel şekilde koymuşsun :) orda sadece bir yazıdan ibaret. 2. hatanda şu : $senderkey değişkenini kullanımından sonra tanıtmışsın. burada scriptin hata verip kapanması gerekli. çünkü yukardada tanıtmamışsın.
Öncelikle bir tuşa basıcaksın, send de bunu gondericeksin diyelim. o halde once sende bunun hangi tuş olduğunu soylemen lazım. sen once gondermiş, sonra hangi tuş olduğunu söylemişsin :)

Her neyse, yapman gereken sadece _HPotKullan adında bir fonksiyon oluşturmak, hp pot kullanmak için yazdıklarını bu fonksiyonun içinde tekrar duzenlemek.

Sanırım degeri buldun artık. while dan benim yazdıklarımı çıkar, fonksiyonunu while dan çağır. bunu nasıl yapacagını biliyorsundur dilmi ? :) basit bi şekilde while ın _HPotKullan ve Sleep(100) olucak. hepsi bu.

Adsız dedi ki...

Ayrıca kullandığın değişken bir kontrolü işaret ediyorsa, bunu o şekilde bilemezsin, sen if $hp<$hpinput dersen isteğine ulaşamazsın çünkü $hpinput 0 olarak doner yada -1 vs... çünkü bir kontrole atıyorsun. Ordaki değeri ancak onu işaret ettirdiğin kontrolü okuyarak elde edersin. Bunuda bir altında yapmışsın ama bunda yapmamışsın :) dikkatin dagınık heralde.

taha dedi ki...
Bu yorum yazar tarafından silindi.
taha dedi ki...
Bu yorum yazar tarafından silindi.
taha dedi ki...
Bu yorum yazar tarafından silindi.
313 dedi ki...

ohooo :)
yazılarımı oku bak boyle bir yere varamazsın, sen daha usta olmadan ip ustunde yurumeye calısıyorsun xD

while in içine fonksiyonun adını yazıncan. o kadar. _Fonksiyoum() bu şekilde.

diğer soylediğin içinde bi label oluşturursun, aynı şekilde loop un içinde guictrlsetdata($label,$hp) şeklinde..

taha dedi ki...
Bu yorum yazar tarafından silindi.
taha dedi ki...
Bu yorum yazar tarafından silindi.
taha dedi ki...
Bu yorum yazar tarafından silindi.
Adsız dedi ki...

visual basic ile pointer kodlarını nasıl yapacağız :( bu autoit'den hiç anlamıyorum

taha dedi ki...
Bu yorum yazar tarafından silindi.
taha dedi ki...
Bu yorum yazar tarafından silindi.
Adsız dedi ki...

Bunların Hepsini yaptım cok güzel bir macro( Başlangıç :p ) oldu benim için. Emeği gecen 313 arkadasımıza teşekür ederim . Fakat aklıma takılan bir kaç şey var.

Mesela hp mp olaylarında value azaltma veya artırma yolu ile değerleri buluoruz . Fakat ? Wall hack ve sw hack ı tam olarak çözebilmiş değilim .Sw hack de sw var yada yok ( 1 ve 0 ) olarak çözdüm gibi . Ama Wall hack ı hala çözemedim . Gm ol ve olma yine 0 ve 1 olarakmı yapıcaz :p

Birde Auto it script de her zaman üstte seceneğini yapamadım

Yardımcı olursanız sevinirim Paylaşmak Farz dır :p

taha dedi ki...
Bu yorum yazar tarafından silindi.
Adsız dedi ki...

Global $pid = ProcessExists("oyunismin.exe")
Global $mem = _MemoryOpen($pid); Bunlar üstte Global olarak

;Burdn sonraki Func yapcan
$Pointer = Dec("00A0465C")
$Offset = Dec("00000350")
$Temel = _MemoryRead($Pointer, $mem)
$Adres = ($Temel+$Offset)
$Value = _MemoryRead($Adres, $mem)

$sendpothp = $GUICtrlRead($combo1)
; Göndereceğimiz tus combo1 deki
; Value zten hp değerimiz

if $Value < GUICtrlRead($input1) then

send($sendpothp)
endif

inputdaki değerin asağısına düştüğünde combo1 deki tusu gönderir ama sürekli gönderir bi timer kullanman lazım au3 su vardı bi ara. + Bu tusları sadece KO da basmasını istiorsan diceksinki ey program eğer Pencere ismi Knight Online olan pencere aktif olursa o zamn bunu gercekleştir .

Yani while içinde

if WinActive("Knight Online Client") Then
AutoHp()
endif

gibi geliştir biraz sanırım sen pointer ları fln bulmussun .

Bu arada yaş kac :p

Adsız dedi ki...

Bu arada mutlaka hotkeyset kullan arkadasım

Yukarda Yapcan bunu

dim $basla = 0

Hotkeyset("u","baslat")
Hotkeyset("y","durdur")


asağıda func olarak

func baslat()
$basla = 1
endfunc

func durdur()
$basla = 0
endfunc

söylemem gerek varmı bilmiorum ama bilmior gibi bir halin var bu blogu uzun süreden beri takip eden birisiyim .

while 1
if $basla = 1 then
AutoHp()
endif
wend

gibi gibi ..



Eğer Macron hala calısmıorsa Pointer da sorunun vardır veya Engelleyen bir program vardır ( xtrap vs . )

313 Kardesim gibi yardımcı olmaya calısam bende ..


İyi Aksamlar .

taha dedi ki...
Bu yorum yazar tarafından silindi.
taha dedi ki...
Bu yorum yazar tarafından silindi.
Adsız dedi ki...

Arkadasım sanırım programlamada yenisin . Programlamada şöyle bişey vardır . ilk önce yazcağın programın türkçesini cıkar :)
Bu arada sleep kodu şudur programı uyut ! yani zaman şeysi diildir .

Bak şimdi atak yap eğer hp düşerse atak durdur hp yükselten fonksyonu gercekleştir hp yükselirse atak yap . gibi değilmi ? tüm işin if lerden sağlanacak .
func atak()
if $atakbaslat = 1 then
send("z1")
endif
endfunc


if $value < $GUICtrlread($combo1) then $atakbaslat = 0 ; durdur
endif


gibi gibi . Bak herşeyde hazırcı olma programlama yapacaksan cogu şeyi kendin çözmen gerekir . Haa diceksinki bu blog neden var . Takıldıgın be bilmediğin şeyleri ögrenmek için var . Memory i millet nerden görcek ögrencek gibi gibi .. ( Niese hep gibi gibi .. :D ) . Hatalı kodlarını söyle düzeltelim muhtemelen yanlıs yazım yapıorsun ..

Adsız dedi ki...

Arkadsım sorry combo1 yazmısım input yapcan onu :))

taha dedi ki...
Bu yorum yazar tarafından silindi.
DuMaNLaR dedi ki...

bu konuyu hiç üşenmeden sonuna kadar okudum baya güzel bir konuya değinmişsin. senle özel olarak konuşmak istiyorum. mail adresini göremedim beni eklersen görüşürüz.
ben koxp yazmak istiyorum c# da pointer bulmayı öğrendim fakat bir kaç tane daha pointerler var onları nasıl bulacağımı anlayamadım

msn: dumanlar@windowslive.com

Adsız dedi ki...

benim autoit3 te yazdığım betiklerde ctrl shift capslock gibi tuşlar basınca takılı kalıyo çözümü nedir yardımcı olursanız sevinirim

biyo dedi ki...

313 arkadasıma cok tesekkür ederim pointer ve ofseti buldum hero da parayı denedim parayı kullanamadım client side olayımı CE sadece pointer ve ofseti bulmak içinmi kullanılır olayın gercekleşmesi için autoit e girmekmi gerekiyor autoit icalıstırdım ama pointer soran bi yer bulamadım yanlış yoldamıyım :D cahilligime ver amatörüm 4gündür bunun üzerinde calısyorum elimde pointer ve ofset var ama icraat yok ::D biraz daha ayrıntı vere bilirmin saygılar

biyo dedi ki...

6 günlük bir calışma sonunda CE sadece pointer ve ofset bulmaya yaramadıgını ögrendim (totorailler sayesinde)CE de 8 farklı yolun oldugu bunlardan ilk 6 sında memory e girişte oyundan dc ediyor karakter üzerinde degişikligin oldugu ama serverde tanınmadıgı görülüyor 7 yolda ise cod enjeksiyon yöntemi bunu uyguladıgımda dc vermiyor ama istedigimide vermiyor degişikligi ben görüyorum server degil 8. yoluda denedim ondada 4 pointer ve 1 ofsetle bulunan yöntem sadece son bir rakamı bulamadımbelkide yanlış yaptım burdaki amacım yolun basındayım biliyorum scrite yazmak oto bot koxp yapmak degil nasıl para yapılır bununla baslayıp devam etmek 313 kardeşimin yardımlarını bekliyorum saygılar

313 dedi ki...

mrb biyo, uzun zaman olmuş yazalı ama yeni görebildim. para olayı anlattığım gibi çoğu oyunda server-side dir yani kaç paran olduğunu server zaten bilir. client sadece serverin bildiğini sana bildirir. dc olayı için ise ce kullanıcılarının paylaştığı gizlenmiş versionları deneyebilirsin.

Dora dedi ki...

313 yazının cheat engine bölümü beni çok ilgilendiriyor. Benim sorunum adreslerin sürekli değişmesi. mesela ben bir oyunda hp adresini buldum ama oyunu kapayıp açınca bu adres değişiyo ve benim yaptığım trainer bir işe yaramıyo. bu konu hadkkında verebileceğin bir yöntem ya da herhangi bir link varsa çok makbule geçer. umarım yazımı görürsünüz. teşekkürler...

Adsız dedi ki...

Hala burada olan kodlamadan anlayan var mı ? yardım lazım

Yorum Gönder