Translated ['src/reversing/reversing-tools-basic-methods/cheat-engine.md

This commit is contained in:
Translator 2025-08-04 20:14:41 +00:00
parent e3a42621a6
commit f90cfd4c8f

View File

@ -30,42 +30,42 @@ _**Düzenle --> Ayarlar --> Kısayollar**_ bölümünde, **oyunu durdurma** gibi
## Değeri değiştirme
Aradığınız **değeri** nerede **bulduysanız** (bununla ilgili daha fazla bilgi sonraki adımlarda) çift tıklayarak **değiştirebilirsiniz**, ardından değerine çift tıklayın:
Aradığınız **değerin** nerede olduğunu **bulduğunuzda** (bununla ilgili daha fazla bilgi sonraki adımlarda) değeri **değiştirmek için** üzerine çift tıklayarak, ardından değerine çift tıklayarak değiştirebilirsiniz:
![](<../../images/image (563).png>)
Ve son olarak, bellekteki değişikliği yapmak için **onay kutusunu işaretleyin**:
Ve son olarak, bellekteki değişikliği gerçekleştirmek için **onay kutusunu işaretleyerek**:
![](<../../images/image (385).png>)
Bellekteki **değişiklik** hemen **uygulanacaktır** (oyun bu değeri tekrar kullanmadığı sürece değer **oyunda güncellenmeyecektir**).
**Bellekteki değişiklik** hemen **uygulanacaktır** (oyun bu değeri tekrar kullanmadığı sürece değer **oyunda güncellenmeyecektir**).
## Değeri arama
Öyleyse, kullanıcı yaşamı gibi önemli bir değeri geliştirmek istediğinizi varsayalım ve bu değeri bellekte arıyorsunuz.
Öyleyse, geliştirmek istediğiniz önemli bir değer (kullanıcınızın hayatı gibi) olduğunu varsayıyoruz ve bu değeri bellekte arıyorsunuz.
### Bilinen değişim yoluyla
### Bilinen bir değişim aracılığıyla
100 değerini aradığınızı varsayalım, bu değeri aramak için bir **tarama** yapıyorsunuz ve birçok eşleşme buluyorsunuz:
100 değerini aradığınızı varsayalım, bu değeri aramak için bir **tarama** gerçekleştiriyorsunuz ve birçok eşleşme buluyorsunuz:
![](<../../images/image (108).png>)
Sonra, **değer değiştiğinde** bir şey yapıyorsunuz ve oyunu **durdurup** **bir sonraki taramayı** yapıyorsunuz:
Sonra, **değerin değişmesi için** bir şey yapıyorsunuz ve oyunu **durdurup** **bir sonraki taramayı** gerçekleştiriyorsunuz:
![](<../../images/image (684).png>)
Cheat Engine, **100'den yeni değere** geçen **değerleri** arayacaktır. Tebrikler, aradığınız değerin **adresini buldunuz**, şimdi bunu değiştirebilirsiniz.\
_Eğer hala birkaç değer varsa, o değeri tekrar değiştirmek için bir şey yapın ve adresleri filtrelemek için bir "sonraki tarama" yapın._
_Eğer hala birkaç değer varsa, o değeri tekrar değiştirmek için bir şey yapın ve adresleri filtrelemek için bir "sonraki tarama" gerçekleştirin._
### Bilinmeyen Değer, bilinen değişim
Eğer **değeri bilmiyorsanız** ama **değiştirmek için ne yapmanız gerektiğini** biliyorsanız (ve hatta değişim değerini de biliyorsanız) numaranızı arayabilirsiniz.
Değeri **bilmiyorsanız** ama **değişmesini nasıl sağlayacağınızı** biliyorsanız (ve hatta değişim değerini de biliyorsanız) numaranızı arayabilirsiniz.
Öyleyse, "**Bilinmeyen başlangıç değeri**" türünde bir tarama yaparak başlayın:
![](<../../images/image (890).png>)
Sonra, değeri değiştirin, **değerin** **nasıl değiştiğini** belirtin (benim durumumda 1 azaldı) ve bir **sonraki tarama** yapın:
Sonra, değerin değişmesini sağlayın, **değerin nasıl değiştiğini** belirtin (benim durumumda 1 azaldı) ve bir **sonraki tarama** gerçekleştirin:
![](<../../images/image (371).png>)
@ -81,37 +81,37 @@ Birçok **mümkün değişim** olduğunu ve sonuçları filtrelemek için bu **a
### Rastgele Bellek Adresi - Kodu Bulma
Şimdiye kadar bir değeri saklayan bir adres bulmayı öğrendik, ancak **oyunun farklı çalıştırmalarında bu adresin bellekte farklı yerlerde olma olasılığı yüksektir**. Bu nedenle, o adresi her zaman nasıl bulacağımızı öğrenelim.
Şimdiye kadar bir değeri saklayan bir adres bulmayı öğrendik, ancak **oyunun farklı çalıştırmalarında bu adresin bellekte farklı yerlerde olma olasılığı yüksektir**. Bu nedenle, bu adresi her zaman nasıl bulacağımızı öğrenelim.
Bahsedilen bazı ipuçlarını kullanarak, mevcut oyununuzun önemli değeri sakladığı adresi bulun. Sonra (isterseniz oyunu durdurarak) bulunan **adrese** sağ tıklayın ve "**Bu adrese neyin eriştiğini bul**" veya "**Bu adrese neyin yazdığını bul**" seçeneğini seçin:
Bahsedilen bazı ipuçlarını kullanarak, mevcut oyununuzun önemli değeri sakladığı adresi bulun. Sonra (isterseniz oyunu durdurarak) bulunan **adrese sağ tıklayın** ve "**Bu adrese erişenleri bul**" veya "**Bu adrese yazanları bul**" seçeneğini seçin:
![](<../../images/image (1067).png>)
**İlk seçenek**, bu **adresin** **kullanıldığı** **kodun** **hangi kısımlarını** bilmek için yararlıdır (bu, oyunun kodunu **nerede değiştirebileceğinizi** bilmek gibi daha fazla şey için yararlıdır).\
**İlk seçenek**, bu **adresin** hangi **kod parçaları** tarafından **kullanıldığını** bilmek için yararlıdır (bu, oyunun kodunu **nerede değiştirebileceğinizi** bilmek gibi daha fazla şey için yararlıdır).\
**İkinci seçenek** daha **özeldir** ve bu durumda **değerin nereden yazıldığını** bilmekle ilgilendiğimiz için daha faydalı olacaktır.
Bu seçeneklerden birini seçtikten sonra, **hata ayıklayıcı** programa **bağlanacak** ve yeni bir **boş pencere**ılacaktır. Şimdi, **oyunu oynayın** ve **değeri değiştirin** (oyunu yeniden başlatmadan). **Pencere**, **değeri değiştiren** **adreslerle** **doldurulmalıdır**:
Bu seçeneklerden birini seçtiğinizde, **hata ayıklayıcı** programa **bağlanacak** ve yeni bir **boş pencere**ılacaktır. Şimdi, **oyunu oynayın** ve **değeri değiştirin** (oyunu yeniden başlatmadan). **Pencere**, **değeri değiştiren** **adreslerle** **doldurulmalıdır**:
![](<../../images/image (91).png>)
Artık değeri değiştiren adresi bulduğunuza göre, kodu **istediğiniz gibi değiştirebilirsiniz** (Cheat Engine, bunu NOP'lar için hızlıca değiştirmenize izin verir):
Artık değeri değiştiren adresi bulduğunuza göre, kodu istediğiniz gibi **değiştirebilirsiniz** (Cheat Engine, bunu NOP'lar için hızlıca değiştirmenize izin verir):
![](<../../images/image (1057).png>)
Böylece, kodu değiştirerek sayınıza etki etmeyecek veya her zaman olumlu bir şekilde etki edecek şekilde değiştirebilirsiniz.
Artık kodu, sayınızı etkilemeyecek şekilde veya her zaman olumlu bir şekilde etkileyecek şekilde değiştirebilirsiniz.
### Rastgele Bellek Adresi - Göstergeleri Bulma
Önceki adımları takip ederek, ilgilendiğiniz değerin nerede olduğunu bulun. Sonra, "**Bu adrese neyin yazdığını bul**" seçeneğini kullanarak bu değeri yazan adresi bulun ve üzerine çift tıklayarak ayrıştırma görünümünü alın:
Önceki adımları takip ederek, ilgilendiğiniz değerin nerede olduğunu bulun. Sonra, "**Bu adrese yazanları bul**" seçeneğini kullanarak bu değeri yazan adresi bulun ve üzerine çift tıklayarak ayrıştırma görünümünü alın:
![](<../../images/image (1039).png>)
Sonra, **"\[]"** arasındaki hex değerini aramak için yeni bir tarama yapın (bu durumda $edx'in değeri):
Sonra, **"\[]"** arasındaki hex değerini aramak için yeni bir tarama gerçekleştirin (bu durumda $edx'in değeri):
![](<../../images/image (994).png>)
(_Birden fazla görünüyorsa genellikle en küçük adres olanı almanız gerekir_)\
Artık **ilgilendiğimiz değeri değiştirecek göstericiyi bulduk**.
Artık, **ilgilendiğimiz değeri değiştirecek göstericiyi bulduk**.
"**Adres Ekle**" seçeneğine tıklayın:
@ -127,22 +127,22 @@ Tamam'a tıklayın ve yeni bir gösterici oluşturulacaktır:
![](<../../images/image (308).png>)
Artık o değeri her değiştirdiğinizde, **değerin bulunduğu bellek adresi farklı olsa bile önemli değeri değiştiriyorsunuz.**
Artık, o değeri değiştirdiğinizde, değerin bulunduğu bellek adresi farklı olsa bile **önemli değeri değiştiriyorsunuz**.
### Kod Enjeksiyonu
Kod enjeksiyonu, hedef işleme bir kod parçası enjekte etme ve ardından kodun yürütülmesini kendi yazdığınız koddan geçirecek şekilde yönlendirme tekniğidir (örneğin, puan vermek yerine puan düşürmek).
Kod enjeksiyonu, hedef işleme bir kod parçası enjekte etme tekniğidir ve ardından kodun yürütülmesini kendi yazdığınız koddan geçirecek şekilde yönlendirme yapar (örneğin, puan vermek yerine puan düşürmek).
Öyleyse, oyuncunuzun yaşamından 1 çıkaran adresi bulduğunuzu hayal edin:
Öyleyse, oyuncunuzun hayatından 1 çıkaran adresi bulduğunuzu hayal edin:
![](<../../images/image (203).png>)
**Dizilimi göster** seçeneğine tıklayarak **dizilim kodunu** alın.\
Sonra, **CTRL+a** tuşlarına basarak Otomatik dizilim penceresini açın ve _**Şablon --> Kod Enjeksiyonu**_ seçeneğini seçin:
**Ayrıştırıcı kodu** almak için Ayrıştırıcıyı göster'e tıklayın.\
Sonra, **CTRL+a** tuşlarına basarak Otomatik derleme penceresini açın ve _**Şablon --> Kod Enjeksiyonu**_ seçeneğini seçin:
![](<../../images/image (902).png>)
**Değiştirmek istediğiniz talimatın adresini** doldurun (bu genellikle otomatik olarak doldurulur):
Değiştirmek istediğiniz **talimatın adresini** doldurun (bu genellikle otomatik olarak doldurulur):
![](<../../images/image (744).png>)
@ -150,14 +150,68 @@ Bir şablon oluşturulacaktır:
![](<../../images/image (944).png>)
Böylece, "**newmem**" bölümüne yeni assembly kodunuzu ekleyin ve "**originalcode**" bölümünden orijinal kodu kaldırın eğer çalıştırılmasını istemiyorsanız. Bu örnekte, enjekte edilen kod 1 çıkarmak yerine 2 puan ekleyecektir:
Bu nedenle, yeni assembly kodunuzu "**newmem**" bölümüne ekleyin ve orijinal kodu "**originalcode**" bölümünden kaldırın, eğer çalıştırılmasını istemiyorsanız. Bu örnekte, enjekte edilen kod 1 çıkarmak yerine 2 puan ekleyecektir:
![](<../../images/image (521).png>)
**Uygula'ya tıklayın ve kodunuz programda enjekte edilerek işlevselliğin davranışını değiştirmelidir!**
## Cheat Engine 7.x (2023-2025) Gelişmiş Özellikler
Cheat Engine, 7.0 sürümünden bu yana gelişmeye devam etti ve modern yazılımları (sadece oyunları değil!) analiz ederken son derece kullanışlı olan birçok yaşam kalitesi ve *saldırgan tersine mühendislik* özelliği eklendi. Aşağıda, kırmızı takım/CTF çalışmaları sırasında en muhtemel kullanacağınız eklemelere dair **çok yoğun bir saha kılavuzu** bulunmaktadır.
### Göstergeler Tarayıcı 2 iyileştirmeleri
* `Göstergeler belirli ofsetlerle bitmelidir` ve yeni **Sapma** kaydırıcı (≥7.4), bir güncellemeden sonra yeniden tarama yaptığınızda yanlış pozitifleri büyük ölçüde azaltır. Bunu çoklu harita karşılaştırmasıyla birlikte kullanarak (`.PTR`*Diğer kaydedilmiş gösterici haritasıyla sonuçları karşılaştır*) sadece birkaç dakikada **tek bir dayanıklı temel gösterici** elde edebilirsiniz.
* Toplu filtre kısayolu: ilk taramadan sonra `Ctrl+A → Boşluk` tuşlarına basarak her şeyi işaretleyin, ardından `Ctrl+I` (ters) tuşuna basarak yeniden taramayı geçemeyen adresleri seçimi kaldırın.
### Ultimap 3 Intel PT izleme
*7.5'ten itibaren eski Ultimap, **Intel İşlemci İzleme (IPT)** üzerine yeniden uygulanmıştır. Bu, artık hedefin aldığı **her** dalı **tek adım atma olmadan** kaydedebileceğiniz anlamına gelir (sadece kullanıcı modu, çoğu anti-hata ayıklama cihazını tetiklemez).
```
Memory View → Tools → Ultimap 3 → check «Intel PT»
Select number of buffers → Start
```
Birkaç saniye sonra yakalamayı durdurun ve **sağ tıklayın → Çalıştırma listesini dosyaya kaydet**. Yüksek frekanslı oyun mantığı sıcak noktalarını çok hızlı bir şekilde bulmak için dal adreslerini `Bu talimat hangi adreslere erişiyor bul` oturumu ile birleştirin.
### 1-byte `jmp` / otomatik yamanma şablonları
Versiyon 7.5, bir SEH işleyicisi kuran ve orijinal konumda bir INT3 yerleştiren *bir baytlık* JMP stub'ı (0xEB) tanıttı. 5 baytlık göreli atlama ile yamanamayan talimatlar üzerinde **Otomatik Montajcı → Şablon → Kod Enjeksiyonu** kullandığınızda otomatik olarak üretilir. Bu, paketlenmiş veya boyut kısıtlı rutinler içinde “sıkı” kancaların mümkün olmasını sağlar.
### Kernel düzeyinde gizlilik ile DBVM (AMD & Intel)
*DBVM*, CEnin yerleşik Tip-2 hipervizörüdür. Son sürümler nihayet **AMD-V/SVM desteği** ekledi, böylece Ryzen/EPYC ana bilgisayarlarda `Sürücü → DBVM Yükle` çalıştırabilirsiniz. DBVM ile:
1. Ring-3/anti-debug kontrollerine görünmez donanım kesme noktaları oluşturabilirsiniz.
2. Kullanıcı modu sürücüsü devre dışı olsa bile sayfalı veya korumalı çekirdek bellek bölgelerini okuyup yazabilirsiniz.
3. VM-EXIT'siz zamanlama saldırısı atlamaları gerçekleştirebilirsiniz (örneğin, hipervizörden `rdtsc` sorgulamak).
**İpucu:** DBVM, Windows 11'de HVCI/Bellek Bütünlüğü etkin olduğunda yüklemeyi reddedecektir → kapatın veya özel bir VM ana bilgisayarına önyükleme yapın.
### Uzaktan / çapraz platform hata ayıklama ile **ceserver**
CE artık *ceserver*'ın tam bir yeniden yazımını gönderiyor ve **Linux, Android, macOS & iOS** hedeflerine TCP üzerinden bağlanabiliyor. Popüler bir çatal, dinamik enstrümantasyonu CEnin GUI'si ile birleştirmek için *Frida*'yı entegre ediyor bir telefonda çalışan Unity veya Unreal oyunlarını yamanmanız gerektiğinde ideal:
```
# on the target (arm64)
./ceserver_arm64 &
# on the analyst workstation
adb forward tcp:52736 tcp:52736 # (or ssh tunnel)
Cheat Engine → "Network" icon → Host = localhost → Connect
```
Frida köprüsü için GitHub'da `bb33bb/frida-ceserver`'a bakın.
### Diğer dikkate değer araçlar
* **Patch Scanner** (MemView → Tools) yürütülebilir bölümlerde beklenmedik kod değişikliklerini tespit eder; kötü amaçlı yazılım analizi için kullanışlıdır.
* **Structure Dissector 2** bir adres sürükleyin → `Ctrl+D`, ardından *Guess fields* ile C-yapılarını otomatik olarak değerlendirin.
* **.NET & Mono Dissector** geliştirilmiş Unity oyun desteği; yöntemleri doğrudan CE Lua konsolundan çağırın.
* **Big-Endian özel türler** tersine çevrilmiş bayt sırası tarama/düzenleme (konsol emülatörleri ve ağ paket tamponları için yararlıdır).
* **Autosave & sekmeler** AutoAssembler/Lua pencereleri için, ayrıca çok satırlı talimat yeniden yazımı için `reassemble()`.
### Kurulum & OPSEC notları (2024-2025)
* Resmi yükleyici, InnoSetup **reklam teklifleri** (`RAV` vb.) ile sarılmıştır. **Her zaman *Reddet* butonuna tıklayın** *veya kaynak kodundan derleyin* PUP'lerden kaçınmak için. AV'ler hala `cheatengine.exe`'yi *HackTool* olarak işaretleyecektir, bu beklenmektedir.
* Modern anti-hile sürücüleri (EAC/Battleye, ACE-BASE.sys, mhyprot2.sys) CEnin pencere sınıfını yeniden adlandırılsa bile tespit eder. Tersine çevirme kopyanızı **tek kullanımlık bir VM içinde** veya ağ oyununu devre dışı bıraktıktan sonra çalıştırın.
* Sadece kullanıcı modu erişimine ihtiyacınız varsa **`Settings → Extra → Kernel mode debug = off`** seçeneğini seçin, bu CEnin imzasız sürücüsünü yüklemekten kaçınmak için, bu Windows 11 24H2 Secure-Boot'ta BSOD'ya neden olabilir.
---
## **Referanslar**
- **Cheat Engine eğitimi, Cheat Engine ile başlamayı öğrenmek için tamamlayın**
- [Cheat Engine 7.5 sürüm notları (GitHub)](https://github.com/cheat-engine/cheat-engine/releases/tag/7.5)
- [frida-ceserver çoklu platform köprüsü](https://github.com/bb33bb/frida-ceserver-Mac-and-IOS)
- **Cheat Engine eğitimi, Cheat Engine ile nasıl başlayacağınızı öğrenmek için tamamlayın**
{{#include ../../banners/hacktricks-training.md}}