首页
社区
课程
招聘
[求助]函数堆溢出保护
发表于: 2014-1-1 19:36 4289

[求助]函数堆溢出保护

2014-1-1 19:36
4289
最近在做一个函数,在函数外new一个buffer,然后传递buffer的地址和长度到函数内,函数读取外部的脚本执行对buffer的加密,因为脚本提交用户较多,很难实现脚本全部审核,问题是执行脚本的时候怕脚本控制的这个函数更改了指定buffer以外的内存数据或指令,有什么方案可以控制函数只允许针对指定内存区域进行操作吗?或者检测到操作地址非法直接返回错误。
函数内要求可以对指针进行strcpy...之类的指令操作,以及mov [lpBuffer],eax之类的汇编指令操作。所以可能HOOK无法满足要求。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
用户提交的这个脚本是怎么一个形式。 是可以直接访问内存的吗?

如果是你定义的脚本,那么你可以规定他的内存访问操作。对每次内存访问进行限制?

这样效率会降的厉害。
2014-1-1 21:13
0
雪    币: 148
活跃值: (59)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
申请buffer时大小设置4096(页大小,此值可动态查询)的整数倍,如果溢出,就会立刻触发读写异常,然后加个seh来捕获。
假如你申请4000大小,如果溢出了1个字节,release版时是不会有异常的(debug版释放时会有异常),因为实际分配的buffer是页大小。所以buffer要申请页大小整数倍。
不知道说的对不对,等大牛回答
2014-1-1 23:45
0
雪    币: 123
活跃值: (95)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
脚本里面可以使用lpBuffer+offset这种当时指定地址,原本准备限制offset的值必须小于buffer长度,但是就如2楼说的效率下降太多了,有空验证下3楼的异常方式。
2014-1-2 07:55
0
游客
登录 | 注册 方可回帖
返回
//