
Открытый сканер памяти, написанный на 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, просто запустите 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 Native Tools для 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: 64-битная временная метка (GetSystemTimeAsFileTime() в Windows)ticktime32: 32-битное количество тиков ( в Windows)* Lua-интерфейс может испытывать проблемы с 64-битными целыми числами, но библиотека сканера их поддерживает.
Сканирование поддерживает следующие типы сравнения:
min <= check <= max)Кроме того, есть функция обнаружения всех экземпляров следующих типов:
std::mapstd::listGetTickCount()C++ struct)