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.