From c28ed846f54658d991af45aba86aad60edd82aea Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 4 Aug 2025 20:14:42 +0000 Subject: [PATCH] Translated ['src/reversing/reversing-tools-basic-methods/cheat-engine.md --- .../cheat-engine.md | 94 +++++++++++++++---- 1 file changed, 74 insertions(+), 20 deletions(-) diff --git a/src/reversing/reversing-tools-basic-methods/cheat-engine.md b/src/reversing/reversing-tools-basic-methods/cheat-engine.md index 31d83b9cf..4f254d6d9 100644 --- a/src/reversing/reversing-tools-basic-methods/cheat-engine.md +++ b/src/reversing/reversing-tools-basic-methods/cheat-engine.md @@ -9,8 +9,8 @@ ![](<../../images/image (762).png>) -यह उपकरण यह पता लगाने के लिए बहुत उपयोगी है कि **कुछ मान** (आमतौर पर एक संख्या) **कहाँ संग्रहीत है** एक प्रोग्राम की मेमोरी में।\ -**आमतौर पर संख्याएँ** **4bytes** रूप में संग्रहीत होती हैं, लेकिन आप उन्हें **डबल** या **फ्लोट** प्रारूप में भी पा सकते हैं, या आप कुछ **संख्याओं से अलग** देखने की कोशिश कर सकते हैं। इस कारण से, आपको यह सुनिश्चित करने की आवश्यकता है कि आप **चुनें** कि आप **क्या खोज रहे हैं**: +यह उपकरण यह पता लगाने के लिए बहुत उपयोगी है कि **कुछ मान** (आमतौर पर एक संख्या) **किसी प्रोग्राम की मेमोरी में कहाँ संग्रहीत है**।\ +**आमतौर पर संख्याएँ** **4bytes** रूप में संग्रहीत होती हैं, लेकिन आप उन्हें **डबल** या **फ्लोट** प्रारूपों में भी पा सकते हैं, या आप कुछ **संख्याओं से अलग** देखने की कोशिश कर सकते हैं। इस कारण से, आपको यह सुनिश्चित करने की आवश्यकता है कि आप **चुनें** कि आप **क्या खोज रहे हैं**: ![](<../../images/image (324).png>) @@ -18,13 +18,13 @@ ![](<../../images/image (311).png>) -आप मेमोरी स्कैन करते समय **गेम को रोकने** के लिए बॉक्स को भी चेक कर सकते हैं: +आप मेमोरी स्कैन करते समय **खेल को रोकने** के लिए बॉक्स को भी चेक कर सकते हैं: ![](<../../images/image (1052).png>) ### हॉटकीज़ -_**Edit --> Settings --> Hotkeys**_ में आप विभिन्न उद्देश्यों के लिए विभिन्न **हॉटकीज़** सेट कर सकते हैं जैसे **गेम को रोकना** (जो कि मेमोरी स्कैन करते समय बहुत उपयोगी है)। अन्य विकल्प उपलब्ध हैं: +_**Edit --> Settings --> Hotkeys**_ में आप विभिन्न उद्देश्यों के लिए विभिन्न **हॉटकीज़** सेट कर सकते हैं जैसे **खेल को रोकना** (जो कि मेमोरी स्कैन करते समय बहुत उपयोगी है)। अन्य विकल्प उपलब्ध हैं: ![](<../../images/image (864).png>) @@ -34,7 +34,7 @@ _**Edit --> Settings --> Hotkeys**_ में आप विभिन्न उ ![](<../../images/image (563).png>) -और अंततः मेमोरी में संशोधन करने के लिए **चेक मार्क** लगाकर: +और अंततः मेमोरी में संशोधन करने के लिए **चेक** को **मार्क** करके: ![](<../../images/image (385).png>) @@ -42,7 +42,7 @@ _**Edit --> Settings --> Hotkeys**_ में आप विभिन्न उ ## मान की खोज -तो, हम मान लेते हैं कि एक महत्वपूर्ण मान (जैसे आपके उपयोगकर्ता का जीवन) है जिसे आप सुधारना चाहते हैं, और आप इस मान को मेमोरी में खोज रहे हैं) +तो, हम यह मानते हैं कि एक महत्वपूर्ण मान (जैसे आपके उपयोगकर्ता का जीवन) है जिसे आप सुधारना चाहते हैं, और आप इस मान को मेमोरी में खोज रहे हैं) ### ज्ञात परिवर्तन के माध्यम से @@ -50,7 +50,7 @@ _**Edit --> Settings --> Hotkeys**_ में आप विभिन्न उ ![](<../../images/image (108).png>) -फिर, आप कुछ ऐसा करते हैं जिससे **मान बदलता है**, और आप **गेम को रोकते हैं** और **अगली स्कैन** करते हैं: +फिर, आप कुछ ऐसा करते हैं जिससे **मान बदलता है**, और आप **खेल को रोकते हैं** और **अगली स्कैन** करते हैं: ![](<../../images/image (684).png>) @@ -59,7 +59,7 @@ _यदि आपके पास अभी भी कई मान हैं, ### अज्ञात मान, ज्ञात परिवर्तन -इस परिदृश्य में, आप **मान नहीं जानते** लेकिन आप जानते हैं **कैसे इसे बदलना है** (और यहां तक कि परिवर्तन का मान) आप अपने नंबर की खोज कर सकते हैं। +इस परिदृश्य में, यदि आप **मान नहीं जानते** लेकिन आप जानते हैं **कि इसे कैसे बदलना है** (और यहां तक कि परिवर्तन का मान) तो आप अपने नंबर की खोज कर सकते हैं। तो, "**अज्ञात प्रारंभिक मान**" प्रकार की स्कैन करने से शुरू करें: @@ -75,22 +75,22 @@ _यदि आपके पास अभी भी कई मान हैं, एक बार जब आप अपना मान पा लेते हैं, तो आप इसे संशोधित कर सकते हैं। -ध्यान दें कि कई **संभव परिवर्तनों** की एक **बहुतायत** है और आप परिणामों को फ़िल्टर करने के लिए इन **चरणों** को जितनी चाहें कर सकते हैं: +ध्यान दें कि कई **संभव परिवर्तनों** की संभावना है और आप परिणामों को फ़िल्टर करने के लिए इन **चरणों को जितना चाहें कर सकते हैं**: ![](<../../images/image (574).png>) ### यादृच्छिक मेमोरी पता - कोड खोजना -अब तक हमने एक मान संग्रहीत करने वाले पते को खोजने का तरीका सीखा है, लेकिन यह बहुत संभावना है कि **खेल के विभिन्न निष्पादन में वह पता मेमोरी के विभिन्न स्थानों में हो**। तो चलिए पता लगाते हैं कि उस पते को हमेशा कैसे खोजें। +अब तक हमने एक मान संग्रहीत करने वाले पते को खोजने का तरीका सीखा है, लेकिन यह बहुत संभावना है कि **खेल के विभिन्न निष्पादन में वह पता मेमोरी के विभिन्न स्थानों में हो**। तो चलिए पता लगाते हैं कि हमेशा उस पते को कैसे खोजें। -कुछ उल्लेखित तरकीबों का उपयोग करते हुए, उस पते को खोजें जहाँ आपका वर्तमान खेल महत्वपूर्ण मान को संग्रहीत कर रहा है। फिर (यदि आप चाहें तो खेल को रोकते हुए) उस पाए गए **पते** पर **दाएँ क्लिक** करें और "**इस पते तक पहुँचने वाले को खोजें**" या "**इस पते पर लिखने वाले को खोजें**" का चयन करें: +कुछ उल्लेखित तरकीबों का उपयोग करते हुए, उस पते को खोजें जहाँ आपका वर्तमान खेल महत्वपूर्ण मान को संग्रहीत कर रहा है। फिर (यदि आप चाहें तो खेल को रोकते हुए) उस **पते** पर **दाएँ क्लिक** करें और "**इस पते को एक्सेस करने वाले को खोजें**" या "**इस पते पर लिखने वाले को खोजें**" का चयन करें: ![](<../../images/image (1067).png>) **पहला विकल्प** यह जानने के लिए उपयोगी है कि **कोड** के कौन से **भाग** इस **पते** का **उपयोग** कर रहे हैं (जो कि खेल के कोड को संशोधित करने के लिए उपयोगी है)।\ **दूसरा विकल्प** अधिक **विशिष्ट** है, और इस मामले में अधिक सहायक होगा क्योंकि हम यह जानने में रुचि रखते हैं कि **यह मान कहाँ से लिखा जा रहा है**। -एक बार जब आप इनमें से एक विकल्प का चयन कर लेते हैं, तो **डीबगर** प्रोग्राम से **जुड़ जाएगा** और एक नई **खाली विंडो** दिखाई देगी। अब, **खेलें** और उस **मान** को **संशोधित** करें (खेल को फिर से शुरू किए बिना)। **विंडो** को उन **पत्तों** से **भरा** जाना चाहिए जो **मान को संशोधित कर रहे हैं**: +एक बार जब आप इनमें से एक विकल्प का चयन कर लेते हैं, तो **डीबगर** प्रोग्राम से **जुड़ जाएगा** और एक नई **खाली विंडो** दिखाई देगी। अब, **खेलें** और उस **मान** को **संशोधित** करें (खेल को फिर से शुरू किए बिना)। **विंडो** में उन **पते** से भरा जाना चाहिए जो **मान को संशोधित कर रहे हैं**: ![](<../../images/image (91).png>) @@ -102,7 +102,7 @@ _यदि आपके पास अभी भी कई मान हैं, ### यादृच्छिक मेमोरी पता - प्वाइंटर खोजना -पिछले चरणों का पालन करते हुए, उस मान को खोजें जिसमें आपकी रुचि है। फिर, "**इस पते पर लिखने वाले को खोजें**" का उपयोग करके यह पता लगाएं कि कौन सा पता इस मान को लिखता है और उस पर डबल क्लिक करें ताकि आप डिस्सेम्बली दृश्य प्राप्त कर सकें: +पिछले चरणों का पालन करते हुए, उस स्थान को खोजें जहाँ आप रुचि रखते हैं। फिर, "**इस पते पर लिखने वाले को खोजें**" का उपयोग करके यह पता लगाएं कि कौन सा पता इस मान को लिखता है और उस पर डबल क्लिक करें ताकि डिस्सेम्बली दृश्य प्राप्त हो सके: ![](<../../images/image (1039).png>) @@ -111,7 +111,7 @@ _यदि आपके पास अभी भी कई मान हैं, ![](<../../images/image (994).png>) (_यदि कई दिखाई देते हैं, तो आपको आमतौर पर सबसे छोटे पते की आवश्यकता होती है_)\ -अब, हमने **उस प्वाइंटर को खोज लिया है जो उस मान को संशोधित करेगा जिसमें हमारी रुचि है**। +अब, हमने **प्वाइंटर पाया है जो उस मान को संशोधित करेगा जिसमें हमें रुचि है**। "**पता मैन्युअल रूप से जोड़ें**" पर क्लिक करें: @@ -127,11 +127,11 @@ OK पर क्लिक करें और एक नया प्वाइ ![](<../../images/image (308).png>) -अब, जब भी आप उस मान को संशोधित करते हैं, तो आप **महत्वपूर्ण मान को संशोधित कर रहे हैं भले ही उस मान का पता अलग हो**। +अब, हर बार जब आप उस मान को संशोधित करते हैं, तो आप **महत्वपूर्ण मान को संशोधित कर रहे हैं, भले ही उस मान का पता अलग हो**। ### कोड इंजेक्शन -कोड इंजेक्शन एक तकनीक है जहाँ आप लक्षित प्रक्रिया में कोड का एक टुकड़ा इंजेक्ट करते हैं, और फिर कोड के निष्पादन को अपने द्वारा लिखे गए कोड के माध्यम से रीरूट करते हैं (जैसे आपको अंक देना बजाय उन्हें घटाने के)। +कोड इंजेक्शन एक तकनीक है जहाँ आप लक्षित प्रक्रिया में कोड का एक टुकड़ा इंजेक्ट करते हैं, और फिर कोड के निष्पादन को अपने द्वारा लिखित कोड के माध्यम से पुनः मार्गदर्शित करते हैं (जैसे आपको अंक देना बजाय उन्हें घटाने के)। तो, कल्पना करें कि आपने उस पते को खोज लिया है जो आपके खिलाड़ी के जीवन से 1 घटा रहा है: @@ -142,7 +142,7 @@ OK पर क्लिक करें और एक नया प्वाइ ![](<../../images/image (902).png>) -**संशोधित करने के लिए आप जिस निर्देश का पता चाहते हैं** (यह आमतौर पर स्वचालित रूप से भरा जाता है) भरें: +**संशोधित करने के लिए आप जिस निर्देश का पता चाहते हैं, उसे भरें** (यह आमतौर पर स्वचालित रूप से भरा जाता है): ![](<../../images/image (744).png>) @@ -154,10 +154,64 @@ OK पर क्लिक करें और एक नया प्वाइ ![](<../../images/image (521).png>) -**Execute पर क्लिक करें और इसी तरह आपका कोड प्रोग्राम में इंजेक्ट किया जाना चाहिए जिससे कार्यक्षमता का व्यवहार बदल जाए!** +**Execute पर क्लिक करें और इसी तरह आपका कोड प्रोग्राम में इंजेक्ट होना चाहिए जिससे कार्यक्षमता का व्यवहार बदल जाए!** -## **संदर्भ** +## Cheat Engine 7.x (2023-2025) में उन्नत सुविधाएँ -- **Cheat Engine ट्यूटोरियल, इसे पूरा करें ताकि Cheat Engine के साथ शुरू करना सीख सकें** +Cheat Engine ने संस्करण 7.0 के बाद से विकसित होना जारी रखा है और कई गुणवत्ता-जीवन और *आक्रामक-रिवर्सिंग* सुविधाएँ जोड़ी गई हैं जो आधुनिक सॉफ़्टवेयर (और केवल खेल नहीं!) का विश्लेषण करते समय अत्यंत उपयोगी हैं। नीचे एक **बहुत संक्षिप्त क्षेत्र गाइड** है जो उन परिवर्धनों के लिए है जिनका आप संभवतः रेड-टीम/CTF कार्य के दौरान उपयोग करेंगे। + +### प्वाइंटर स्कैनर 2 में सुधार +* `Pointers must end with specific offsets` और नया **Deviation** स्लाइडर (≥7.4) जब आप अपडेट के बाद फिर से स्कैन करते हैं तो झूठे सकारात्मक को काफी कम करता है। इसे मल्टी-मैप तुलना (`.PTR` → *Compare results with other saved pointer map*) के साथ मिलाकर उपयोग करें ताकि केवल कुछ मिनटों में एक **एकल लचीला बेस-प्वाइंटर** प्राप्त किया जा सके। +* बल्क-फिल्टर शॉर्टकट: पहले स्कैन के बाद `Ctrl+A → Space` दबाकर सब कुछ मार्क करें, फिर `Ctrl+I` (इनवर्ट) दबाकर उन पते को अस्वीकृत करें जो फिर से स्कैन में विफल रहे। + +### Ultimap 3 – Intel PT ट्रेसिंग +*7.5 से पुराने Ultimap को **Intel Processor-Trace (IPT)** के शीर्ष पर फिर से लागू किया गया है। इसका मतलब है कि आप अब लक्षित प्रक्रिया द्वारा लिए गए *हर* शाखा को **बिना सिंगल-स्टेपिंग** (यूजर-मोड केवल, यह अधिकांश एंटी-डीबग गैजेट्स को ट्रिप नहीं करेगा) रिकॉर्ड कर सकते हैं। +``` +Memory View → Tools → Ultimap 3 → check «Intel PT» +Select number of buffers → Start +``` +कुछ सेकंड बाद कैप्चर को रोकें और **right-click → Save execution list to file** करें। उच्च-आवृत्ति गेम-लॉजिक हॉटस्पॉट्स को अत्यंत तेजी से खोजने के लिए शाखा पते को `Find out what addresses this instruction accesses` सत्र के साथ मिलाएं। + +### 1-byte `jmp` / ऑटो-पैच टेम्पलेट्स +संस्करण 7.5 ने एक *one-byte* JMP स्टब (0xEB) पेश किया जो एक SEH हैंडलर स्थापित करता है और मूल स्थान पर एक INT3 रखता है। यह स्वचालित रूप से उत्पन्न होता है जब आप **Auto Assembler → Template → Code Injection** का उपयोग करते हैं उन निर्देशों पर जिन्हें 5-byte सापेक्ष कूद के साथ पैच नहीं किया जा सकता। यह पैक किए गए या आकार-सीमित रूटीन के भीतर "टाइट" हुक संभव बनाता है। + +### कर्नेल-स्तरीय स्टेल्थ DBVM (AMD & Intel) के साथ +*DBVM* CE का अंतर्निहित Type-2 हाइपरवाइज़र है। हाल के निर्माणों ने अंततः **AMD-V/SVM समर्थन** जोड़ा है ताकि आप Ryzen/EPYC होस्ट पर `Driver → Load DBVM` चला सकें। DBVM आपको यह करने की अनुमति देता है: +1. Ring-3/एंटी-डिबग जांचों के लिए अदृश्य हार्डवेयर ब्रेकपॉइंट्स बनाना। +2. उपयोगकर्ता-मोड ड्राइवर बंद होने पर भी pageable या संरक्षित कर्नेल मेमोरी क्षेत्रों को पढ़ना/लिखना। +3. VM-EXIT-रहित टाइमिंग-हमले बायपास करना (जैसे हाइपरवाइज़र से `rdtsc` क्वेरी करना)। + +**टिप:** DBVM Windows 11 पर HVCI/Memory-Integrity सक्षम होने पर लोड करने से इनकार करेगा → इसे बंद करें या एक समर्पित VM-होस्ट पर बूट करें। + +### रिमोट / क्रॉस-प्लेटफ़ॉर्म डिबगिंग **ceserver** के साथ +CE अब *ceserver* का पूरा पुनर्लेखन प्रदान करता है और **Linux, Android, macOS & iOS** लक्ष्यों पर TCP के माध्यम से संलग्न हो सकता है। एक लोकप्रिय फोर्क *Frida* को एकीकृत करता है ताकि CE के GUI के साथ गतिशील इंस्ट्रुमेंटेशन को जोड़ा जा सके - जब आपको फोन पर चल रहे Unity या Unreal खेलों को पैच करने की आवश्यकता हो तो यह आदर्श है: +``` +# 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 +``` +For the Frida bridge see `bb33bb/frida-ceserver` on GitHub. + +### Other noteworthy goodies +* **Patch Scanner** (MemView → Tools) – अप्रत्याशित कोड परिवर्तनों का पता लगाता है; मैलवेयर विश्लेषण के लिए उपयोगी। +* **Structure Dissector 2** – drag-an-address → `Ctrl+D`, फिर *Guess fields* C-structures का स्वचालित मूल्यांकन करने के लिए। +* **.NET & Mono Dissector** – यूनिटी गेम समर्थन में सुधार; CE Lua कंसोल से सीधे विधियों को कॉल करें। +* **Big-Endian custom types** – उल्टे बाइट क्रम स्कैन/संपादित करें (कंसोल एमुलेटर्स और नेटवर्क पैकेट बफर्स के लिए उपयोगी)। +* **Autosave & tabs** AutoAssembler/Lua विंडोज़ के लिए, साथ ही `reassemble()` मल्टी-लाइन निर्देश पुनःलेखन के लिए। + +### Installation & OPSEC notes (2024-2025) +* आधिकारिक इंस्टॉलर InnoSetup **ad-offers** (`RAV` आदि) के साथ लिपटा हुआ है। **हमेशा *Decline* पर क्लिक करें** *या स्रोत से संकलित करें* PUPs से बचने के लिए। AVs अभी भी `cheatengine.exe` को *HackTool* के रूप में चिह्नित करेंगे, जो अपेक्षित है। +* आधुनिक एंटी-चीट ड्राइवर (EAC/Battleye, ACE-BASE.sys, mhyprot2.sys) CE की विंडो क्लास का पता लगाते हैं, भले ही इसका नाम बदल दिया गया हो। अपने रिवर्सिंग कॉपी को **एक नष्ट करने योग्य VM के अंदर** चलाएँ या नेटवर्क खेल को बंद करने के बाद। +* यदि आपको केवल उपयोगकर्ता-मोड एक्सेस की आवश्यकता है तो **`Settings → Extra → Kernel mode debug = off`** चुनें ताकि CE के अस्वीकृत ड्राइवर को लोड करने से बचा जा सके जो Windows 11 24H2 Secure-Boot पर BSOD कर सकता है। + +--- + +## **References** + +- [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}}