- Katılım
- 23 Mar 2021
- Konular
- 88
- Mesajlar
- 1,843
- Çözümler
- 19
- Tepkime puanı
- 1,173
- Konum
- Istanbul
- Web sitesi
- github.com
Bölüm 2: Temel Kavramlar – Hile Mantığı ve Neden C++?
Tekrar selamlar, serinin bu bölümünde işin biraz daha teorik ama en önemli kısmına giriyoruz. Kod yazmaya başlamadan önce neyi, neden yaptığımızı anlamamız gerekiyor.(Not: Bu bölümdeki anlatım akışında, ifadeleri daha nizami bir hale getirmek için yine yapay zekadan destek aldım. Teknik bilgiyi en sade ve anlaşılır şekilde size sunmak istiyorum.)
1. En Temel Soru: Hile Nedir?
Teknik olarak baktığımızda hile; bir oyunun veya yazılımın, geliştiricisinin belirlediği sınırların dışına çıkarılması işlemidir. Oyunlar çalışırken bilgisayarınızın RAM (bellek) dediğimiz kısmında veriler tutar. Örneğin; can değeriniz "100" ise, bu "100" sayısı bellekte bir adreste (address) saklanır.Hile kodlamak, bu bellek adresini bulup oradaki "100" değerini "999" ile değiştirmekten ibarettir. Yani biz aslında bilgisayarın hafızasına müdahale eden küçük operasyonlar yapıyoruz.
2. Yazılım Dilleri Nedir?
Bilgisayarlar aslında sadece 0 ve 1'lerden anlar. Yazılım dilleri ise bizim bilgisayarla konuşmamızı sağlayan tercümanlardır.- Yüksek Seviyeli Diller (Python gibi): İnsan diline çok yakındır, yazması kolaydır ama bilgisayarın derinliklerine inmekte hantaldır.
- Düşük Seviyeli Diller (Assembly gibi): Bilgisayarın donanımına çok yakındır ama yazması ve öğrenmesi aşırı zordur.
3. Neden C++? (Hile Dünyasının Vazgeçilmezi)
Hile kodlamada neden Python veya C# değil de C++ kullanıyoruz?:- Hız ve Performans: C++, sistem kaynaklarını en verimli kullanan dillerden biridir. Saniyeler içinde binlerce bellek adresini taramanız gerekebilir; C++ bunu tereyağından kıl çeker gibi yapar.
- Bellek Yönetimi (Memory Management): C++, bellek üzerinde tam kontrol sağlar. Bellekteki bir adrese doğrudan erişebilir, orayı okuyabilir veya değiştirebilirsiniz. Diğer diller (C#, Java vb.) güvenlik gerekçesiyle sizi bellekten uzak tutmaya çalışırken, C++ size "anahtarlar sende" der.
- Windows API Uyumluluğu: Çoğu oyun Windows üzerinde çalışır. Windows'un kalbine (kernel, process işlemleri vb.) girmek için kullanılan fonksiyonların çoğu C++ ile en uyumlu şekilde çalışır.
- DirectX ve Grafik Desteği: Oyun içi menüler (ESP, Wallhack çizgileri) genellikle DirectX kullanır ve C++ bu kütüphanelerle doğrudan konuşabilir.
Bölüm 3: Değişkenler ve Bellek (Memory)
Değişken Nedir?
Bir değişken tanımladığınızda aslında işletim sistemine gidip şunu dersiniz: "Bana RAM'de şu kadar yer ayır, içine de şu etiketi yapıştır." Hile yaparken aradığımız "Can", "Mermi" gibi değerlerin her biri aslında RAM'de birer değişkendir...1. Tam Sayılar (int, short, long)
Hile aratırken (örneğin Cheat Engine kullanırken) "4 byte" veya "2 byte" seçeneklerini görmüşsünüzdür. İşte bunlar C++'taki veri tipleridir:- int: Genelde 4 byte yer kaplar. Standart tam sayılar için kullanılır.
- short: 2 byte yer kaplar. Küçük sayılar için hafıza tasarrufu sağlar.
- long long: 8 byte yer kaplar. Çok devasa sayılar (örneğin bir oyunun toplam tecrübe puanı) için kullanılır.
(Bunları ezberleminize gerek yok, zamanla burada yazacağım her şey sizin kas sisteminize girecek ve türkçe okur yazar gibi hissedeceksiniz...)
Örnek Kullanım:
C++:
#include <iostream>
int main() {
int yas = 25; // 4 byte yer kaplar
short kapiNo = 12; // 2 byte yer kaplar
long long dunyaNufusu = 8000000000LL; // 8 byte
std::cout << "Yas degiskeninin bellekteki boyutu: " << sizeof(yas) << " byte" << std::endl;
return 0;
}
2. Ondalıklı Sayılar (float, double)
Oyunlardaki koordinat sistemleri (X, Y, Z) genelde ondalıklıdır.- float: 4 byte yer kaplar. Yaklaşık 7 basamak hassasiyeti vardır.
- double: 8 byte yer kaplar. Çok daha hassastır (15-17 basamak). Modern sistemlerde güvenlik ve hassasiyet için genelde bu tercih edilir.
3. Karakterler ve Mantık (char, bool)
- char: Sadece tek bir karakter tutar (1 byte). Aslında bilgisayar bunu bir sayı olarak saklar (A=65 gibi).
- bool: Sadece true (1) veya false (0) değerini alır. "Ölü mü?", "Admin mi?" gibi kontrollerde kullanılır.
C++'ın Tehlikeli Detayı: Garbage Value (Çöp Veri)
C++'ta bir değişkeni tanımlayıp ona bir değer vermezseniz, içinde "çöp veri" kalır. Yani o bellek adresinde daha önce başka bir programdan ne kaldıysa onu okursunuz. Bu durum hile kodlarken beklenmedik hatalara (crash) yol açabilir.Kötü Kullanım:
int puan; -> İçinde -1928374 gibi saçma bir sayı olabilir.Iyi Kullanım:
[/SIZE][/B][SIZE=4]int puan = 0;[/SIZE][B][SIZE=4] -> içine hali hazırda bir veri ayırdığınızdan, windows garbage veri saklamaz hedef adreste.Çözemediğim veya yardım istediğim bir sorunum daha var. Ne yapmalıyım?
Hayatınızda ilk kez yazılımla uğraşıyorsanız elbette aklınızda bir sürü delice sorunuz olacaktır; size önerim hatalarınızı veya bilmediğiniz örneğin "Bir output nasıl oluşturum?" gibi sorularınızı birinden cevap beklemek yerine internette;veya yapay zeka gibi araçları kullanarak çözüme ulaşabilirsiniz, size burada elinizle kalemi nasıl tutacağınız öğretmeyeceğim.
Sıra Sizde: İlk Göreviniz!
Buraya kadar okuduysan şimdi kendi başına bir şeyler karalama vakti. Senden şunu istiyorum:- Bir kişinin adının baş harfini tutan bir char,
- Yaşını tutan bir int,
- Boyunu tutan bir double (örneğin 1.85) tanımla ve bunları ekrana yazdır.
Ipucu: C++'da input/output yapmak için Standard Library içinde yer alan "iostream" kütüphanesiyle yapılır. Monitöre metin yazdırma ve kullanıcıdan klavye girişi alma işlevlerinin gerçekleştiği kütüphanedir. Daha fazla bilgi için BKZ: 0.5 -- Introduction to the compiler, linker, and libraries
Çözüm:
C++:
#include <iostream>
int main() {
int yas;
char isim;
double boy;
std::cout << "Lütfen Adınızın ilk harfini giriniz: \n";
std::cin >> isim;
std::cout << "Lütfen yaşınızı giriniz: \n";
std::cin >> yas;
std::cout << "Lütfen boyunuzu '.' kullanarak giriniz (örn: 1.75): \n";
std::cin >> boy;
std::cout << "Adınızın ilk harfi: "<< isim << " Yaşınız: " << yas << "Boyunuz: \n"<< boy;
return 0;
}
Şimdilik bu kadar... Takipte kalın!