Vista下动态开启Local kernel Debug的实现与分析.doc

Vista下动态开启Local kernel Debug的实现与分析.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Vista下动态开启Local kernel Debug的实现与分析

Vista下动态开启Local kernel Debug的实现与分析 ConTrail Vista出来好一阵了,各位内核爱好者一定很想仔细的探究一下Vista的内核里面有了哪些新调用、新函数和新功能。我们平时最常用的内核调试方式自然非Windbg的Local Kernel Debug莫属,VM双机调试严重占用系统资源,经常会卡死以及跑飞等,支持Vista的第三方调试器如Syser等则还存在各种各样的bug。只有WinDbg简单方便、安全稳定而且占用资源少,但是在Vista下却默认不支持Local Kernel Debug功能,必须运行“bcdedit -debug on”命令并且重启之后才行。而我们都知道,一个以调试模式启动的Windows和一个正常启动的Windows有很多地方是不一样的,我们需要的是调试一个正常的Windows,而不是Debug模式的Windows。很幸运地在网上找到一个国人写的工具:VistaLKD能够很好的实现我想要的功能。这么cool的软件我当然想知道它是怎么实现的,于是就简单地逆向了一下它的驱动,知其然还要知其所以然,这样才能不断进步嘛:-) 用IDA打开VlkdKnl.sys慢慢分析。从DriverEntry开始,先是一小段打印作者及版权信息的UnicodeString赋值及DbgPrint,然后就到了Sub_10486,跟进去看一下,很容易就看到IoGetCurrentProcess、_strnicmp和字符串“System”。经常进行内核编程的同学应该一眼就能看出这个就是大名鼎鼎的GetProcessNameOffset()函数。返回刚才的DriverEntry里,把Sub_10486给Rename成GetProcessNameOffset,再把它的返回值dwrod_112e0给改成Offset。接下来的这个Sub_101c4让我郁闷了好久,在这个Sub里一开始先获得KdSystemDebugControl的地址,然后sub_10990这个函数太复杂了,即便是用了传说中的F5插件(Hex-Rays decompile plugin)也很麻烦,很难理得清楚。不过里面一大堆16进制的数据和cmp指令,很容易看出来是在搜特征码。在这儿我用了一个比较取巧的方法,就是动静结合。先静态反汇编ntkrnlpa.exe里面的KdSystemDebugControl函数,然后使用这个工具开了Local Kernel Debug再动态反汇编KdSystemDebugControl函数,再对比代码,就很容易看出这个函数的操作了。 我的ntkrnlpa.exe文件版本为6.0.6001.18145,ntkrnlpa.exe里面的KdSystemDebugControl函数反汇编代码如下: push 0F4h push offset dword_464AA0 call __SEH_prolog4 xor ebx, ebx mov [ebp+var_28], ebx mov [ebp+var_20], ebx mov [ebp+P], ebx cmp ds:byte_71BFEA, bl jnz loc_6810FB cmp byte_4F6E67, bl jnz loc_6810FB cmp KdDebuggerEnabled, bl jz loc_6810FB loc_6810FB: mov eax, 0C0000022 call __SEH_epilog4 retn 1Ch 下面是使用了工具VistaLKD之后的KdSystemDebugControl函数反汇编代码: lkd u KdSystemDebugControl l20 nt!KdSystemDebugControl: 81a97bc5 push 0F4h 81a97bca push offset nt! ?? ::FNODOBFM::`string+0x6910 (8187baa0) 81a97bcf call nt!_SEH_prolog4 (8186a588) 81a97bd4 xor ebx,ebx 81a97bd6 mov dword ptr [ebp-28h],ebx 81a97bd9 mov dword ptr [ebp-20h],ebx 81a97bdc mov dword ptr [ebp-24h],ebx 81a97bdf jmp

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档