文件名称:堆内存释放bug修复2.0 重写兼容数据执行保护-易语言
文件大小:387KB
文件格式:ZIP
更新时间:2024-07-01 20:14:32
高级教程源码
之前发过一个堆内存释放无效指针导致崩溃 的帖子 这个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、使用自定义指针检测(虽然无法保证这个指针是堆内存的指针,但是问题不大), 测试动图
【文件预览】:
修复堆释放2.0
----修复测试:纯静态.exe(764KB)
----触发测试.e(9KB)
----修复.ec(18KB)
----修复堆释放.e(20KB)