游戏,是我们在日常生活中经常进行的一项娱乐活动;那么中所周知,某四字游戏外挂泛滥,各种类型的外挂百花齐放,内核挂,直装挂,文件挂,这些都是什么意思呢?
先说结论,安全性内核挂>直装挂≈文件挂(不挂防封端口)
那么,为啥内核挂这么难封禁呢?
一、什么是内核加载外挂?
内核加载外挂指的是通过加载内核模块(如 Linux 系统中的 .ko
文件)将外挂的功能集成到操作系统的内核空间中。加载成功后,外挂程序运行在 EL1 权限级别,这是用户通过解锁bootloader能拿到的最高权限,能够直接操作硬件资源和操作系统核心功能。
二、内核外挂的主要特点
- 高权限运行
- 内核态代码运行在 EL1,能够完全控制系统资源,包括内存、设备驱动等。反作弊程序(通常运行在用户态,安卓系统的反作弊系统无法取得root权限进行更深入的扫描,只能进行有限的内存扫描)在权限上处于劣势,无法直接对抗内核态程序。
- 直接操作系统资源
- 内核外挂可以直接操作内存、隐藏进程、修改系统调用表(syscall table),甚至屏蔽反作弊程序的功能。
- 隐蔽性强
- 内核模块在运行时可通过技术手段自我隐藏,例如从内核模块列表中移除自身、隐藏文件和进程。这些手段使得反作弊系统难以察觉其存在。
三、外挂以内核形式加载的优势
1. 绕过用户态检测机制
大多数反作弊系统运行在用户态EL0,它们通过检测用户态程序的行为、扫描进程和内存等方式发现外挂。然而,内核态程序在更高的权限级别运行,反作弊系统很难直接访问或控制内核态的内容。
- 用户态与内核态隔离: 用户态程序无法直接查看内核态内存,这种权限隔离使得内核外挂不易被传统的扫描方式发现。
- 免疫常规检测: 内核外挂可通过 Hook 系统调用,伪造内存、文件等检测结果,迷惑反作弊系统。
2. 隐藏行为轨迹
内核外挂可以通过以下方式隐藏自身行为:
- 隐藏进程: 修改任务结构链表(task_struct list)以移除外挂相关进程。
- 隐藏文件和网络连接: Hook 文件系统和网络堆栈相关函数,屏蔽外挂使用的文件和端口。
- 动态卸载: 任务完成后卸载自身,避免留下任何痕迹。
3. 更强的功能控制
内核外挂不仅能实现用户态外挂的所有功能,还能进一步:
- 直接修改游戏内存: 绕过游戏的保护机制,直接对关键内存区域进行读写。
- 控制硬件输入: 模拟触摸屏操作(dev/input),避免被用户态程序检测到的输入异常。
4. 更低的资源消耗
内核态程序通常直接操作底层硬件和内存,无需像用户态程序那样频繁调用系统 API,从而减少了运行时的资源占用,这也间接降低了被察觉的可能性。例如反截屏功能,是因为外挂程序直接对接了GPU驱动的vk功能,避免调用了安卓系统的相关API,所以录屏和截屏全看不到挂的窗口
在这种情况下(尤其是安卓系统),只要挂没有写入内存的相关操作,只是读取内存,无论是HIT还是各家的安全系统均无法通过内存检测来查看是否开挂,因为本质上透视这些功能是不需要写入内存的,锁头类似功能也只是通过模拟触摸屏来实现,而不是通过安卓系统的无障碍API来实现,这些也加大了内核挂的审查难度
所以,因为安卓和Linux设备权限不足以扫描内核模块(LKM),内核挂几乎不会被扫描检测,反作弊程序只能靠有限的环境检测来实现,包括检测zygote注入,但是均没有多少效果,真正还是要靠人工核查来实现精准封禁