【游戏逆向】检测加速辅助案例分析

加速类辅助会对游戏平衡造成极大的破坏,这类辅助会通过HOOK api的方式来达到修改游戏对时间判断的目的,一般情况下,在R3层,这类辅助会在 QueryPerformanceCounter TimeGetTime GettickCount这三个API上HOOK,修改他们的返回值,本文章讲解一下某游戏平台对此类加速辅助的检测方法。 首先用pchunter看下游戏是否在以上三个API挂钩。
在这里插入图片描述
在该游戏中我们发现只对QueryPerformanceCounter进行了HOOK,我们用OD来看下他的代码(该游戏有简单的反调试,从上图可以看到DbgUiremoteBreakin 被挂钩。在这里插入图片描述
函数头部被跳转到了游戏的检测DLL,跟随看看在这里插入图片描述
Push esi是对esi压栈进行保存,与后面的pop esi对应
进入第一个call在这里插入图片描述
头五个字节是对被HOOK的API头部进行还原,这个call其实就是对QueryPerformanceCounter的正常调用,在这里插入图片描述
然后返回值给esi 再call 300E3BE 这个call应该是对数据的一系列检测,由于代码被VM导致无法正常阅读,这个问题不大,我们只需对原API头部进行还原就可以过掉这个检测,整个过程类似于传说中的CALL检测通过HOOK,检测调用数据判断是否合法。
当然单单还原API头部并不能完全过掉检测,为防止我们还原头部或者加速辅助HOOK该API,游戏对API头部做了字节校验,字节的改动会被检测到。
那么我们可以在API的头部下硬件访问断点,在这里插入图片描述
下面有很多跳转,现在是没有改动头部的字节所以检测是按照正常流程走的,如果改动字节的话应该会跳到其他分支,我们F8往下走在这里插入图片描述
可以看到周围有很多相似的代码,我们正常走下来的是3002B1B0与上个图一样,如果改动了字节则会跳转到周围的那些地方,在这里插入图片描述
那个call ebx调用的是VirtualProtect 参数edi就是他检测的那个地址,往下走F7进入到call 30010FA的内部在这里插入图片描述
[0x3000113D]保存的是VirtualProtect的地址,call esi 两次调用这个API,在这里插入图片描述
Ebx是第一个参数的值,给eax,通过下面一个小循环依次把API前五个字节放到第一个参数的那个地址中,然后调用两次VirtualProtect 然后return在这里插入图片描述
继续单步走在这里插入图片描述
下面movzx eax, word ptr [esi] 后eax值始终是0x34,上面push edi 上面那句是xor ebx,ebx 对ebx清零,后面有 inc ebx 和cmp ebx,eax 很明显我可以得到
如果ebx小于等于 eax 就跳转到 300134E进行判断[edi+0x10]是否等于0 检测开始的情况下他是等于1的 所以进入call 30012B9到达我们刚开始下硬件断点的位置,完成一次检测 ebx就+1,edi+14 检测的API的数量一共是0x34个,[edi+10]对应每个API检测的开关,这时我们只需把每个[edi+10]的值写为0就可以过掉这个游戏对API HOOK的检测了。简单点也可以把这个je直接改成jmp,不过这么做会被游戏另外一个内存检测检测到,这个下篇文章再讲。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

douluo998

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值