-
-
[求助]堆溢出可跳跃?
-
发表于:
2013-3-26 17:59
4473
-
学生一枚,作业中需要实现一个堆溢出检测器,HOOK了内存分配函数,用虚拟堆的方法,在申请的时候多申请了几个空间,大概如下:
头部哨兵+用户缓冲区+尾部哨兵
用户缓冲区是返回给用户的,而头尾哨兵则是通过某个key和每个堆的首地址进行简单异或加密,每次监控的时候则计算尾部哨兵是否正确从而判断是否溢出。
老师说这样不安全,检测器本身会被绕过,首先是尾部哨兵是否是不可预知的,其次是尾部哨兵长度确定(4个byte)能被跳过。
针对第一个问题,我改进后就是key是在检测器每次运行时通过rand随机获得,然后因为尾部哨兵会根据堆首地址不同而不同,所以这样异或下去,布置到是否算是不可预知?
另一个问题比较纠结,老师说如果知道尾部哨兵的长度能直接跳过去溢出,不理解。求前辈指教(不理解,堆溢出就是堆缓冲区溢出吧,然后是通过strcpy之类的不安全函数导致的,而这些函数貌似没看到可以跳过拷贝数据的,真心怀疑自己智商余额不足……郁闷)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)