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
ce6694c8c2
commit
cafc5ef2ee
@ -3,14 +3,14 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
[**Cheat Engine**](https://www.cheatengine.org/downloads.php) ni programu muhimu ya kutafuta mahali ambapo thamani muhimu zimehifadhiwa ndani ya kumbukumbu ya mchezo unaoendelea na kuzibadilisha.\
|
||||
Unaposhusha na kuendesha, unapata **mafunzo** ya jinsi ya kutumia chombo hicho. Ikiwa unataka kujifunza jinsi ya kutumia chombo hicho, inashauriwa kukamilisha.
|
||||
Unaposhusha na kuendesha, unapata **mafunzo** ya jinsi ya kutumia chombo hiki. Ikiwa unataka kujifunza jinsi ya kutumia chombo hiki, inashauriwa kukamilisha mafunzo hayo.
|
||||
|
||||
## Unatafuta nini?
|
||||
|
||||
.png>)
|
||||
|
||||
Chombo hiki ni muhimu sana kutafuta **mahali ambapo thamani fulani** (kawaida ni nambari) **imehifadhiwa katika kumbukumbu** ya programu.\
|
||||
**Kawaida nambari** huhifadhiwa katika **4bytes**, lakini unaweza pia kuziona katika **double** au **float** formats, au unaweza kutaka kutafuta kitu **tofauti na nambari**. Kwa hiyo unahitaji kuwa na uhakika unachagua kile unachotaka **kutafuta**:
|
||||
**Kawaida nambari** huhifadhiwa katika **4bytes** lakini unaweza pia kuzikuta katika **double** au **float** formats, au unaweza kutaka kutafuta kitu **tofauti na nambari**. Kwa sababu hiyo, unahitaji kuwa na uhakika kuwa **unachagua** unachotaka **kutafuta**:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -30,7 +30,7 @@ Katika _**Edit --> Settings --> Hotkeys**_ unaweza kuweka **hotkeys** tofauti kw
|
||||
|
||||
## Kubadilisha thamani
|
||||
|
||||
Mara tu unapokuwa **umeipata** ambapo **thamani** unayo **tafuta** (zaidi kuhusu hii katika hatua zinazofuata) unaweza **kuibadilisha** kwa kubofya mara mbili, kisha kubofya mara mbili kwenye thamani yake:
|
||||
Mara tu unapokuwa **umeipata** wapi **thamani** unayo **tafuta** (zaidi kuhusu hii katika hatua zinazofuata) unaweza **kuibadilisha** kwa kubofya mara mbili, kisha kubofya mara mbili kwenye thamani yake:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -38,11 +38,11 @@ Na hatimaye **kuweka alama** ili kupata mabadiliko yafanyike katika kumbukumbu:
|
||||
|
||||
.png>)
|
||||
|
||||
**Mabadiliko** kwa **kumbukumbu** yatatumika mara moja **(kumbuka kwamba hadi mchezo usitumie thamani hii tena thamani **haitawekwa upya katika mchezo**).**
|
||||
**Mabadiliko** kwa **kumbukumbu** yatakuwa **yamewekwa** mara moja (kumbuka kuwa hadi mchezo usitumie thamani hii tena, thamani **haitawekwa upya katika mchezo**).
|
||||
|
||||
## Kutafuta thamani
|
||||
|
||||
Hivyo, tunaweza kudhani kwamba kuna thamani muhimu (kama maisha ya mtumiaji wako) ambayo unataka kuboresha, na unatafuta thamani hii katika kumbukumbu)
|
||||
Hivyo, tunaenda kudhani kuwa kuna thamani muhimu (kama maisha ya mtumiaji wako) unayotaka kuboresha, na unatafuta thamani hii katika kumbukumbu)
|
||||
|
||||
### Kupitia mabadiliko yanayojulikana
|
||||
|
||||
@ -50,47 +50,47 @@ Tukidhani unatafuta thamani 100, unafanya **scan** ukitafuta thamani hiyo na una
|
||||
|
||||
.png>)
|
||||
|
||||
Kisha, unafanya kitu ili **thamani ibadilike**, na un **asitisha** mchezo na **ufanye** **scan inayofuata**:
|
||||
Kisha, unafanya kitu ili **thamani ibadilike**, na un **asitisha** mchezo na **kufanya** **scan** ya **next**:
|
||||
|
||||
.png>)
|
||||
|
||||
Cheat Engine itatafuta **thamani** ambazo **zilipita kutoka 100 hadi thamani mpya**. Hongera, umepata **anwani** ya thamani uliyokuwa unatafuta, sasa unaweza kuibadilisha.\
|
||||
_Ikiwa bado una thamani kadhaa, fanya kitu ili kubadilisha tena thamani hiyo, na fanya "scan inayofuata" ili kuchuja anwani._
|
||||
_Ikiwa bado una thamani kadhaa, fanya kitu ili kubadilisha tena thamani hiyo, na fanya "next scan" nyingine ili kuchuja anwani._
|
||||
|
||||
### Thamani isiyojulikana, mabadiliko yanayojulikana
|
||||
|
||||
Katika hali ambapo **hujui thamani** lakini unajua **jinsi ya kuifanya ibadilike** (na hata thamani ya mabadiliko) unaweza kutafuta nambari yako.
|
||||
|
||||
Hivyo, anza kwa kufanya scan ya aina "**Thamani ya mwanzo isiyojulikana**":
|
||||
Hivyo, anza kwa kufanya scan ya aina "**Unknown initial value**":
|
||||
|
||||
.png>)
|
||||
|
||||
Kisha, fanya thamani ibadilike, onyesha **jinsi** **thamani** **ilibadilika** (katika kesi yangu ilipungua kwa 1) na fanya **scan inayofuata**:
|
||||
Kisha, fanya thamani ibadilike, onyesha **jinsi** **thamani** **ilibadilika** (katika kesi yangu ilipungua kwa 1) na fanya **next scan**:
|
||||
|
||||
.png>)
|
||||
|
||||
Utawasilishwa **na thamani zote ambazo zilibadilishwa kwa njia iliyo chaguliwa**:
|
||||
Utawasilishwa **na thamani zote ambazo zilibadilishwa kwa njia iliyochaguliwa**:
|
||||
|
||||
.png>)
|
||||
|
||||
Mara tu unapokuwa umepata thamani yako, unaweza kuibadilisha.
|
||||
|
||||
Kumbuka kwamba kuna **mabadiliko mengi yanayowezekana** na unaweza kufanya hatua hizi **mara nyingi kadri unavyotaka** ili kuchuja matokeo:
|
||||
Kumbuka kuwa kuna **mabadiliko mengi yanayowezekana** na unaweza kufanya hatua hizi **mara nyingi kadri unavyotaka** ili kuchuja matokeo:
|
||||
|
||||
.png>)
|
||||
|
||||
### Anwani ya Kumbukumbu ya Nasibu - Kutafuta msimbo
|
||||
|
||||
Hadi sasa tumefundishwa jinsi ya kupata anwani inayohifadhi thamani, lakini ni uwezekano mkubwa kwamba katika **utekelezaji tofauti wa mchezo anwani hiyo iko katika maeneo tofauti ya kumbukumbu**. Hivyo hebu tujifunze jinsi ya kila wakati kupata anwani hiyo.
|
||||
Hadi sasa tumefundishwa jinsi ya kupata anwani inayohifadhi thamani, lakini ni uwezekano mkubwa kwamba katika **utekelezaji tofauti wa mchezo anwani hiyo iko katika maeneo tofauti ya kumbukumbu**. Hivyo, hebu tujifunze jinsi ya kila wakati kupata anwani hiyo.
|
||||
|
||||
Kwa kutumia baadhi ya hila zilizotajwa, pata anwani ambapo mchezo wako wa sasa unahifadhi thamani muhimu. Kisha (ukisitisha mchezo ikiwa unataka) fanya **kulia** kwenye **anwani** iliyopatikana na uchague "**Jua ni nani anayefikia anwani hii**" au "**Jua ni nani anayandika kwenye anwani hii**":
|
||||
Kwa kutumia baadhi ya hila zilizotajwa, pata anwani ambapo mchezo wako wa sasa unahifadhi thamani muhimu. Kisha (ukisitisha mchezo ikiwa unataka) fanya **right click** kwenye **anwani** iliyopatikana na uchague "**Find out what accesses this address**" au "**Find out what writes to this address**":
|
||||
|
||||
.png>)
|
||||
|
||||
**Chaguo la kwanza** ni muhimu kujua ni **sehemu** gani za **msimbo** zinazo **tumia** **anwani hii** (ambayo ni muhimu kwa mambo mengine kama **kujua wapi unaweza kubadilisha msimbo** wa mchezo).\
|
||||
**Chaguo la kwanza** ni muhimu kujua **sehemu** za **msimbo** zinazotumia **anwani hii** (ambayo ni muhimu kwa mambo zaidi kama **kujua wapi unaweza kubadilisha msimbo** wa mchezo).\
|
||||
**Chaguo la pili** ni **maalum zaidi**, na litakuwa na msaada zaidi katika kesi hii kwani tunavutiwa kujua **kutoka wapi thamani hii inaandikwa**.
|
||||
|
||||
Mara tu unapochagua moja ya chaguzi hizo, **debugger** itakuwa **imeunganishwa** na programu na dirisha jipya **bila maudhui** litajitokeza. Sasa, **cheza** **mchezo** na **badilisha** hiyo **thamani** (bila kuanzisha upya mchezo). **Dirisha** linapaswa kuwa **limejaa** na **anwani** ambazo zina **badilisha** **thamani**:
|
||||
Mara tu unapochagua moja ya chaguzi hizo, **debugger** itakuwa **imeunganishwa** na programu na dirisha jipya **bila maudhui** litajitokeza. Sasa, **cheza** **mchezo** na **badilisha** **thamani** hiyo (bila kuanzisha upya mchezo). **Dirisha** linapaswa kuwa **limejaa** na **anwani** zinazobadilisha **thamani**:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -102,7 +102,7 @@ Hivyo, sasa unaweza kuibadilisha ili msimbo usiathiri nambari yako, au uathiri k
|
||||
|
||||
### Anwani ya Kumbukumbu ya Nasibu - Kutafuta kiashiria
|
||||
|
||||
Kufuata hatua zilizopita, pata mahali ambapo thamani unayovutiwa nayo iko. Kisha, kwa kutumia "**Jua ni nani anayandika kwenye anwani hii**" pata ni anwani gani inayoandika thamani hii na ubofye mara mbili ili kupata mtazamo wa disassembly:
|
||||
Kufuata hatua zilizopita, pata wapi thamani unayovutiwa nayo iko. Kisha, kwa kutumia "**Find out what writes to this address**" pata anwani ipi inaandika thamani hii na ubofye mara mbili ili kupata mtazamo wa disassembly:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -110,14 +110,14 @@ Kisha, fanya scan mpya **ukitafuta thamani ya hex kati ya "\[]"** (thamani ya $e
|
||||
|
||||
.png>)
|
||||
|
||||
(_Ikiwa kadhaa zinaonekana kawaida unahitaji anwani ndogo zaidi_)\
|
||||
Sasa, tumepata **kiashiria ambacho kitakuwa kinabadilisha thamani tunayoipenda**.
|
||||
(_Ikiwa kadhaa zinaonekana unahitaji mara nyingi anwani ndogo zaidi_)\
|
||||
Sasa, tumepata **kiashiria ambacho kitakuwa kinabadilisha thamani tunayotaka**.
|
||||
|
||||
Bofya kwenye "**Ongeza Anwani kwa Mikono**":
|
||||
Bofya kwenye "**Add Address Manually**":
|
||||
|
||||
.png>)
|
||||
|
||||
Sasa, bofya kwenye kisanduku cha "Kiashiria" na ongeza anwani iliyopatikana kwenye kisanduku cha maandiko (katika hali hii, anwani iliyopatikana katika picha ya awali ilikuwa "Tutorial-i386.exe"+2426B0):
|
||||
Sasa, bofya kwenye kisanduku cha "Pointer" na ongeza anwani iliyopatikana katika kisanduku cha maandiko (katika hali hii, anwani iliyopatikana katika picha ya awali ilikuwa "Tutorial-i386.exe"+2426B0):
|
||||
|
||||
.png>)
|
||||
|
||||
@ -131,14 +131,14 @@ Sasa, kila wakati unabadilisha thamani hiyo unakuwa **unabadilisha thamani muhim
|
||||
|
||||
### Uingizaji wa Msimbo
|
||||
|
||||
Uingizaji wa msimbo ni mbinu ambapo unatia kipande cha msimbo ndani ya mchakato wa lengo, na kisha kuhamasisha utekelezaji wa msimbo ili upite kupitia msimbo wako ulioandikwa (kama kukupa alama badala ya kuziondoa).
|
||||
Uingizaji wa msimbo ni mbinu ambapo unatia kipande cha msimbo katika mchakato wa lengo, na kisha kuhamasisha utekelezaji wa msimbo ili upite kupitia msimbo wako ulioandikwa (kama kukupa alama badala ya kuziondoa).
|
||||
|
||||
Hivyo, fikiria umepata anwani inayopunguza 1 kwa maisha ya mchezaji wako:
|
||||
|
||||
.png>)
|
||||
|
||||
Bofya onyesha disassembler ili kupata **msimbo wa disassemble**.\
|
||||
Kisha, bofya **CTRL+a** ili kuanzisha dirisha la Auto assemble na uchague _**Template --> Uingizaji wa Msimbo**_
|
||||
Bofya kwenye Onyesha disassembler ili kupata **msimbo wa disassemble**.\
|
||||
Kisha, bofya **CTRL+a** ili kuanzisha dirisha la Auto assemble na uchague _**Template --> Code Injection**_
|
||||
|
||||
.png>)
|
||||
|
||||
@ -154,10 +154,64 @@ Hivyo, ingiza msimbo wako mpya wa assembly katika sehemu ya "**newmem**" na ondo
|
||||
|
||||
.png>)
|
||||
|
||||
**Bofya kwenye tekeleza na kadhalika na msimbo wako unapaswa kuingizwa katika programu ukibadilisha tabia ya kazi hiyo!**
|
||||
**Bofya kwenye execute na kadhalika na msimbo wako unapaswa kuingizwa katika programu ukibadilisha tabia ya kazi hiyo!**
|
||||
|
||||
## Vipengele vya Juu katika Cheat Engine 7.x (2023-2025)
|
||||
|
||||
Cheat Engine imeendelea kubadilika tangu toleo la 7.0 na vipengele kadhaa vya kuboresha maisha na *offensive-reversing* vimeongezwa ambavyo ni muhimu sana wakati wa kuchambua programu za kisasa (na sio michezo pekee!). Hapa kuna **mwongozo wa uwanja wa muhtasari** wa nyongeza ambazo huenda ukatumia wakati wa kazi za red-team/CTF.
|
||||
|
||||
### Maboresho ya Pointer Scanner 2
|
||||
* `Pointers lazima iishe na offsets maalum` na slider mpya ya **Deviation** (≥7.4) inapunguza sana matokeo ya uwongo unapofanya skani tena baada ya sasisho. Tumia pamoja na kulinganisha ramani nyingi (`.PTR` → *Compare results with other saved pointer map*) ili kupata **pointer ya msingi inayodumu** kwa dakika chache tu.
|
||||
* Kifunguo cha kuchuja kwa wingi: baada ya skani ya kwanza bonyeza `Ctrl+A → Space` ili kuweka alama kila kitu, kisha `Ctrl+I` (geuza) ili kuondoa alama kwenye anwani ambazo zimeshindwa skani tena.
|
||||
|
||||
### Ultimap 3 – Intel PT tracing
|
||||
*Tangu 7.5 Ultimap ya zamani ilirejelewa juu ya **Intel Processor-Trace (IPT)***. Hii inamaanisha sasa unaweza kurekodi *kila* tawi ambalo lengo linachukua **bila hatua moja moja** (mode ya mtumiaji pekee, haitasababisha vifaa vingi vya kupambana na debug).
|
||||
```
|
||||
Memory View → Tools → Ultimap 3 → check «Intel PT»
|
||||
Select number of buffers → Start
|
||||
```
|
||||
Baada ya sekunde chache, simamisha kukamata na **bonyeza-kulia → Hifadhi orodha ya utekelezaji kwenye faili**. Changanya anwani za tawi na kikao cha `Find out what addresses this instruction accesses` ili kupata maeneo ya juu ya mantiki ya mchezo kwa haraka sana.
|
||||
|
||||
### Mifano ya `jmp` / auto-patch ya byte 1
|
||||
Toleo la 7.5 lilianzisha *stub ya JMP byte moja* (0xEB) ambayo inasakinisha mhandisi wa SEH na kuweka INT3 kwenye eneo la awali. Inazalishwa kiotomatiki unapofanya **Auto Assembler → Template → Code Injection** kwenye maagizo ambayo hayawezi kupachikwa na kuruka kwa uhusiano wa byte 5. Hii inafanya "hooks" za "tight" kuwa na uwezekano ndani ya taratibu zilizopakizwa au zilizopangwa kwa ukubwa.
|
||||
|
||||
### Stealth ya kiwango cha Kernel na DBVM (AMD & Intel)
|
||||
*DBVM* ni hypervisor ya Aina-2 iliyojengwa ndani ya CE. Mifumo ya hivi karibuni hatimaye iliongeza **support ya AMD-V/SVM** ili uweze kuendesha `Driver → Load DBVM` kwenye mwenyeji wa Ryzen/EPYC. DBVM inakuwezesha:
|
||||
1. Kuunda alama za kuvunja zisizoonekana kwa ukaguzi wa Ring-3/anti-debug.
|
||||
2. Kusoma/kandika maeneo ya kumbukumbu ya kernel yanayoweza kubadilishwa au kulindwa hata wakati dereva wa hali ya mtumiaji umekataliwa.
|
||||
3. Kufanya upitishaji wa shambulio la wakati bila VM-EXIT (mfano: uliza `rdtsc` kutoka kwa hypervisor).
|
||||
|
||||
**Kidokezo:** DBVM itakataa kupakia wakati HVCI/Memory-Integrity imewezeshwa kwenye Windows 11 → izime au uanzishe mwenyeji wa VM maalum.
|
||||
|
||||
### Urekebishaji wa mbali / wa jukwaa tofauti na **ceserver**
|
||||
CE sasa inatoa upya kamili wa *ceserver* na inaweza kuunganishwa kupitia TCP kwa malengo ya **Linux, Android, macOS & iOS**. Tawi maarufu linajumuisha *Frida* ili kuunganisha uhandisi wa dynamic na GUI ya CE – bora unapohitaji kupachika michezo ya Unity au Unreal inayotembea kwenye simu:
|
||||
```
|
||||
# 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
|
||||
```
|
||||
Kwa ajili ya daraja la Frida angalia `bb33bb/frida-ceserver` kwenye GitHub.
|
||||
|
||||
### Vitu vingine vya kuzingatia
|
||||
* **Patch Scanner** (MemView → Tools) – inagundua mabadiliko yasiyotarajiwa ya msimbo katika sehemu zinazoweza kutekelezwa; muhimu kwa uchambuzi wa malware.
|
||||
* **Structure Dissector 2** – drag-an-address → `Ctrl+D`, kisha *Guess fields* ili kujitathmini kiotomatiki C-structures.
|
||||
* **.NET & Mono Dissector** – msaada bora wa mchezo wa Unity; piga simu kwa njia moja kwa moja kutoka kwenye CE Lua console.
|
||||
* **Big-Endian custom types** – skana/edit ya mpangilio wa byte iliyogeuzwa (inayofaa kwa emulators za console na buffers za pakiti za mtandao).
|
||||
* **Autosave & tabs** kwa AutoAssembler/Lua windows, pamoja na `reassemble()` kwa uandishi wa maagizo ya mistari mingi.
|
||||
|
||||
### Maelezo ya Usanidi & OPSEC (2024-2025)
|
||||
* Msimamizi rasmi umefungwa na InnoSetup **ad-offers** (`RAV` n.k.). **Daima bonyeza *Decline*** *au tengeneza kutoka chanzo* ili kuepuka PUPs. AVs bado zitabaini `cheatengine.exe` kama *HackTool*, ambayo inatarajiwa.
|
||||
* Madereva ya kisasa ya kupambana na udanganyifu (EAC/Battleye, ACE-BASE.sys, mhyprot2.sys) yanagundua daraja la CE hata wakati limepewa jina jipya. Endesha nakala yako ya kurudi nyuma **ndani ya VM inayoweza kutumika** au baada ya kuzima mchezo wa mtandao.
|
||||
* Ikiwa unahitaji tu ufikiaji wa hali ya mtumiaji chagua **`Settings → Extra → Kernel mode debug = off`** ili kuepuka kupakia dereva usio na saini wa CE ambao unaweza BSOD kwenye Windows 11 24H2 Secure-Boot.
|
||||
|
||||
---
|
||||
|
||||
## **Marejeleo**
|
||||
|
||||
- **Mafunzo ya Cheat Engine, kamilisha ili kujifunza jinsi ya kuanza na Cheat Engine**
|
||||
- [Cheat Engine 7.5 release notes (GitHub)](https://github.com/cheat-engine/cheat-engine/releases/tag/7.5)
|
||||
- [frida-ceserver cross-platform bridge](https://github.com/bb33bb/frida-ceserver-Mac-and-IOS)
|
||||
- **Cheat Engine tutorial, complete it to learn how to start with Cheat Engine**
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user