11、绕过反外挂(基础):隐藏 Cheat Engine 进程、使用驱动级工具、内核级与用户级逆向的区别
说实话,反外挂这东西,是每个逆向工程师迟早要面对的坎。你想想看,你辛辛苦苦找到了内存地址,写好了脚本,结果一打开游戏,Cheat Engine 直接被干掉——这种憋屈我太懂了。
我个人习惯把反外挂的对抗分成两个层面:用户级和内核级。说白了,一个是在应用层躲猫猫,另一个是直接杀到系统底层去硬刚。今天我们先聊基础的——怎么藏好你的工具,以及这两种级别的逆向到底有什么区别。
核心观点:绕过反外挂的第一步,不是学骚操作,而是理解「你正在和谁打架」。用户级反外挂只是保安,内核级反外挂才是特种兵。
11.1 隐藏 Cheat Engine 进程——最基础的生存技巧
大多数反外挂系统,第一件事就是扫描进程列表。Cheat Engine 的进程名太显眼了,就像穿着荧光衣走进图书馆。所以,我们要做的第一件事就是改头换面。
11.1.1 改进程名和窗口标题
Cheat Engine 自带这个功能。打开 CE,点击 Edit → Settings → Debugger Options,里面有个 Window Title 和 Process Name 的选项。我建议改成 svchost.exe 或者 explorer.exe 这种系统进程名。嗯,这里要注意:别改成 notepad.exe,太假了,反外挂不傻。
// 手动修改 CE 进程名的步骤(我常用的)
1. 下载一个 PE 编辑器(比如 CFF Explorer)
2. 打开 Cheat Engine.exe
3. 修改 Image Name 字段
4. 重新签名(有些反外挂会校验数字签名)
我的小技巧:我曾经直接把 CE 改名为 GoogleUpdate.exe,配合一个假的谷歌更新目录,骗过了某款国产网游的反外挂。但后来他们更新了校验逻辑,这招就不灵了。
11.1.2 使用插件隐藏 CE 特征
光改名字不够。反外挂还会检查 CE 的窗口类名、注册表残留、甚至内存中的特征码。这时候就需要插件了。
我个人推荐 CE 的 ScyllaHide 插件。它不仅能隐藏进程,还能 hook 掉反外挂的检测 API。安装很简单:
- 下载 ScyllaHide 的最新版本
- 把
ScyllaHide.dll放到 CE 的Plugins目录 - 启动 CE,在插件菜单里启用它
你想想看,ScyllaHide 做的事情其实很暴力——它直接拦截了 NtQuerySystemInformation 这个系统调用,让反外挂永远看不到你的 CE 进程。但注意,这招对内核级反外挂基本无效。
避坑指南:我曾经在某个比赛里用 ScyllaHide 隐藏 CE,结果被 EAC(Easy Anti-Cheat)检测到了。后来发现是 ScyllaHide 的版本太旧,EAC 已经更新了检测特征。所以,一定要用最新版的插件,最好是自己编译的。
11.2 用户级 vs 内核级逆向——本质区别在哪?
这个问题我经常被问到。说白了,就是权限和视野的差别。
| 对比维度 | 用户级 (Ring 3) | 内核级 (Ring 0) |
|---|---|---|
| 权限 | 受限,只能访问自己的内存空间 | 无限制,可以访问整个系统 |
| 工具 | Cheat Engine、OllyDbg、x64dbg | WinDbg、驱动调试器、VT 技术 |
| 检测难度 | 容易被反外挂检测 | 极难被检测(除非反外挂也在内核) |
| 开发门槛 | 低,会 C++ 就能搞 | 高,需要懂驱动开发和系统原理 |
| 稳定性 | 崩溃最多影响当前进程 | 蓝屏风险,一崩全崩 |
为什么会这样?因为 Windows 的权限模型就是分层的。Ring 3 的应用程序,说白了就是被关在笼子里的鸟。而 Ring 0 的内核驱动,是站在笼子外面的饲养员。反外挂如果只跑在 Ring 3,那它永远管不到 Ring 0 的东西。
11.3 驱动级工具——杀进内核的入场券
既然用户级容易被抓,那我们就进内核。驱动级工具,说白了就是写一个 Windows 驱动程序,加载到系统内核里。这样你就能绕过所有用户级的反外挂检测。
11.3.1 常用的驱动级工具
- KDU (Kernel Driver Utility):一个开源工具,可以加载你自己的驱动。我经常用它来测试驱动签名。
- EAC 和 BattlEye 的驱动对抗:这些反外挂本身就有内核驱动,所以你需要用更底层的技术,比如 VT(虚拟化技术)来躲。
- 手动加载驱动:用
sc create和sc start命令,或者直接调用NtLoadDriver。
// 一个简单的驱动加载示例(伪代码)
// 注意:这只是演示原理,不要直接用在非法用途
HANDLE hDevice = CreateFileW(L"\\\\.\\MyDriver", ...);
DeviceIoControl(hDevice, IOCTL_HIDE_PROCESS, &pid, ...);
我的经验:写驱动最坑的是签名问题。Windows 10 以上强制要求驱动签名,否则加载不了。我建议用 测试签名模式(bcdedit /set testsigning on),或者买一个合法的 EV 证书。别用那些盗版签名,反外挂厂商早就把那些证书拉黑了。
11.4 内核级逆向的实战技巧
进了内核之后,视野完全不一样了。你可以看到所有进程的内存、句柄、线程,甚至能直接修改系统调用表。但代价也很高——写错一行代码,电脑直接蓝屏。
11.4.1 如何绕过内核级反外挂?
我遇到过最狠的反外挂,是那种直接 hook 了 NtReadVirtualMemory 的。你 CE 一读内存,它就知道有人在搞鬼。怎么破?
- 直接物理内存访问:绕过虚拟内存,直接读物理内存。用
\\Device\\PhysicalMemory这个对象。 - VT 虚拟化技术:用 Intel VT-x 或 AMD-V 创建一个 hypervisor,在虚拟机监视器层面拦截反外挂的检测。这是目前最顶级的对抗手段。
- 修改系统调用表 (SSDT):把反外挂的 hook 给摘掉,或者替换成自己的函数。
警告:内核级逆向不是闹着玩的。我曾经有一次写驱动时忘了释放内存,结果系统直接卡死,数据全丢了。从那以后,我每次写驱动都会先开一个虚拟机测试。你想想看,要是把主力机搞崩了,那损失可不是闹着玩的。
11.5 知识体系总览
下面这张图是我自己整理的,把本章的核心逻辑串起来了。你看一眼就能明白,用户级和内核级到底差在哪。
11.6 本章小结
嗯,绕反外挂这件事,说白了就是一场猫鼠游戏。你藏得越深,反外挂就挖得越深。用户级的隐藏只是基本功,真正的高手都在内核里玩。
我个人建议:如果你是新手,先从隐藏 CE 进程开始,把 ScyllaHide 玩明白。等你觉得用户级不够用了,再考虑写驱动。别一上来就搞内核,蓝屏了别怪我没提醒你。
记住一句话:没有绝对安全的系统,只有还没被发现的漏洞。反外挂如此,逆向工程也是如此。