易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

堆内存释放bug修复2.0 重写兼容数据执行保护   [复制链接]

    2019-08-22 09:06:02
    高级教程源码
    易语言资源网
    2912 次浏览
    来源链接

之前发过一个堆内存释放无效指针导致崩溃的帖子

这个bug win的dll也是存在的 貌似17年也有人发过帖子利用这个bug可以进行页覆盖执行shellcode前不久看到的攻击漏洞

但是这个bug正常使用中触发几率非常非常小,可能被window忽略了

但是这些bug一旦触发却会影响我们的程序,比如一些莫名其妙的崩溃,也许时它造成的。

距离发那个帖子也有很长时间了,不知道新版易语言有没有添加检测了 或者 微软有没有修复了

但是用低版本的还是有的,比如我

由于原帖的修复补丁采用的时shellcode方式,在系统开启了数据执行保护就直接崩溃了

因为一直懒得写,就没有再发,因为这个修复确实有点简单了就hook一下。

好吧,多人反馈崩溃,今天就重写了个,编译性的静态hook,不再使用内存执行,兼容数据执行保护的

其实也是很简单的,虽然我这里只写了只能安装MOV edi,edi栈帧头 开头的,

(静态无冲突hook的实现): 原理是很简单的,无非就是利用编译所生成的程序内存,因为在这块内存执行EDP是不会冲突的,完全可以预留一块内存并直接修改使用,但是要实现高速执行需要考虑到对齐的方式,这里就不再详细说了。

当然,我这里写的hook仅针对于这个堆内存释放api了所以里面是没有静态且无冲突hook安装的动态实现的。这里面是静态实现了。

更新内容:

1、不再使用内存执行

2、不再使用HeapSize进行指针检测(因为HeapSize api也有bug的 检测不对劲的指针也会崩溃,不知道是特权指针还是什么指针的问题。。反正我没弄明白,指针是正常的就是崩了,可能是缺少了点什么东西。)

3、使用自定义指针检测(虽然无法保证这个指针是堆内存的指针,但是问题不大),

测试动图



点我下载 (已有 125 次下载)

引用模块


源码文件名 模块文件名
触发测试.e
修复.ec


引用支持库


源码文件名 支持库文件名 支持库标识
修复堆释放.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0
触发测试.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0


[错误报告]   上一篇:利用 RtlWalkFrameChain...     下一篇:炫彩界面库_多彩进度条...