对BattleEye拦截DLL注入的绕过

BattleEye有一个EAC与TP不具备的特性,那就是拦截DLL注入。

BattleEye注册了一个minifilter用其自定义的白名单策略过滤每一个加载进入游戏的DLL。

secret.club提出了一种纯ring3的绕过方式。

https://secret.club/2020/02/26/be_umode.html

不过当BEService转到syscall实现功能(必定附带VM),这个方法将会失效。

或者

也有一种内核级的绕过方式,首先挂起BE驱动的线程,其次劫持系统minifilter回调表中BE注册的回调,待注入DLL完毕后恢复劫持,恢复驱动线程。

此方法最稳定,但是这种攻击需要对每个内核版本进行适配。而且BE会有一个短时间的心跳超时。

于是本文提出另一种绕过方式,ring0级

minifilter拦截DLL加载实际上是通过使NtCreateSection失败实现的。

NtCreateSection 是操作系统装载DLL的一个重要过程,操作系统在ntdll里面实现DLL的装载过程中需要用到此函数生成的句柄。

于是存在一种绕过,即被注入程序不进行 NtCreateSection 操作确能获得句柄即可。

https://github.com/MoePus/AntiBEAntiDllInjection

我实现了一种不进行 NtCreateSection却得到句柄的方式。同理利用子进程取句柄,或者在内核中Hook(或ETW HOOK)均可实现注入。

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据