分类
游戏安全

EasyAntiCheat BattlEye AntiDebug

EasyAntiCheat /BattlEye

分享前些时间研究EAC普通版的 和去年BE(Pubg高级版)  反调戏吧 相比国内的反作弊弱势了很多
asyAntiCheat AntiDebugAntiHandleHijack:
句柄引用计数检测 由回调添加 进实时监测 <目标进程,句柄> 超过1即 关闭游戏 因直接结束进程  EAC也会跟着退出所以 正常任务管理器没有影响,这也是不关闭游戏直接关机时它会提示有趣的Detected 0x*****的原因了~
2020/5/8添加 :在EAC高级版本中 创建了线程去检测被保护进程的句柄权限,并禁用了句柄计数检测。

AntiDebugThreadAttach: 
防止附加 因DebugActiveProcess会创建一条触发int3的线程 来让调试器中断  EAC是这样做的:线程创建检测由内核线程回调检测 如果有ntdlladdress/noimage的地址 直接结束游戏进程并提示Detected 0x*****

AntiHardBreak:
反硬件断点监测  首先它这里用了两个方法 主逻辑线程由驱动程序手动置位线程的hidedebug位 其他线程调用NtSetThreadInformationBattlEye AntiDebug (Pubg/H1z1)Pubg的反调试在我研究时 相比较H1z1的反调试弱一些 同时并没有EAC对句柄计数的检测,而是内核中直接遍历某些进程的句柄权限 剥离权限.时间有些久可能有些疏漏

AntiHandleHijack:
内核遍历lass等进程剥离其相关权限,csrss采取的是挂钩进入它的内核 检查返回地址 如果有问题bsod.

AntiDebug:
句柄异常检测/CloseHandle(x)如果挂接了调试器 那么内核会模拟一条异常.通常调试器 选择忽略所以被检测系统拦截到 由此检测到调试。
H1z1利用了异常来作为进入游戏时的Dx相关初始化措施 如果触发会爆炸

AntiHardBreak:
调用NtSetThreadInformation  Thread.hidedebug位
其他的都是差不多通用了:

…NtQueryProcessInformation …Peb.Debug
2019.4.19 补充 EAC :AntiCreateThread-RtlUserThreadStart ->Jmp PtrTo(EAC Replace Here) BaseInitializeContext (CONTEXT* pContext, PPEB pPeb, PVOID pEntryPoint, DWORD dwInitESP, DWORD dwEipType)

2020.6.2 补充 EAC高级版(V3) 在其驱动程序中调用PsGetProcessDebugPort/PsIsProcessBeingDebugged 检测用户模式调试.
在其所有 用户模式反作弊模块中 有疑似利用ProcessInstrumentationCallback(具体看:https://blog.renjing.wang/698.html)检测调试器

总结:国外反作弊程式并未对反调试做太多检测处理.
0 0 vote
文章评分

由FAKE

Через тернии к звездам,
через радость и слезы
Мы проложим дорогу

Subscribe
提醒
guest
3 评论
Inline Feedbacks
View all comments
Giftia
Giftia
游客
2019年2月19日 上午7:03

你是怎么查看EAC hook的呀
我上pchunter 被检测根本加载不了驱动
也没法换自己的签名
大佬可以给个思路吗

只会666的菜鸡
游客
2019年5月5日 下午4:35

请教下大佬,一般这种保护方案要怎么去分析他的内核反调试呢,因为如果对KdDebuggerEnable等一些变量下访问断点的话,系统就会蓝屏,但是其他又没有比较好的思路,困惑很久,大佬能不能稍微解答下