exoproc
Simülasyon

Bellek tarayıcı

Cheat Engine mantığıyla değer arama: process spawn et, debugger'a bağlan, değeri tara, daralt, düzenle ve dondur

Bu sayfa laboratuvarın uçtan uca kullanımını anlatır: simüle işletim sisteminde bir process başlatmak, ona debugger bağlamak, bellekte bir değer aramak, sonuçları daraltmak, değeri değiştirmek ve dondurmak.

Mantık Cheat Engine ile aynıdır. Kapsam ise kasıtlı olarak dardır — pointer tarama, kod enjeksiyonu, disassembler eklentileri gibi şeyler yoktur. Amaç, "bir değeri bellekte nasıl bulur ve nasıl sabitlersin" döngüsünün gerçek bir CPU ve gerçek bir adres alanı üzerinde çalıştığını göstermektir.

1. Process başlat

Debugger'ı /tr/ide/debugger adresinden açtığınızda process seçici karşılar:

  • Demo process başlat düğmesi rastgele profilli bir process açar; ana thread entry point'te durur, tek bir instruction bile çalışmamıştır.
  • Kenar çubuğundaki process listesinden daha önce açılmış bir process/thread'e geçebilirsiniz.

Açılan her process aynı global makinede yaşamaya devam eder: kendi PID'i, kendi adres alanı, kendi handle tablosu ve thread context'leri vardır. Yeni bir process açmak öncekini silmez.

2. Debugger'a bağlan

Process satırındaki Bağlan düğmesi (veya thread listesinden bir thread'in Bağlan'ı) debugger'ı o process ve thread'e iliştirir. URL ?pid=…&tid=… haline gelir — bu bağlantıyı paylaşabilir ya da yer imine ekleyebilirsiniz.

Debugger'dayken üst çubuktaki Process değiştir seçiciye geri döner.

3. İlk taramayı yap

Alt panelde TARAYICI sekmesine geçin.

  • Tip: aradığınız değerin genişliği. Sayaç, puan, can gibi şeyler için genelde 32-bit tam sayı doğru başlangıçtır.
  • Karşılaştırma:
    • Tam değer — değeri biliyorsanız (örneğin ekranda 1000 yazıyor).
    • Bilinmeyen değer — değeri bilmiyorsanız. Bu, adres alanındaki her hizalanmış adayı işaretler; sonraki taramalarda daraltırsınız. Yalnız sabit genişlikli sayısal tiplerde kullanılabilir, çünkü aranacak bir örüntü yoktur.
  • Bölge: taramayı tek bir mapping ile sınırlar. Aradığınız şey heap'teyse process-heap seçmek taramayı ciddi biçimde hızlandırır.
  • İlk tarama'ya basın.

Sonuç sayısı sekmenin üstünde görünür. Çok sayıda aday varsa tablo yalnız ilk sayfayı listeler ve bunu açıkça yazar (… ilk 256 tanesi listeleniyor); daraltma her zaman adayların tamamı üzerinde çalışır, listelenen sayfa üzerinde değil.

4. Daralt

Cheat Engine'in asıl gücü buradadır: değeri değiştirin, sonra ne olduğunu tarayıcıya söyleyin.

KarşılaştırmaNe zaman
Tam değerYeni değeri tam olarak biliyorsunuz
Değişti / DeğişmediDeğer değişti mi, bilmiyorsunuz ama yönü önemsiz
Arttı / AzaldıSayaç yukarı ya da aşağı gitti
Şundan büyük / Şundan küçükBir eşiğe göre eliyorsunuz

Programı biraz ilerletin (F5 devam, F10 üzerinden atla), sonra Sonraki tarama'ya basın. Birkaç turda aday sayısı tipik olarak tek haneye düşer.

Önceki kolonu, adayın bir önceki taramadaki değerini gösterir — Değer kolonu her render'da canlı bellekten yeniden okunurken bu sabit kalır, böylece ikisini karşılaştırabilirsiniz.

Baştan başlamak için Yeni tarama. Tip veya kodlama değiştirmek de aday kümesini sıfırlar, çünkü farklı genişlikteki bir değer için eski adaylar anlamsızdır.

5. Değiştir ve dondur

Sonuç satırındaki düğmeler:

  • Git — bellek panelini o adrese götürür, byte'ları hex+ASCII görürsünüz.
  • Düzenle — değeri yerinde değiştirir; yazma gerçek adres alanına gider.
  • Ekle — adresi sağdaki adres listesine sabitler.

Adres listesindeki her satırın bir Dondur kutusu vardır. İşaretlendiğinde adres Win64Machine'in freeze kaydına girer ve her thread durağında aynı byte'lar geri yazılır. Yani process değeri değiştirmeye çalışsa bile değer sabit kalır — Cheat Engine'in freeze kutusunun yaptığı şeyin aynısı.

Dondurulmuş bir satırın değerini düzenlerseniz freeze yeni değere geçer; eski değere geri sıçramaz.

Neler sahte değil

Panelde gördüğünüz hiçbir sayı önceden yazılmış bir senaryodan gelmez:

  • Her aday değeri gerçek Win64AddressSpace.read çağrısıyla okunur.
  • Sonuç sayfası her render'da canlı bellekten yeniden okunur; debugger'da bir adım attığınızda değerler anında değişir.
  • Düzenleme ve dondurma gerçek belleğe yazar; bir sonraki instruction o byte'ları okur.

Tarayıcının kendisi packages/simulate içindeki Win64MemoryScanner sınıfıdır ve UI'dan bağımsız olarak test edilir.

Sonraki adımlar