工具下载

CE源码

Lazarus 2.2.2

HxD

VMP 密码:6666 解压密码:52pojie

修改并编译CE

更改驱动名称

许多反作弊系统会通过黑名单驱动名称”dbk64.sys”来阻止Cheat Engine运行,因此我们需要修改这个名称。

    1. 打开下载的Cheat Engine源代码文件夹
    1. 导航至Cheat Engine -> dbk32目录
    1. 找到DBK32function.pas文件并用文本编辑器(如vscode)打开
    1. 搜索字符串dbk64.sys
    1. servicename修改为其他名称
    1. 同时修改dbk64dbk32的sysfile名称,例如改为mynewdriver64.sysmynewdriver32.sys

随机窗口名称

Cheat Engine主文件夹,找到cheatengine.lpi文件并用Lazarus打开

工程 -> 单元搜索并打开MainUnit2.pas,搜索cename,定位到要修改的行数

生成随机字符串函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function GenerateRandomString(StringLength: Integer;
CharSet: String = ''): String;
const
// 默认包含大小写字母、数字和常用特殊字符
DEFAULT_CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+-=[]{}|;:,.<>?';
var
i, CharIndex: Integer;
begin
Result := '';
// 如果未提供字符集,使用默认字符集(包含特殊字符)
if CharSet = '' then CharSet := DEFAULT_CHARSET;
if CharSet = '' then Exit; // 防止空字符集

// 生成随机字符串
for i := 1 to StringLength do
begin
CharIndex := Random(Length(CharSet)) + 1;
Result := Result + CharSet[CharIndex];
end;
end;

项目选项设置

    1. 点击工程-> 工程选项
    1. 应用程序选项卡中:
    • 修改“标题”(原为”Cheat Engine Version“)
    • 点击Clear Icon清除图标(可选添加新图标)
    • 修改“名称”原为”Cheat Engine”)
    1. 版本信息选项卡中修改CompanyNameFileDescription
    1. 在**”编译器选项 -> 路径”**中:
    • 选择**”Release 64-Bit”**构建模式
    • 修改”目标文件名称 (-0)”中的”cheatengine”
    • 对**”Release 64-Bit O4 AVX2”**模式重复相同操作
    1. 点击”确定”保存设置

编译

运行 -> 清理和构建,点击”清理和构建”开始编译

使用HxD修改Cheat Engine字符串

编译完成后,在”Cheat Engine -> bin”目录中找到生成的exe文件,使用HxD修改残留字符串。

    1. 下载安装HxD编辑器
    1. 将编译好的exe文件拖入HxD
    1. Ctrl+R 替换
    1. 确保勾选**”从头”和”区分大小写”**
    1. 替换以下字符串(注意保持相同长度):
    • “Cheat Engine” → “Mynew Engine”(11字符+1空格)
    • “cheat engine” → “mynew engine”
    • “cheatengine” → “mynewengine”
    • “CheatEngine” → “MynewEngine”
    • “cheatEngine” → “mynewEngine”
    • “cheat Engine” → “mynew Engine”
    1. 对”Unicode (UTF-16 little endian)”编码重复上述替换
    1. 保存修改

使用VMProtect保护程序

VMProtect可以进一步增强Cheat Engine的安全性,使其更难被反作弊系统通过特征码检测。据测试,还能使Cheat Engine绕过FiveM反作弊系统的检测。

  1. 保护程序
    • 打开VMProtect
    • 将编译好的Cheat Engine可执行文件拖入程序窗口
  2. 设置保护选项
    • 点击”添加进程”添加函数
    • 选择”EntryPoint”入口点,点击”添加进程”
    • 双击”编译类型”选项直到显示”超级 (变异 + 虚拟)”
    • 点击”选项”
    • 双击”调试器”选项直到显示”User-mode + Kernel-mode”
    • 双击”虚拟化工具”选项直到显示”是“
    • 双击”移除重定位信息”选项直到显示”是“
  3. 开始编译
    • 点击箭头按钮开始保护过程
    • 完成后会在”Cheat Engine -> bin”目录生成”*.vmp.exe”文件
    • 建议使用这个经过保护的文件进行操作

使用Lua脚本修改内部字符串(可选)

如需彻底修改Cheat Engine内部所有字符串(最大程度避免特征检测),可以使用以下Lua脚本:

操作步骤

  1. 打开Cheat Engine
  2. 进入”Memory View”内存视图
  3. 选择”Tools” -> “Lua Engine”打开Lua引擎
  4. 复制以下代码并粘贴到输入框中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function renameComponents(c)
local i
if c.Component then
for i=0,c.ComponentCount-1 do
renameComponents(c.Component[i])
end
end

if c.Caption then
c.Caption='WTF'
end
end

for i=0,getFormCount()-1 do
local form = getForm(i)
for j=0,form.ControlCount-1 do
renameComponents(form)
end

form.Caption='Bla'
end

registerFormAddNotification(function(f)
f.registerCreateCallback(function(frm)
renameComponents(f)
end)
end)
  1. 点击”Execute”执行脚本
  2. 执行后,Cheat Engine内部大多数字符串将被替换为”WTF”

注意事项

  • 此步骤并非必须,仅推荐给追求最高隐蔽性的用户
  • 修改字符串可能影响部分功能的正常显示

驱动编译

Visual Studio 2019 + SDK + WDK开发环境

  1. 下载Visual Studio 2019
    • 访问微软官网下载Community 2019版本
    • 安装时勾选**”使用C++的桌面开发”**
  2. 安装必要组件
    • 在”单个组件”选项卡中搜索**”142 x64”**
    • 勾选以下关键组件:
      • MSVC v142构建工具(最新版)
      • C++ ATL库(含Spectre缓解措施)
      • C++ MFC库(含Spectre缓解措施)
  3. 安装Windows 10 SDK
    • 下载版本2004(10.0.19041.0)
    • 完成标准安装流程
  4. 安装WDK驱动开发包
    • 下载对应版本2004的WDK
    • 安装时确保勾选**”安装Windows Driver Kit Visual Studio扩展”**

修改并编译CE驱动(DBK)

驱动编译准备:

  1. 打开Cheat Engine源代码中的DBKKernel.sln解决方案文件
  2. 在解决方案资源管理器中找到DBK64.inf文件

关键修改项:

  1. 重命名驱动
    • 使用替换功能(CTRL+H)将所有”DBK64”替换为步骤更改驱动名称中自定义的名称
    • 修改ManufacturerName="Cheat Engine"为自定义信息
  2. 项目配置
    • 右键项目→属性→配置为”Release without sig”和x64平台
    • 在”常规”修改”目标文件名”为自定义驱动名
    • 清除”生成事件 -> 生成后事件 _> 命令行”中的所有内容
  3. 测试证书创建
    • 在”Driver Signing _> Test Certificate”中创建测试证书
    • 应用所有更改

编译驱动:

  1. 选择”Release without sig”和x64配置
  2. 点击”生成”→”生成解决方案”
  3. 编译完成后在bin目录获取.sys驱动文件

绕过驱动签名验证(DSE/EFIGUARD)

注意:Efiguard已被部分反作弊系统检测

制作EFIGuard启动U盘

  1. 下载EfiGuard
  2. 准备FAT32格式的U盘:
    • 通过磁盘管理工具删除原有分区
    • 新建简单卷并选择FAT32格式
  3. 部署EFI文件:
    • 将工具包中的EFI文件夹复制到U盘
    • 重命名Loader.efibootx64.efi

驱动签名验证操作流程

  1. 从U盘启动进入EFIGuard环境

  2. 在Windows中打开管理员CMD:

    1
    2
    cd /d "EfiGuard文件夹路径"
    efidsefix.exe -d # 禁用驱动签名强制
  3. 启动修改版Cheat Engine:

    • 设置→调试器选项→启用**”Use kernelmode debugger”**
    • 在Extra中启用所有4个选项
    • 确认顶部显示**”DBK64 LOADED”**
  4. 重新启用签名验证:

    1
    efidsefix.exe -e  # 游戏启动前必须执行

模块名称显示修复脚本

当使用DBK驱动时,某些反作弊系统会阻止显示游戏模块名称。以下是解决方案:

  1. 执行脚本:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    symbols = createSymbolList();
    symbols.register();

    function onOpenProcess(pid)
    symbols.unregister();
    symbols = createSymbolList();
    symbols.register();

    reinitializeSymbolhandler();

    if (pid == 4) then
    return;
    end

    local proc = dbk_getPEProcess(pid);
    --printf("proc: %08X", proc);

    local peb = readQword(proc + 0x550);
    --printf("peb: %08X", peb);

    local ldr = readQword(peb + 0x18);
    --printf("ldr: %08X", ldr);

    local index = readQword(ldr + 0x10);
    --printf("index: %08X\n", index);

    while (index ~= ldr + 0x10) do
    local mod = readQword(index);
    --printf("mod: %08X", mod);

    local name = readString(readQword(mod + 0x58 + 0x8), readSmallInteger(mod + 0x58), true);
    --printf("name: %s", name);

    local base = readQword(mod + 0x30);
    --printf("base: %08X", base);

    local size = readInteger(mod + 0x40);
    --printf("size: %04X\n", size);

    symbols.addModule(name, "", base, size, true);

    index = readQword(mod);
    end

    local name = readString(proc + 0x5A8, 15);
    --print("name:", name);

    local base = readQword(proc + 0x520);
    --printf("base: %08X", base);

    local size = readQword(proc + 0x498);
    --printf("size: %04X", size);

    symbols.addModule(name, "", base, size);

    reinitializeSymbolhandler();

    --print("finished!");
    end
  2. 常见问题解决:

    • 若出现冻结/崩溃,修改以下代码:

      1
      2
      3
      4
      5
      -- 原始代码
      while (index ~= ldr + 0x10) do

      -- 修改为
      for i=1, 150 do -- 限制循环次数防止死循环
  3. 使用效果:

    • 重新附加到游戏进程后
    • 内存视图将显示完整的模块列表
    • 支持基址+偏移量的标准操作方式

DBVM原理与应用

虚拟化技术核心原理

层级架构(Ring模型)

层级 权限级别 典型组件 反作弊检测强度
Ring -1 硬件虚拟化 DBVM超级监视器 极难检测
Ring 0 内核态 反作弊驱动/CE驱动 中等检测
Ring 3 用户态 游戏客户端/CE主程序 易检测

虚拟化工作原理

1
2
3
4
5
6
graph LR
A[物理硬件] --> B(DBVM超级监视器)
B --> C[Host OS]
B --> D[游戏虚拟机]
D --> E[反作弊系统]
C --> F[Cheat Engine]

关键特性:

  • 硬件级隔离:直接在CPU虚拟化扩展(Intel VT-x/AMD-V)上运行
  • 内存隐身:通过扩展页表(EPT)实现透明内存访问
  • 中断劫持:完全控制所有硬件中断处理

DBVM使用

组件获取:

  1. 获取预编译镜像:
    下载官方CE获取vmdisk.img
  2. 文件存放路径:
    1
    Cheat Engine/bin/vmdisk.img

配置流程:

  1. 启用虚拟化支持:
    打开设置->调试器选项选择”Use DBVM-level debugger”,帮助->关于->点击支持检测
  2. 验证安装状态:
    • 成功标志:CE界面显示 “DBVM active (Version x.x)”
    • 失败排查:
      • BIOS中开启VT-x/AMD-V
      • 禁用Hyper-V等竞争技术
        1
        bcdedit /set hypervisorlaunchtype off