一种构造合法堆栈返回值绕过函数调用检测的方法与系统技术方案

技术编号:13426472 阅读:76 留言:0更新日期:2016-07-29 14:48
本发明专利技术公开了一种构造合法堆栈返回值绕过函数调用检测的方法,包括:构造递归调用往堆栈中多次压入进程的d3d9.dll模块的代码段中的任一连续两条汇编指令序列pop ebp,retn的地址,其中压入地址的次数大于或等于堆栈检测调用的层数;在往堆栈中多次压入上述地址后,构造系统函数CreateDeviceEx需要的参数并压入堆栈,并往堆栈中再次压入上述地址后,跳转到系统函数CreateDeviceEx。通过构造一个递归调用往堆栈中多次压入进程的d3d9.dll模块的代码段中的任一连续两条汇编指令序列pop ebp,retn的地址,从而在堆栈中压入超过堆栈检测调用层数的合法地址,从而在游戏开发商对调用CreateDeviceEx函数的调用者进行检查时能够通过合法性验证,从而保证直播的正常进行。

【技术实现步骤摘要】
一种构造合法堆栈返回值绕过函数调用检测的方法与系统
本专利技术属于计算机开发
,更具体地,涉及一种构造合法堆栈返回值绕过函数调用检测的方法与系统。
技术介绍
目前,直播软件在直播时都可以预览到直播的内容,获取直播的显示内容都是通过注入一个动态链接库到游戏进程中,注入的动态链接库会hook进程中的d3d9.dll的Present函数来获取显卡的显示内容,为了获取到Present函数的地址,则需要先获取到IDirect3DDevice9Ex的指针,从该指针中获取函数地址,而该指针则可以通过调用CreateDeviceEx函数来获取。但是由于目前很多“外挂”会调用该函数来实现某些“外挂”功能,所以导致游戏开发商会对调用该函数的调用者进行检查,如果不是游戏自身的调用则会判断是“外挂”在调用,从而进行处罚。对于如何检测是谁调用了某函数,则可以利用intelx86的函数调用机制,在函数调用时会使用扩展基址指针寄存器(extendedbasepointer,EBP)和堆栈栈顶寄存器(ExtendedStackPointer,ESP)来保存当前堆栈的栈底地址和栈顶地址。而栈底地址存放着调用此函本文档来自技高网...
一种构造合法堆栈返回值绕过函数调用检测的方法与系统

【技术保护点】
一种构造合法堆栈返回值绕过函数调用检测的方法,其特征在于,包括:构造递归调用往堆栈中多次压入进程的d3d9.dll模块的代码段中的任一连续两条汇编指令序列pop ebp,retn的地址,其中压入地址的次数大于或等于堆栈检测调用的层数;在往堆栈中多次压入上述地址后,构造系统函数CreateDeviceEx需要的参数并压入堆栈,并往堆栈中再次压入上述地址后,跳转到系统函数CreateDeviceEx。

【技术特征摘要】
1.一种构造合法堆栈返回值绕过函数调用检测的方法,其特征在于,包括:构造递归调用往堆栈中多次压入进程的d3d9.dll模块的代码段中的任一连续两条汇编指令序列popebp,retn的地址,其中压入地址的次数大于或等于堆栈检测调用的层数;在往堆栈中多次压入上述地址后,构造系统函数CreateDeviceEx需要的参数并压入堆栈,并往堆栈中再次压入上述地址后,跳转到系统函数CreateDeviceEx;其具体实现步骤为:(1)查找进程的d3d9.dll模块的代码段中的任一连续两条汇编指令序列popebp,retn的地址,其中,在进程的d3d9.dll模块的代码段中查找汇编指令序列popebp,retn对应的16进制就是0x5D,0xC3,即d3d9.dll模块的代码段中查找连续的值为0x5D,0xC3的指令的地址,popebp是用于将堆栈中的值弹出到寄存器EBP中;retn是返回指令,用于从堆栈中弹出返回地址;(2)构造调用系统函数CreateDeviceEx的函数,该函数用于构造系统函数CreateDeviceEx的参数,然后往堆栈中压入步骤(1)所找到的内存地址,并跳转到系统函数CreateDeviceEx;(3)构造递归调用函数,该递归调用函数用于构造递归调用来往堆栈中压入步骤(1)中得到的地址,递归的出口则是调用步骤(2)的函数,其中,所述步骤(2)的函数为调用系统函数Crea...

【专利技术属性】
技术研发人员:周志刚
申请(专利权)人:武汉斗鱼网络科技有限公司
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1