分享前些时间研究EAC普通版的 和去年BE(Pubg高级版) 反调戏吧 相比国内的反作弊弱势了很多
EasyAntiCheat AntiDebug
AntiHandleHijack:
句柄引用计数检测 由回调添加 进实时监测 <目标进程,句柄> 超过1即 关闭游戏 因直接结束进程 EAC也会跟着退出所以 正常任务管理器没有影响,这也是不关闭游戏直接关机时它会提示有趣的Detected 0x*****的原因了~
AntiDebugThreadAttach:
防止附加 因DebugActiveProcess会创建一条触发int3的线程 来让调试器中断 EAC是这样做的:线程创建检测由内核线程回调检测 如果有ntdlladdress/noimage的地址 直接结束游戏进程并提示
Detected 0x*****
AntiHardBreak:
反硬件断点监测 首先它这里用了两个方法 主逻辑线程由驱动程序手动置位线程的hidedebug位 其他线程调用NtSetThreadInformation
BattlEye 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)
总结:国外反作弊程式并未对反调试做太多检测处理。
COMMENTS | 3 条评论
该评论为私密评论
@Giftia
通常来说这是经验之谈.经验借鉴不了就双机调试看了
请教下大佬,一般这种保护方案要怎么去分析他的内核反调试呢,因为如果对KdDebuggerEnable等一些变量下访问断点的话,系统就会蓝屏,但是其他又没有比较好的思路,困惑很久,大佬能不能稍微解答下