之前发过一个堆内存释放无效指针导致崩溃的帖子 这个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、使用自定义指针检测(虽然无法保证这个指针是堆内存的指针,但是问题不大), 
测试动图 
下载链接:https://t00y.com/file/20110282-443061081
|