- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)