【技术实现步骤摘要】
一种构造合法堆栈返回值绕过函数调用检测的方法与系统
本专利技术属于计算机开发
,更具体地,涉及一种构造合法堆栈返回值绕过函数调用检测的方法与系统。
技术介绍
目前,直播软件在直播时都可以预览到直播的内容,获取直播的显示内容都是通过注入一个动态链接库到游戏进程中,注入的动态链接库会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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。