
ماسح ذاكرة مفتوح المصدر مكتوب بلغة C++
XenoScan هو ماسح ذاكرة يمكن استخدامه لمسح ذاكرة العمليات لتحديد المواقع المحددة للقيم المهمة. تُستخدم هذه الأنواع من الأدوات عادةً عند اختراق ألعاب الفيديو، حيث تسمح بتحديد القيم التي تمثل حالة اللعبة في الذاكرة.
XenoScan مكتوب بلغة C++ مع واجهة أمامية بلغة Lua، وقد عملت على وظائف متقدمة تتجاوز أي شيء رأيته في ماسحات الذاكرة الأخرى. بشكل ملحوظ، يحتوي على طريقة لتعداد وإرجاع جميع هياكل البيانات المعقدة (مثل std::list و std::map) في مساحة ذاكرة الهدف، ويمكنه حتى مسح أي مثيلات للفئات وتجميع المثيلات المكتشفة حسب أنواعها الأساسية.
إذا كنت بحاجة للتواصل معي، أو تريد مكانًا للدردشة، أو لديك سؤال، فإن Discord الخاص بي هو أفضل مكان.
XenoLua هو غلاف حول Lua يوفر مجموعة كبيرة من الوظائف. الأهم من ذلك، أنه يوفر فئة LuaVariant التي تغلف وظيفة التحويل بين أنواع C/C++ و Lua. بالإضافة إلى ذلك، يحتوي على دوال مساعدة للعمل مع Lua في فئة LuaPrimitive.
XenoScanEngine هو جوهر المشروع. يحتوي على كود المسح، وكشف بنية البيانات، وكل شيء آخر.
XenoScanLua يربط XenoScanEngine بـ XenoLua لتوفير واجهة أمامية قابلة للبرمجة بلغة Lua للماسح. حاليًا، هذه هي المدخل الوحيد للماسح.
بالإضافة إلى ذلك، يحتوي هذا المشروع على بعض كود الاختبار الذي يضمن أن كل شيء يعمل بشكل صحيح. الاختبار هو مزيج من ملفات .cpp و .h و .lua. للحصول على أمثلة حول كيفية استخدام الماسح، يمكنك الاطلاع على ملفات الاختبار .lua.
يستخدم XenoScan CMake، وتم اختباره مع Visual Studio 2017. لاستخدام هذا الإصدار من VS، قم ببساطة بتشغيل buildmsvc2017.bat من موجه أوامر المطور 32 بت لـ VS. كمثال، لبناء مشروع لـ Visual Studio 2017، أقوم بتشغيل:
cd C:\path\to\XenoScan
buildmsvc2017.bat
مما ينشئ ملفًا باسم XenoScan.sln في دليل build الخاص بي (مثل C:\path\to\XenoScan\build). ثم أستخدم ملف الحل هذا لتجميع الكود في Visual Studio. بناء x64 مشابه، ولكن يتم تشغيله من موجه أوامر الأدوات الأصلية x64 لـ VS.
cd C:\path\to\XenoScan
buildmsvc2017x64.bat
عند التبديل بين بناء 32 بت و 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: طابع زمني 64 بت (GetSystemTimeAsFileTime() على Windows)ticktime32: عداد تكت 32 بت ( على Windows)* قد تختنق واجهة Lua الأمامية مع الأعداد الصحيحة 64 بت، لكن مكتبة الماسح تدعمها.
يدعم المسح الأنواع التالية من المطابقة:
min <= check <= max)بالإضافة إلى ذلك، توجد وظيفة لاكتشاف جميع مثيلات الأنواع التالية:
std::mapstd::listGetTickCount()struct في C++)