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,只需从 32位开发者命令提示符 (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 命令提示符 (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位时间戳(Windows 上的 GetSystemTimeAsFileTime())ticktime32:32位滴答计数(Windows 上的 GetTickCount())* Lua 前端可能在处理 64 位整数时出现问题,但扫描器库支持它们。
扫描支持以下匹配类型:
min <= check <= max)此外,还有检测以下所有类型实例的功能:
std::mapstd::listC++ struct)