-
-
[原创]手动伪造调用栈,对抗堆栈回溯,支持R0/R3,附源码
-
-
[原创]手动伪造调用栈,对抗堆栈回溯,支持R0/R3,附源码
堆栈回溯往往可以用来检测敏感API的调用方信息:
检测无痕注入(ShellCode远程Call):
对某国产摸金搜打撤游戏的外挂样本分析后,发现该外挂为手动映射(Manual Map)注入DLL到游戏进程。
通过调用虚幻(UE)引擎相关接口,实现绕过Object指针加密、坐标加密,并利用引擎射线检测(LineTraceSingle)进行掩体判断等,实现各种破坏游戏平衡性的功能。
对部分敏感API进行堆栈回溯,对于不在白名单内的调用方,可将异常调用信息记录并上报至服务端。
该外挂样本的分析工作已基本完成,后续有空会考虑发出来,感兴趣的朋友可以点个关注。
检测无模块驱动:
在如今游戏安全、内核对抗中为了隐藏驱动特征,这类方案通常会分为两层,外层驱动仅作为MapLoader(WHQL或未被AC拉黑的签名)负责PE映射、重定位表与导入表修复等操作,内层功能模块则以Shellcode或无模块映像的形式驻留/执行于内核态(R0),此时常见内核枚举/ARK工具无法在驱动列表中找到该驱动。
此时进行堆栈回溯,一旦回溯到调用方不存在于任何合法的模块范围内,可将该异常调用链记录并上报至服务端。
如下为效果图:


这里需要实现一个汇编函数,作为Wrapper使用,并充当一个通用的函数调用器,其功能如下:
汇编代码如下:
遍历系统中的驱动模块,随机选取一个正常加载的模块,在其模块范围内搜索代码空洞,搜索成功后将ShellCode写过去,但需要注意以下内容:
此方案理论上同时支持R0、R3,实现代码大同小异,R0层完整源码已经开源,测试环境为Win10 19044,Github仓库地址Shinn-Home/CallStack_Spoof,欢迎感兴趣的朋友点个Star。
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!