Rehber CheatEngine nedir, nasıl kullanılır?

CheatEngine'i buradan baştan sona öğretemem fakat genel olarak RAM manipülasyonu yapmanıza ve "offline/savunmasız" oyunlarda oyun akışını değiştirmenize yarar. Evet, sadece RAM değil başka manipülasyonlar hatta farklı teknikler de var ama bugün sadece basit, en temel ve etkili RAM manipülasyonlarını göstereceğim.

Bunun etik çerçevelere uyması için açık kaynaklı "Assault Cube" oyununu indirip denemenizi ve kendinizi test etmenizi öneririm. Şimdi de CheatEngine'i yükleyelim.

NOT: CheatEngine'nin doğrulanmış bir dijital imzası zaten var ama orjinal siteden yüklemenize rağmen antivirüsünüz engelliyorsa korkacak bir şey yok.

ÇOK ÖNEMLİ NOT: Sakın! bu işlemleri yaparken online oyun/anticheat açıkken yapmayın. Aksi takdirde oyundan uzaklaştırma alabilirsiniz. Valorant'ı bilmiyorum ama kendi oyuncularının yalancısı olarak sanırım bilgisayarınıza da bakıyor. Zaten en kötü anticheat bile bu tür execleri kullanmanıza izin vermez. Ayrıca online oyunlarda server-side çalıştığı için oyunlar (genelde) RAM manipülasyonu sadece sizde geçerli olur ve görüntü olur. Son olarak da, RAM'de tutulan veriler şu anki deneyeceğimiz açık kaynaklı savunmasız oyundaki gibi salt-text olmaz. Sadece dipnot olsun diye söyleyeyim, gelen giden paketleri yakalayıp manipüle etmek gerekir ama o bile yeterli bir işlem değil.

CheatEngine'i yönetici olarak çalıştıralım. (yönetici izni gerektiren uygulamalar için şart fakat bizim senaryomuz için şart değil.) Sonra Assault Cube'u çalıştırıp CheatEngine'den sol yukarıda bulunan task seçme aracıyla Assault Cube'u seçelim:
1769336321220.png


Şimdi en temel mantık şöyle işliyor:
İlgili RAM'i bulmak için mantıklı aramalar yap ve RAM'i bulunca değerini değiştir. Basit gibi görünüyor, çünkü öyle.
1769336592852.png

Görselde belirttiğim nuramalar yeni başlayanların ilk başta bilmesi gereken en temel konulardır:
  1. Girdiğiniz değerin "ilk" aramasını yapar. Yâni seçtiğiniz exe'nin tam o anda RAM'de tuttuğuyla eşleşen değerler.
  2. İlk taramadan sonra ilkiyle eşleşip, sıradakiyle eşleşen değerler.
  3. Taramayı geri alır.
  4. Value yâni arayacağınız değer.
  5. Arayacağınız değerin HEX karşılığı.
  6. Arama tipi:
    1769337010467.png

    Sırasıyla: Eşleşen, büyük olan, küçük olan, değer arasında, başlangıcı bilinmeyen değerler.
  7. Değer tipi:
    1769337113647.png

    Sırasıyla: Binary, Bytelar, Float, Double, String, Byte dizini, Hepsi, Grup
  8. Lua formatında
  9. Değil yâni tam zıttı. Örn: Exact value == 1 araması yaptınız ama 1 olmayanlar sonuçlanır. Yâni şartın tam zıttı, şart sağlanmayanlar.
  10. Listede seçmiş olduğunuz değerleri items listesine atar.
Mesela şu aşamadaki bilgilerle, hadi canımızı yükseltelim:

Mesela canım şu anda full ve ilk tarama olarak 100 yapalım:
1769337610383.png
1769337508966.png

Ama gördüğünüz gibi RAM'de 100 değeri onlarca kez tutulmuş. Bundan dolayı, canımın değişmesi için bir şey yapmalıyım ve next scan ile değiştiğini söylemeliyim:
Şimdi canım 43'e düştü ve 43'ü next scan ile (ilk değerden sonra oluşan değer) arıyorum:
1769337712854.png

1769337839676.png

Gördüğünüz gibi basit bir oyun ve RAM'de tutulan şeyler de az olduğundan direkt sonuçlar karşımızda.
Görseldeki 11. buton, items listesindeki addressleri siler.
Şimdi bunlar ne anlama geliyor?
Özetle: RAM'de bir veri tutulur ve bu veriyi daha sonra bulabilmek için bir isim verilir. Görseldeki "00761CC4" gibi. Daha sonra her değişiklik yapılacağı zaman o RAM ismiyle bulunup, içerdeki veri çekilir/değiştirilir.
Adreslerin bir tanesi görsel (TEXT için) diğeri de "GERÇEK" tutulan can. Her oyunda böyle olmayabilir.

Şimdi onları isterseniz direkt çift tıklayıp değiştirebilirsiniz ya da listeye ekleyip listenizde isim vererek kullanabilirsiniz. Ben önce listeye ekleyeceğim ve sonra da isim vereceğim:
1769338230198.png

Gördüğünüz gibi alttaki listeye 2 tane eklendi ve hangisinin sadece görüntü ve hangisinin gerçek olup olmadığını anlamak için, önce üsttekini deneyeceğim. Bu arada isimler aynı olmaz ve üstteki de her zaman sizinkinde de aynı sonuç vermez.
1769338316326.png

1769338362812.png

Gördüğünüz gibi yazı değişti. Ama alttaki gerçek can. Yâni şu an alttaki olan gerçek can ve onu değiştirmediğimiz için canımız "999" gözükse bile bir bombada öleceğiz.

Her neyse şimdi sol tarafında Description "Açıklama" kısmından birinin health_text diğerinin de health olduğunu belirtelim:
1769338469446.png


Evet şimdi kendimize bomba atıp test edelim:
1769338513054.png

1769338529391.png

Gördüğünüz gibi bu kadar basit.

Diğer bütün değerleri de benzer şekilde alabilirsiniz. Listeyi temizlemek için de 11. butona basabilirsiniz.

Şimdi gelelim biraz teorik kısıma: Bu yaptığımız sadece anlık ve tek seferlik oluşuyor. Bunu kalıcı olarak değiştirmek için farklı yöntemler var, list olarak kaydetme vb. Ayrıca mesela direkt methodları da değiştirebiliyoruz. Örneğin: bomba'nın bizim canımızı düşürmeye yarayan methodu bulup aksine canımızı da yükselttirebiliriz. Kolay şeyler.

Örnek olarak reClass, dnSpy, ILspy ve JetBrains'in RE tool'larıyla yapabilirsiniz. İnternetten basic örnekler bulabilirsiniz.

Neyse, şimdilik bu kadar. Meraklıların, diğer bütün değiştirebildiği değerlerin de değiştirip bir görsel paylaşmasını isterim. Bakalım güzel anlatabilmiş miyim? :)

Herkese iyi günler ve iyi çalışmalar dilerim.
 
Ellerine sağlık reis.
 
@Bayram Reis evet sanırım anladım. (şüpheli)
Ama bana dediğiniz list lazım sanırım. Örneğin oyun her açıldığında ama menüde bir metin görünür. "start" bu metinin değeri her döndüğüne benim özel olarak hazırladığım List'den "başla" yazısını göstermesi lazım.
Ayrıca bunu nasıl Cheat Engine'siz oyuna tanıtabiliriz?
Örneğin:
JSON:
{
  "726D726":"Başla",
  "KHJ7218":"Seçenekler",
  "71382OW":"Yapımda Emeği Geçenler"
}
 
@Bayram Reis evet sanırım anladım. (şüpheli)
Ama bana dediğiniz list lazım sanırım. Örneğin oyun her açıldığında ama menüde bir metin görünür. "start" bu metinin değeri her döndüğüne benim özel olarak hazırladığım List'den "başla" yazısını göstermesi lazım.
Ayrıca bunu nasıl Cheat Engine'siz oyuna tanıtabiliriz?
Örneğin:
JSON:
{
  "726D726":"Başla",
  "KHJ7218":"Seçenekler",
  "71382OW":"Yapımda Emeği Geçenler"
}
Python veya C# en hızlı yöntem. Yâni RAM'den değiştirebilecek bir dilin olması şart.

Bir de eğer gerçekten düşünüyorsan 1-4 hafta boyunca çok güzel çalışırsan dediğin şeyi yapabilirsin:
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

Bu üstteki video temeli iyi anlatıyor.

Ondan sonra senin asıl öğrenmen gereken şey "Pointer Scan" ve bunu bir yardımcı dil ile dinamikleştirmek. Yâni oyuna girişte otomatik olarak o method çalışacak ve o RAM'deki bilgilerin hepsi çevrilecek.

Hatta her şeyi tam anlamıyla anlamak ve sadece çeviri dışında eğlenceli şeyler yapmak istiyorsan C++ ve Assembly temeli atabilirsin :) Hemen hemen her oyuna çeviri yapabilirsin mesela.
 
Ellerine sağlık hocam geçen aylarda bende yüklemiştim sonra yapamamıştım şimdi becerdim :D
 

Bu konuyu görüntüleyen kullanıcılar

Technopat Haberler

Yeni konular

Geri
Yukarı