mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/reversing/reversing-tools-basic-methods/cheat-engine.md
This commit is contained in:
parent
e3a42621a6
commit
f90cfd4c8f
@ -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:
|
||||
|
||||
.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**:
|
||||
|
||||
.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:
|
||||
|
||||
.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:
|
||||
|
||||
.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:
|
||||
|
||||
.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:
|
||||
|
||||
.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:
|
||||
|
||||
.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** açı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** açı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**:
|
||||
|
||||
.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):
|
||||
|
||||
.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:
|
||||
|
||||
.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):
|
||||
|
||||
.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:
|
||||
|
||||
.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:
|
||||
|
||||
.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:
|
||||
|
||||
.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):
|
||||
|
||||
.png>)
|
||||
|
||||
@ -150,14 +150,68 @@ Bir şablon oluşturulacaktır:
|
||||
|
||||
.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:
|
||||
|
||||
.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*, CE’nin 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 CE’nin 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) CE’nin 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 CE’nin 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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user