KeyBuffer ve Kullanımı

Merhaba ziyaretçiler, blog takipçisi arkadaşlar ve bu yazıyı okuyanlar :P
Google amcanın yönlendirmesiyle demiri attığınız bu yegane blog sayfasında uzun süredir yazmayı planladığım makaleyi yazmak 2 adet korku filmi izledikten sonra kaçan uykum sonrasında pazartesi sabaha karşı 4:30 sularına nasipmiş :D neyse uzatmayalım başlayalım.

Oyunlar bildiğimiz üzere klavyede yer alan tuşlarla oynanıyor :P otomasyon içinde bu tuşları kullanmanın en basit yöntem olduğunu biliyoruz. Bir oyunda tuşa basmak için birkaç yöntemimiz var. (veya tuşa bastığımızı bildirmek.)

1-> Elimizi kullanarak klavyeyle temasa geçmek. :P
2-> Sendkey (Directinput ile tuş simülasyonu yapmak / user32.dll saolsun.)
3-> PostMessage (Belirlenen pencere başlığına veya penceredeki herhangi bir kontrole string yollamak. ki bu string diyelimki 1 ise oyun bunu 1 e basıldı şeklindede algılayabiliyor.)
4-> Keyboard Buffer dan yararlanmak (Memory).

Konumuz bilindiği üzere 4. maddedir.

Memory herşeyin işlendiği yer olduğundan tuşa bastığımızda yine doğal olarak orada işlenecektir. Keyboard buffer tuşların basılmayı bekledikleri memorydeki adresleridir.
kullanıcı tuşa bastığında değer işlenir. Windows üzerinde çalışan her programın + windowsun hatta bios un bile bir keyboard bufferi vardır. Mantığını daha basit anlatmak gerekirse, ram de hertuşun bir adresi vardır diyelimki bu 1 den 10 a kadar olsun bu 1 ile 10 arasının tamamıda keyboard buffer oluyor efenim. Bu adresciklerin herbiri farklı bir tuş içindir mesela 1 a nın 2 b nin 3 e nin gibi. ve hepsinin değeri o anlık 0 dır taki siz o tuşa basana kadar. bastığınızda 1 olur.
Keylogger programları bu mantıkla çalışır. Çoğu windowsun keyboard bufferine yapışır ve malum değer 1 olduğunda tuşa bastığınızı tespit eder. Notepad ın bile bir keyboard bufferi vardır, yani notepad e bile MSN Koxp kurabilirsiniz bilmem anlatabildimmi :D

Oyunlardakininde pek bir farkı yok. Konuyu fazla uzatmayada hiç gerek yok. aslında çok basit. memory ile haşir neşir olduğunuzdan aslında çoktan bulmanız gerekirdi ama, zamanında benimde aklıma gelmemişti tuş gönderme yöntemlerini ararken rastladım ve araştırdım.

Yapmanız gereken şudur. KO ya girin. cheat engine herzamanki gibi bizimle olucak.
Namı değer MSN koxp :D açın msn i alın ontop mode üstte dursun z yi basılı bırakın. değişeni aratın. sora z yi serbest bırakın bir daha değişeni arayın. 1 veya birkaç değere indirene kadar devam. Doğru adresi bulduğunuzu anlamanın yöntemiyse şudur: Elinizde 1 kaç adres kaldı diyelim, z yi tekrar basılı bırakın msn yardımıyla ve cheat engineden 1 olan değerleri tek tek 0 yapın ve pencereyi aktif yapmadan, cheat engineyi hafif kaydırarak yukardan oyuna bakın bakalım z yi bırakmışmı. eğer z yi bırakırsa doğru adresdesiniz demektir. (oyuna dönmemeye dikkat edin yani sizin anlayacağınız dilden msn koxp u bozmadan bakın karakter z yi bırakmışmı diye.)

Adresi buldunuz, aynı şekilde pointerini ve offsetinide buldunuz olay tamam sayılır. diğer tuşları offsetde hafif oynamalar yaparak bulabilirsiniz tek tek uğraşmadan. +4 +4 atlayarak diğer tuşlara ulaşın. basit bi script yapın, sürekli o tuşu göndersin ama pencere bu kez aktif olsun rahatça bulun. Eğer diyorsanız ki tuşu göndermeyi söylemedinki nasıl göndericez :D söyliim.

Başından beri anlattığım üzere bu adres 0 dır ve siz tuşa bastığınızda 1 olur o halde mantığımızın yönlendirdiği üzere memory ile bu adrese önce 1 ve biraz bekleyerek 0 yazdırıcaz. bu biraz beklemeyi kafanızdan hesaplayabilirsiniz, yani sizin bir tuşa basmanız saniyenin kaçta kaçı zamanda olur ? ben saniyenin 10/2 si gibi bi zamanda basıyorum, kabiliyet :D, 200 sleep :P

Son olarak benim denemelerimden bahsediyim, benim son olarak geldiğim nokta:
Tuşları oyuna gönderiyorum, ve oyun aktifken çok güzel çalışıyor. en güzel özelliği aslında chat penceresiyle karışmıyor, yani rahatça yazabiliorsunuz. Sorun şuki, oyun aktif değilken skilleri göndermeyi bir türlü başaramadım, WOLF dışında :D nedendir bilmem wolfu pencere aktif değilkende atıyordu. Şu olabilir sizi yanıltmasın, script pencereniz her zaman üstte olsun, atak yaparken kendi pencerenize tıklayın, çok çok basitçe hiç uğraşmadan msn koxp yaparsınız.
ama diğer tuşlarınız basmaz. sadece z1. şansınız olursa benim gibi belki wolfuda atarsınız :D

Herşeye rağmen benim görüşümce bu yöntem sendkeyden çok daha iyi işliyor. en azından arka planda z1 atıyor bence bu bile yeterlidir :) ufak bi not daha ekliyim, bazı tuşlar çok geç bastığından ben 1 ve 0 yazdırmak yerine sürekli 1 yazdırıyordum. o zaman daha seri basıor ve arka plana geçmek istediğimde çok daha rahat geçiyordu. önerim sizde öyle yapın, sadece zamanlı skilleri 1-0 şeklinde yapın. Vaktim olsaydı keşke biraz daha zorlardım ama belki sizlerden birisi çok daha iyi çalıştırabilir ve bizimlede paylaşır. Ben en son skill vururken pencere aktifmi değilmi falan kontrolümü yapıyor acaba diye biraz kurcaladım cheat engine den. pencere aktif-değil şeklinde aratarak, birkaç sonuç buldum directx8 ile alakalı çıkıyor ama hepsi ve değeri değiştirince oyun donuyor, mantığını çözemedim :)

Neyse, takıldığınız bir yer olursa cevaplamaya çalışırım, kullanması ve geliştirmesi size kalmış anlaşılmıyacak biryer yoktur umarım, bir sonraki makalede görüşmek üzere :P
Bol şanslar.

25 yorum:

taha dedi ki...

Bu olayın mantıgını ahmetle :D biz tahmin etmiştik :D ama nası yapıldıgı hakkında bir fikrimiz yoktu makaleyi okudum hala yok :P Şimdi KeyboardBuffer'i biz mem. write ile value değiştirerek mi yapıcaz?

Adsız dedi ki...

Emeğine sağlık okuyalım bakalım.

Adsız dedi ki...

Yine pointer ve offset :D mantığını kavradımda ilk olarak neyi aratıcaz sonra değişen değerine bakıcaz onu çözemedim? Bunu anlayan varsa söylerse sevinirim. Yaptıktan sonra bir kaynak kod koyarım.

313 sen ararken bulmuşsun sanırım bulduysan koysana :D

Adsız dedi ki...

Özür dilerim flood oluyor ama sanırım önce 0'ı aratıcaz sonrası zaten msn koxp falan ben böyle anladım sanırım doğru.

Adsız dedi ki...

vala hayal gücünüzü kullanın :D
ilk olarak 0 ı aratın. daha sonra msn koxp kurun sadece z basılı kalsın. bu kez 1 i aratın. sonra bırakın z yi 0 aratın bu şekilde azalta azalta devam edin. ben ararken sadece keybufferin ne olduğunu buldum, nasıl çalıştığını falan. ve mantığını kendim çözdüm.

msn koxp kurmamızın nedenide değeri sürekli 1 olarak tutmaktır ki değişen değerlere ulaşalım. yani siz bastığınızda 1 olur ama ardından hemen yine 0 olur. msnde 1 sürekli takılı kalır ve değişene ulaşırız.

taha dedi ki...

Ya ben denedim :D z yi :D baya bi deger cıkıo ve cok az azalıo yani cok zaman alıyor msn koxp kurup tekrar bozması fln :D sen bi degeri versen biz +4 +4 gitsek? :D

Adsız dedi ki...

313 artı 4 olarak nasıl bulucaz onu tam anlamıs değilim . biraz acıklasan iyi olur. makale güzel bunu bastan söyleseydin keske :) ama soylemediğinde iyi olmus memory ve script kabiliyetimiz gelisti . Ben yaptıklarımı burda yayınlamayı düşünüorum ( keybuffer ile ilgilileri :p )

kolay gele herkeze

313 dedi ki...

-4 de olabilir, +2 de -2 de tam olark emin değilim. ama oncelikle 2 denemenizi tavsiye ederim.

mantığu şudur:
diyelimki adres 0x00B6500 bulduğumuz z tuşunun offsetide 4A0

biz burda 4A0 a 2 byte hex ekliycez böyle ilerliycez, hex olarak toplamayı unutmayn yeter.
windows un içinde bulunan hesap makinesi işimizi görecektir. görünümü bilimsel yapın hex i seçin dword kalsın 4A0 ı yapıştırın, +2 yapın hex olarak toplar. bu kadar :)

Ahmet, yaptıklarını burda yayınlamadan önce herkezin birşeyler öğrenmiş olduğundan emin olsan bence daha iyi olur, ne demişler bana balık verme balık tutmayı öğret :P

313 dedi ki...

@routeblazin

inan elimde olsa değer veririm ama şuan ko oynamadığım ve pc den kaldırdığım için malesef veremiycem :P ama en son kullandığım pointeri karakter ve keybptr pointerini verebilirim, sizde şuan kullandığınız karakter pointerinden benimkini çıkarır aradaki farkı bulursunuz (eğer büyük değişiklikler olmadıysa) ve çıkan değeri benim verdiğim keyptr ye eklersiniz şuanki keyptr yi bulursunuz. hatta veriyim onlarıda buyrun :)

Son kullandığım karakter pointeri: "0x00B6AECC"

Son kullandığım keyboard Buffer pointeri: "0x00B6C76C"

313 dedi ki...

aslında burada daha basit bir yöntemde var gördüğünüz gibi karakter pointeri ve keyboard buffer pointeri birbirine oldukça yakın, benim verdiğim 2si arasındaki farkı hex olarak bulup, şuan kullandığınız karakter pointerine ekleyerekde ulaşabilirsiniz.

Bir ipucu daha veriyim ben offset olarak değilde keyboard pointere +796 ekleyerek z tuşunu bulmuşum. bi deneyin bakalım belki sizede denk gelir.

taha dedi ki...

Yarım saatimi harcadım :D ve z, r, 1, 2, 3, 4, 5, 6, 7 ve 8 tuşlarının KeyboadBufferlerini buldum buyrun;

http://uploaded.to/?id=6qcuw2

Birde pointerlerini nasıl bulacagımızı söylersen cok muthiş olur 313 :P

Erol dedi ki...

Boşa uğraşmışın pointer olmadan adressler hiçbir işe yaramaz :D Aynı adresleri her oyun açıldığında bulman gerekecek :D Pointerlari bulmaya çalış.

313 dedi ki...

aynı şekilde :) bildiğin gibi bulucaksın route. benim en son kullandığım bot da adresler şu şekildeydi:

KeyboardPTR : 0x00B6C76C (bununla decimal olarak 796 yı toplayıp z tuşuna ulaşmışım)

KarakterPTR : 0x00B6AECC

burada keyboardptr görüldüğü gibi daha yüksek bi değer. keyboardptr den karakterptr yi çıkarırsak:

18A0 hex değeri kalıyor. şuanda kullandığınız karakterptr siyle bunu bi toplayın bakalım belki keyboard buffer a ulaşırsınız :)

denemek için üstüne birde +796 ekleyin z yi verirse tamamdır.

taha dedi ki...

Öyle bi anlatmşın :D Zyi verirse tmm dunyayı kurtarabilirsiniz der gibi :D

Bunun için bi örnek göstersen :D sadece 2 mem write ile yapılabilr die düşünmüştüm :D ama +700 ekle hex topla decimal cıkart fln :D karışıkmış biraz bi örnek yapıp *.au3 formatında uplarsan :D sevindirik oluruz 313. :D

Snowmann dedi ki...

Paket yollamayı bekliyorum 313, herşey için çok teşekkürler.

taha dedi ki...

O kadar zamandır bir arpa boyu yol gidemedik :( Directinput ile tuş gönderimi autoit de nasıl oluyo onu anlat da bari o şekilde deniyelim keyboardbuffer ile yapamyoruz :S

taha dedi ki...

dinput.dll ile tuş simulasyonu nasıl yapılıyor anlatırmısın 313?

Murat Uz dedi ki...

Keyboard'ı hiç denemedim ben paket yollamayı bekliyorum ama directinput ile de güzel oluyorsa ona da razıyız. Herşey için sağol 313 inş. bunları da anlatırsın.

Erol dedi ki...

Yeni patch ile gelen güvenlik sistemi pointerları bulmamızı engelliyor. Bu konuda ne yapmalıyız biri anlatabilirmi?

313 dedi ki...

yeni patchden birkaç patch oncede ben bulamamıştım. sanırım cheat engine ye karşı bir önlem aldılar, yada ko açıkken memory e erişen programlara. şuan bulanlar galiba ollydbg yardımıyla buluyor. suan bende bu konuda hiç bişey bilmiyorum, ama en basitinden önerim ko auto bot un ini dosyasından çalmanız :P

Murat Uz dedi ki...

Uzun zamandır yorum gelmemiş. Yorum atalımda unutma bizi :) yok mu bir gelişme?

Ahmet dedi ki...

Ben bıraktım bu işleri ya :) oyun cok dagılmıs ölümsüzlük cıkmıs biz daha keybuffer la ugrasıoz arkadslar :D

Murat Uz dedi ki...

Sanırım dersler falan işin var, bende koyu bıraktım sayılır artık yazın öğretirsen öğrenmeye çalışırız :D

taha dedi ki...

Ben visual basic ögrenmeye başladım send packet fln baya birşeyler biliyorum :) kendi koxpumu yazdım. Auto it dilinde de yapabilseydim güzel olurdu ama sanıyorum 313'ün işi var bu aralar..

313 dedi ki...

arkadaşlar mrb, şuan cidden işim var dediğiniz gibi final haftası sınavları boş vakit bulamıyorum. inş 2 haftaya kadar donucem buralara, blogdan ayrılmadığınız için tşkler maşallah bekçi gibisiniz :D

Yorum Gönder