
C++ में लिखा गया ओपन सोर्स मेमोरी स्कैनर
XenoScan एक मेमोरी स्कैनर है जिसका उपयोग प्रक्रियाओं की मेमोरी को स्कैन करने के लिए किया जा सकता है ताकि महत्वपूर्ण मूल्यों के विशिष्ट स्थानों का पता लगाया जा सके। ऐसे उपकरण आमतौर पर वीडियो गेम हैक करते समय उपयोग किए जाते हैं, क्योंकि वे किसी को मेमोरी में गेम की स्थिति को दर्शाने वाले मानों का पता लगाने की अनुमति देते हैं।
XenoScan C++ में लिखा गया है जिसमें Lua फ्रंटएंड है, और मैं उन्नत कार्यक्षमता पर काम कर रहा हूं जो किसी भी अन्य मेमोरी स्कैनर में देखी गई किसी भी चीज़ से परे है। विशेष रूप से, इसमें लक्ष्य के मेमोरी स्पेस में सभी जटिल डेटा संरचनाओं (जैसे std::list और std::map) की गणना करने और वापस करने का एक तरीका है, और यह किसी भी वर्ग के इंस्टेंस को स्कैन भी कर सकता है और खोजे गए इंस्टेंस को उनके अंतर्निहित प्रकारों के आधार पर समूहित कर सकता है।
यदि आपको मुझसे संपर्क करने की आवश्यकता है, चैट करने के लिए कोई स्थान चाहिए, या कोई प्रश्न है, तो मेरा Discord सबसे अच्छा स्थान है।
XenoLua Lua के चारों ओर एक रैपर है जो बहुत सारी कार्यक्षमता प्रदान करता है। सबसे उल्लेखनीय रूप से, यह एक LuaVariant क्लास प्रदान करता है जो C/C++ और Lua प्रकारों के बीच रूपांतरण की कार्यक्षमता को लपेटता है। इसके अतिरिक्त, इसमें LuaPrimitive क्लास में Lua के साथ काम करने के लिए सहायक फ़ंक्शन हैं।
XenoScanEngine परियोजना का मुख्य भाग है। इसमें स्कैनिंग, डेटा संरचना का पता लगाने और बाकी सब कुछ के लिए कोड शामिल है।
XenoScanLua XenoScanEngine को XenoLua से जोड़ता है ताकि स्कैनर के लिए Lua-स्क्रिप्टेबल फ्रंटएंड प्रदान किया जा सके। वर्तमान में, यह स्कैनर का एकमात्र प्रवेश बिंदु है।
इसके अलावा, इस परियोजना में कुछ परीक्षण कोड शामिल हैं जो सुनिश्चित करते हैं कि सब कुछ ठीक से काम कर रहा है। एक परीक्षण एक .cpp, एक .h, और एक .lua फ़ाइल का संयोजन है। स्कैनर का उपयोग करने के उदाहरणों के लिए, आप .lua परीक्षण फ़ाइलों की जांच कर सकते हैं।
XenoScan CMake का उपयोग करता है, और Visual Studio 2017 के साथ परीक्षण किया गया है। VS के इस संस्करण का उपयोग करने के लिए, बस 32bit Developer Command Prompt for VS से buildmsvc2017.bat चलाएँ। उदाहरण के तौर पर, Visual Studio 2017 के लिए एक प्रोजेक्ट बनाने के लिए, मैं चलाता हूँ
cd C:\path\to\XenoScan
buildmsvc2017.bat
जो मेरी build निर्देशिका (जैसे C:\path\to\XenoScan\build) में XenoScan.sln नामक एक फ़ाइल बनाता है। फिर मैं Visual Studio में कोड को संकलित करने के लिए इस समाधान फ़ाइल का उपयोग करता हूं। x64 बनाना समान है, लेकिन इसे x64 Native Tools Command Prompt for VS से चलाया जाता है।
cd C:\path\to\XenoScan
buildmsvc2017x64.bat
32bit और x64 बिल्ड के बीच स्विच करते समय, आपको buildclean.bat चलाना चाहिए। यह उत्पन्न प्रोजेक्ट फ़ाइलों को हटा देगा और संकलित LuaJIT बाइनरी को हटा देगा, क्योंकि उन्हें सही आर्किटेक्चर के लिए पुनर्निर्माण की आवश्यकता है (यह स्वचालित रूप से होगा)।
नोट: मुझे नहीं पता कि इन प्रॉम्प्ट के नाम इतने अलग क्यों हैं। महत्वपूर्ण बात यह है कि प्रॉम्प्ट द्वारा सेट किए गए vcvars निर्माण किए जा रहे आर्किटेक्चर के अनुरूप हों। यह मुख्य रूप से LuaJIT बनाने के लिए महत्वपूर्ण है। फिर भी, बिल्ड स्क्रिप्ट आपको बताएगी कि क्या आप उन्हें गलत जगह से चला रहे हैं।
सिद्धांत रूप में, आप किसी भी आधुनिक कंपाइलर के साथ कोड बना सकते हैं, जब तक आप प्रोजेक्ट फ़ाइलें उत्पन्न करने के लिए CMake का उपयोग करते हैं। संकलन करने से पहले, आपको यह सुनिश्चित करना होगा कि आपने सबमॉड्यूल चेक आउट कर लिए हैं। एक बार ऐसा करने के बाद, आपको luajit सबमॉड्यूल बनाना भी होगा ताकि XenoScan पुस्तकालयों के खिलाफ लिंक कर सके।
आधुनिक से मेरा मतलब है कि जो C++17 का समर्थन करता है, क्योंकि कोड उस मानक का उपयोग करता है। इसके अतिरिक्त, आपका CMake संस्करण कम से कम 3.10 होना चाहिए।
कोड को प्लेटफ़ॉर्म-अज्ञेयवादी बनाया गया है। सैद्धांतिक रूप से, किसी अन्य प्लेटफ़ॉर्म पर संकलित करने के लिए, आपको निम्न की आवश्यकता होगी
ScannerTargetWindows.cpp और ScannerTargetWindows.h फ़ाइलें हटाएं।ScannerTarget इंटरफ़ेस लागू करें।बुनियादी स्कैनिंग कार्यक्षमता निम्नलिखित प्रकारों का समर्थन करती है:
int8_tuint8_tint16_tuint16_tint32_tuint32_tint64_tuint64_tfloatdoublefiletime64: 64bit टाइमस्टैम्प (GetSystemTimeAsFileTime() विंडोज़ पर)ticktime32: 32bit टिक काउंट ( विंडोज़ पर)* Lua फ्रंटएंड 64-बिट पूर्णांकों पर अटक सकता है, लेकिन स्कैनर लाइब्रेरी उनका समर्थन करती है।
स्कैनिंग निम्नलिखित प्रकार के मिलान का समर्थन करती है:
min <= check <= max)इसके अतिरिक्त, निम्नलिखित प्रकारों के सभी उदाहरणों का पता लगाने की कार्यक्षमता है:
std::mapstd::listGetTickCount()C++ struct के बारे में सोचें)