🌙 C++ | Oyun Hile Yazılımı Dersleri #2 (External)

Hichigo

Uzman üye
30 Ağu 2015
1,190
43
github.com/tarik0
Konu 1: Hangi Tür Verileri Değiştirebiliriz?



Veriler iki yerde saklanır:


1- Sunucu içinde
2- Client yani istemci içinde


Sunucu tarafında tutulan verileri değiştiremiyoruz ancak client yani istemci içinde tutulan (bu bizim bilgisayarımız oluyor) verileri değiştirebiliryoruz.


Sunucu tarafında tutulan verilere örnek verecek olursak;


Can, Mermi, Kişilerin Pozisyonları gibi veriler sunucu tarafında tutulur ve değiştirilemez.


Cheat Engine gibi programlarda veriyi değiştirsek de değiştirdiğimiz bu veri -örnek veriyorum can- verimiz sadece bizim bilgisayarımızdaki kopyası olacaktır yani veriyi değiştirseniz ve ekranda 100 yazısı yerine 9999 yazısını görseniz bile bu veri sadece sizde öyle görünecektir ve herhangi bir hasar alışınızda canınız tekrar eski hale dönecektir.


Öteki yandan bilgisayarımızda tutulan ve değiştirilebilir verilerimize örnek verecek olursam;


Bakış Açımız (Kafamızı çevirince değişen açı), Zıplama, Vurma gibi veriler.


Yani özet olarak sunucu tarafındaki verileri sadece okuyabiliriz, değiştiremeyiz.


MLBRH1.png





"Peki ya direk hafızadaki sv_cheats verisini "1" yapıp hileleri açsak sonra zaten gerisi kolay" gibi düşünmemek de lazım.


Çünkü VAC bunu çok kolay bir şekilde anlar ve oyundan atılırsınız.




Konu 2: Basitce Cheat Engine Kullanımı


Cheat Engine bir işlemin hafızadaki verilerini değiştirmemizi ve diğer çeşitli işlemlerimizi yapmamızı sağlayan bir araçtır.


Oyun hileleriyle az çok ilgilenmişseniz bu programla ilgilenmişsiniz demektir zaten.


Mantık basit önce bir işleme bağlanıyoruz (bu bizim için csgo.exe) ardından verinin hafızadaki yerini bulmak için arama bölümüne veriyi yazıyoruz, veriyi azaltıyoruz ve işlemi tekrar yapıyoruz. Ta ki seçenekler azalana kadar. Ardından verinin hafızadaki yerini buluyoruz.


Cheat Engine ile ilgili daha sonradan bir konu açacağım o yüzden Cheat Engine'ye çok değinmeyeceğim.


Konu 5: Offsetler


Offsetler bizim veri adresimizin, bir adresten kaç byte uzak olduğunu gösterir. Bu adres sizin bellekteki adresiniz (Local Player) veya başka bir oyuncunun bellekteki adresi olabilir.


fdh3vO.png



Örnek verirsem can değeri için
(Buradaki 0x7E değeri rastgele bir değerdir)



LocalPlayer + 0x7E = Kullanıcının Canının Bellekteki Adresi


Ve biz işlemlerimizi bu adresdeki veriyi okuyarak yapacağız.




Konu 6: Kodlamaya Giriş


Önceki derstekileri uyguladığınıza göre artık kodlamaya girebiliriz.


Öncekikle verileri değiştirmek için bir işleme yani csgo.exe'ye bağlanmamız gerek ardından Windows.h kütüphanesinde bulunan ReadProcessMemory ve WriteProcessMemory fonksiyonları ile işlemlerimizi gerçekleştireceğiz.




Konu 7: ReadProcessMemory


ReadProcessMemory veya kısaca RPM fonksiyonu bir işlemin bir adresindeki veriyi okumamızı sağlar.


Windows.h kütüphanesinde bulunur.


Şimdi gelin fonksiyonun MSDN sayfasına bakalım.


WBR1BD.png



Gördüğünüz gibi fonksiyonumuza 5 adet argüman girmemiz gerek;


hProcess: Fonksiyonu uygulayacağımız işlemin HANDLE'ı


lpBaseAddress: Okumak istediğimiz verinin adresi (LPC****)


lpBuffer: Veri okundukdan sonra yazılacak değişken (Mesela 100 değerini okudukdan sonra lpBuffer'ı 100 olarak ayarlıyor.)


nSize: Adresden kaç byte okunacağı


*lpNumberOfBytesRead: Kaç byte okunduğunu yazdıracağı veri (aynı lpBuffer gibi)


Eğer fonksiyon başarılı bir şekilde çalışırsa ReadProcessMemory 0 dışında bir veri döndürür.





Konu 8: WriteProcessMemory


WriteProcessMemory yani kısaca WPM belirli bir adresdeki veriyi değiştirir veya yazar.


Windows.h kütüphanesinde bulunur.




dkAWtK.png



hProcess: Veriyi yazacağımız işlemin HANDLE'si


lpBaseAddress: Veriyi yazacağımız adres


lpBuffer: Yazacağımız veri


nSize: Yazacağımız verinin boyutu


*lpNumberOfBytesWritten: İşlem boyunca yazılmış byte sayısı


Kullancağımız ana fonksiyonlar bu kadar kodlardaki diğer fonksiyonlara MSDN sayfasından bakabilirsiniz.


Konu 9: Hafıza Değiştirici Sınıfı


Hem programımızı düzenli tutmak için hemde işden tasaruf etmek için bir sınıf oluşturuyoruz.


Buradaki kodları anlamıyorsanız lütfen önce C++ öğrenin!

aLTSsL.png



Kodun tamamını https://github.com/tarik0/tht-oyun-hilesi/tree/master adresinden görebilirsiniz.


Artık oyuna da bağlandığımıza göre sonraki ders daha eğlenceli şeylere geçebiliriz.


Her zamanki gibi sonraki dersi görmek isterseniz
post_thanks.gif
düğmesine basmayı unutmayın. İyi Forumlar!


 

Th3S0y3R

Üye
17 Mar 2018
53
1
Hocam ALLAH Razı Olsun Ne zamandır öğrenmek istediğim araştırdığım fakat adamakıllı şekilde anlatım bulamadığım birşeydi Çok Teşekkürler Devamını bekliyoruz :)
 

EnTeReSSaN

Üye
14 Mar 2017
73
0
Türkçe olarak böyle güzel bir kaynak görmek gerçekten çok sevindirici. Elinize emeğinize sağlık.
 

Lawliet123

Kıdemli Üye
31 Tem 2016
2,558
6
Bir konuya açıklık getirmek istiyorum ;


Serverde saklanan değeri de değiştirmek mümkün. Nasıl mı?

Gönderilen isteği manipüle ederek.


Şöyle anlatayım ;


CAN = 100
Düşman mermisi gücü = 2


Eğer düşman size bir mermi isabet ettirecek olursa, canınızdan 2 eksilecektir.
Peki bu eksilme sırasında ne olur?


Değer bizim PC de tutulmadığı için (Öyle olsa çoktan içinden geçmiştik) sunucuya bir istek(request) gönderir. Bu istek, canımızın azalması işleminin yapılması için gereken bütün bilgiyi içerir.


Örnek istek ; csgo.com/caneksilt.php?oyuncu_id=12&değer=2&vuran_id=11&server=csserver.com


Evet isteğimiz yollandı, e haliyle bir geri dönüş(response) alacağız.
NORMALDE
Bu geri dönüş canımızın gönderilen değer kadar azalmasını sağlayacak.


Yani ; CAN=100 (Vurulma işlemi & istek gitti & yanıt alındı) CAN=98


Şimdi gelelim anormale ; Yapmak istediğimiz şey isteği(request) manipüle etmek.


Eğer bir şekilde gönderilen isteği MITM saldırılarında olduğu gibi packed olarak yakalarsak, değiştirdikten sonra göndeririz.


Az önceki isteğimizde değer=2'idi. Bu da geri dönüşün canımızı 2 eksiltmesine yol açtı.


Eğer isteği düzenleyip değeri 0'a eşitlersek, canımızdan eksilen değer de 0 olacaktır. Bu durumda canımız hiç gitmemiş olacak.


Buradaki tek sorunum, Oyun esnasında istekleri bulup editlemek, bulmak için bir debugger'den yardım alınabilir, lakin çok pratik olmanız gerekecektır.


Daha önce bir denemesini yapmıştım ve başarılı olmuştum, izin verin açıkayayım.


1 - ) Online bir savaş oyununda, medkit canımızı (eğer 100 değilse) 10 arttırıyordu.
Oyun chrome üzerinden Web tabanlı bir oyundu, bu yüzden istekleri elime koymuş gibi buldum.
Ve bir tane kendim gönderdim, sonuç ; BAŞARILI. Normalde 10 artması gerekirken, canım sanki 10 medkit almışım gibi 100 oldu. Bununla övünmüyorum, çok eski bir oyundu, büyük ihtimal tozu kalmamıştır.


2 - ) İşte bu en sevdiğim :)
Oyunda(ismini hatırlıyorum bu sefer, ama vermeyeceğim.), oyunun parası ile, elmas alınabiliyordu.Oyunun anasayfasından elmas alma yerine girip Satın alınacak değeri ayarladım.
Bu miktar karşısında normalde 20 altın falan vermesi gerekiyordu, ama bir planım vardı.
BurpSuite arkada Intercepter özelliği ile bekliyordu :)


Gönderilen istek, BurpSuite tarafından yakalandı, (Acele etmem lazımdı, eğer timeout verirse işlem gerçekleşmezdi), size ilk verdiğim örnekteki gibi bir istek, çok basit olarak 20 değerini 200 ile değiştirdim, biraz daha zamanım olsaydı benden gidecek parayı da 0'a eşitleyebilirdim.
Ama zamandan korktuğum için sadece elmas sayısını değiştirmekle kaldım.
Veee evet, oyuna gideiğimde 200 elmasım gelmişti. tabii benden gitmesi gereken kadarı da gitmişti. Ama sonuçta bunun yapıabileceğini kendime ve size kanıtlamış oldum.


Hack içerisinde bununla çokça karşılabilirsiniz. MITM, Cookie Inj, yaparken de bu durumu kullanıyoruz.


Konu güzelmiş, Ellerine sağlık :)



EDİT ; Söyle de bir örnek kanıt ekleyeyim :)


y6Nvon.jpg
 
Son düzenleme:

Hichigo

Uzman üye
30 Ağu 2015
1,190
43
github.com/tarik0
Bir konuya açıklık getirmek istiyorum ;


Serverde saklanan değeri de değiştirmek mümkün. Nasıl mı?

Gönderilen isteği manipüle ederek.


Şöyle anlatayım ;


CAN = 100
Düşman mermisi gücü = 2


Eğer düşman size bir mermi isabet ettirecek olursa, canınızdan 2 eksilecektir.
Peki bu eksilme sırasında ne olur?


Değer bizim PC de tutulmadığı için (Öyle olsa çoktan içinden geçmiştik) sunucuya bir istek(request) gönderir. Bu istek, canımızın azalması işleminin yapılması için gereken bütün bilgiyi içerir.


Örnek istek ; csgo.com/caneksilt.php?oyuncu_id=12&değer=2&vuran_id=11&server=csserver.com


Evet isteğimiz yollandı, e haliyle bir geri dönüş(response) alacağız.
NORMALDE
Bu geri dönüş canımızın gönderilen değer kadar azalmasını sağlayacak.


Yani ; CAN=100 (Vurulma işlemi & istek gitti & yanıt alındı) CAN=98


Şimdi gelelim anormale ; Yapmak istediğimiz şey isteği(request) manipüle etmek.


Eğer bir şekilde gönderilen isteği MITM saldırılarında olduğu gibi packed olarak yakalarsak, değiştirdikten sonra göndeririz.


Az önceki isteğimizde değer=2'idi. Bu da geri dönüşün canımızı 2 eksiltmesine yol açtı.


Eğer isteği düzenleyip değeri 0'a eşitlersek, canımızdan eksilen değer de 0 olacaktır. Bu durumda canımız hiç gitmemiş olacak.


Buradaki tek sorunum, Oyun esnasında istekleri bulup editlemek, bulmak için bir debugger'den yardım alınabilir, lakin çok pratik olmanız gerekecektır.


Daha önce bir denemesini yapmıştım ve başarılı olmuştum, izin verin açıkayayım.


1 - ) Online bir savaş oyununda, medkit canımızı (eğer 100 değilse) 10 arttırıyordu.
Oyun chrome üzerinden Web tabanlı bir oyundu, bu yüzden istekleri elime koymuş gibi buldum.
Ve bir tane kendim gönderdim, sonuç ; BAŞARILI. Normalde 10 artması gerekirken, canım sanki 10 medkit almışım gibi 100 oldu. Bununla övünmüyorum, çok eski bir oyundu, büyük ihtimal tozu kalmamıştır.


2 - ) İşte bu en sevdiğim :)
Oyunda(ismini hatırlıyorum bu sefer, ama vermeyeceğim.), oyunun parası ile, elmas alınabiliyordu.Oyunun anasayfasından elmas alma yerine girip Satın alınacak değeri ayarladım.
Bu miktar karşısında normalde 20 altın falan vermesi gerekiyordu, ama bir planım vardı.
BurpSuite arkada Intercepter özelliği ile bekliyordu :)


Gönderilen istek, BurpSuite tarafından yakalandı, (Acele etmem lazımdı, eğer timeout verirse işlem gerçekleşmezdi), size ilk verdiğim örnekteki gibi bir istek, çok basit olarak 20 değerini 200 ile değiştirdim, biraz daha zamanım olsaydı benden gidecek parayı da 0'a eşitleyebilirdim.
Ama zamandan korktuğum için sadece elmas sayısını değiştirmekle kaldım.
Veee evet, oyuna gideiğimde 200 elmasım gelmişti. tabii benden gitmesi gereken kadarı da gitmişti. Ama sonuçta bunun yapıabileceğini kendime ve size kanıtlamış oldum.




Hack içerisinde bununla çokça karşılabilirsiniz. MITM, Cookie Inj, yaparken de bu durumu kullanıyoruz.


Konu güzelmiş, Ellerine sağlık :)


Evet yazdığın hakkında haklısın ancak bu oyun bir HTML veya Flash oyunu değil :D CSGO Requestleri değil kendine has protokolleri kullanır ayrıca gönderilen paketler kontrol edilir (tabiki exploit yoksa). O yüzden bu yönetim işe yarayacağını sanmıyorum.
 

Lawliet123

Kıdemli Üye
31 Tem 2016
2,558
6
Evet yazdığın hakkında haklısın ancak bu oyun bir HTML veya Flash oyunu değil :D CSGO Requestleri değil kendine has protokolleri kullanır ayrıca gönderilen paketler kontrol edilir (tabiki exploit yoksa). O yüzden bu yönetim işe yarayacağını sanmıyorum.


Benim bir steam hesabım, ve içinde de bir CS:GO'm var lakin bu güne kadar hiç dokunmadım ona, eğer üşenmezsem, onu indirir (Alışılmışın dışında bir protokol yapacaklarını zannetmiyorum, anca şifrelerler) İstekleri nasıl gönderdiğini tespit etmeye çalışayım.
Bulursak exploit yazmayalım, bildirelim

Sonumuz Zula gibi olmasın :D


Ellerine sağlık HİÇİGOOOOOO :)
 

Hichigo

Uzman üye
30 Ağu 2015
1,190
43
github.com/tarik0
Benim bir steam hesabım, ve içinde de bir CS:GO'm var lakin bu güne kadar hiç dokunmadım ona, eğer üşenmezsem, onu indirir (Alışılmışın dışında bir protokol yapacaklarını zannetmiyorum, anca şifrelerler) İstekleri nasıl gönderdiğini tespit etmeye çalışayım.
Bulursak exploit yazmayalım, bildirelim

Sonumuz Zula gibi olmasın :D


Ellerine sağlık HİÇİGOOOOOO :)


:D Kolay gelsin o zaman. https://github.com/ValveSoftware/source-sdk-2013.git belki yardımcı olur.


Edit: Ayrıca buna da bakabilirsin
https://github.com/ValveSoftware/csgo-demoinfo/tree/master/demoinfogo
 
Son düzenleme:

Hichigo

Uzman üye
30 Ağu 2015
1,190
43
github.com/tarik0
İnanmıyorum, zırh takviyesi cihazının ne değeri göndereceğini buraya yazmışlar :D


Ellerine tekrar tekrar sağlık hiçigo :D, uğraşmayacağım tabii ki ama :D :trl


Bav1PQ.jpg


Döndüreceği değeri geç adamlar bütün SDK'yı yazdılar. Ama 2013 de yayınlandığı için arada 6 sene var çok şey değişti.


Edit: Şimdi araştırdım bunlar CVar değerleri yani konsoldaki değerler sv_cheats 0 gibi. Sadece default değerleri yazmışlar.
 
Son düzenleme:

cumbullop

Uzman üye
9 Ağu 2015
1,163
0
KOCAELİ
hocam bu sunucuya bağlı kodları assembly ile yapmak mümkün mü kalıcılamak yani databasesindeki şeyi değiştirme gibi birşey diyorum
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.