注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mie

 
 
 

日志

 
 

驱动蓝屏  

2011-01-10 17:09:01|  分类: 驱动 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
不断蓝屏,我已经束手无策了。凡是我能够想到的方法,我都给用上了,还是无法解决。看来,只有一种解释,驱动所用到的技术破坏了windows系统的内存管理,导致一系列奇怪的问题。

http://www.chiphell.com/forum-viewthread-action-printable-tid-17553.html
这里是类似的问题。可以推断,他是中毒了,而且病毒使用的过杀毒软件的技术和我的方法相同。可能病毒作者没有像我这样测试过,所以没有发现这个问题。

应该就是堆栈被破坏。否则,不会出现这么多奇怪的问题。刚刚还发现,运行过程中,居然关机了!这说明,由于堆栈被破坏,系统居然执行了关机的代码。

2010.01.10
换成APC方式。原以为APC方式应该没有问题了。

我构造了这样一段shellcode,用来对其他进程进行内科手术:
        "\x55"
        "\x8B\xEC"
        "\xB8\x86\x74\x52\x31"    //mov eax, 函数地址;
        "\x68\x86\x74\x52\x31"    //push 返回值压栈;
        "\x68\x86\x74\x52\x31"    //push 函数参数;
        "\xFF\xd0"                //call eax;
        "\x5B"                    //pop ebx
        "\x89\x03"               //mov [ebx],eax   //保存返回值到新的地址
        "\x8B\xE5"                    //
        "\x5D"             //
        "\xC3"                    //ret
这段代码是没有问题的,但是执行之后居然导致进程崩溃。

于是我就下断点,然后步调。结果发现,代码还没有执行完,这段shellcode内存区域就被填零了!这段内存是我自己分配的,此后我一直没有进行任何操作,怎么会被填零呢!

——原来是APC异步调用还没有完成,此时系统居然执行了APC回调,我在APC回调里面回收了内存,导致系统蓝屏崩溃。——于是,把内存分配的非分页内存单元大小改为大约4KB,解决!

至此,APC方式的蓝屏问题解决。
根据WDK开发文档的说明,当请求非分页内存时,内存大小必须是大于4KB。由此,可以推断,当小于4KB时,系统很可能直接分配了分页内存,或者从其他内存单元中查找适合的内存页,而不是重新分配。

看来,还是得阅读内核源码,要不然还真有点费力。——缺的就是时间。

——APC方式并不能注入到某些杀毒软件进程里面,所以,本方法仅供其他用途,后面继续研究。

注:APC方式可能会导致内存泄露。我的代码中,APC回调函数并非每次都被调用。而APC回调函数里面有内存回收的代码。内存没有回收,长时间运行,对电脑的运行速度有严重影响。
  评论这张
 
阅读(899)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016