首页
论坛
专栏
课程

分享:
## 1.为什么选择使用windbg进行漏洞调试 相比Windbg,在Windows平台做逆向的同学可能更熟悉诸如OllyDbg、x64dbg之类的调试器。 与Windbg相比这些调试器可能更加易用,通过GUI界面和快捷键就可以完成大部分功能。与之相比Windbg其实是一个“半命令行”式的调试器,那我们为什么还要使用windbg呢? 主要是Windbg对于Windows来说有着更为强大的功能(比如可以调试内核和崩溃转储文件,可以解析windows系统结构体,支持远程调试等等),并且微软提供了大量的支持命令,对于Windows系统自身组件的调试以及漏洞调试来说Windbg是首选。 ## 2.如何获取Windbg Windbg在windows驱动开发包(WDK)中有附带,也可以在网上单独下载。 但是对于Windows 10系统来说更推荐在微软应用商店中下载Windbg Preview版,Preview提供了类似于VS调试时的界面体验。 ## 3.调试准备-符号 windbg很好的支持了调试符号,在调试Windows自身组件以及Windows产品——比如IE浏览器时可以通过符号获取更多信息。 windbg提供了两种下载符号的方法。 第一种,可以在windbg的符号路径中直接设置符号服务器的地址,windbg在使用到时会自动下载对应的符号文件。 第二种,windbg目录下提供了symchk.exe(Microsoft Symbol Checker tool),这个程序可以搜索并下载指定模块的符号。 ## 第一种 在Windbg的设置中找到符号路径的选项,由于我们本地未必有符号文件,所以windbg的符号路径是支持远程服务器地址的。当我们在调试过程中有用到一个模块时,windbg会自动搜索并下载这个模块的符号。 路径设置为这种形式 ``` SRV*[保存的本地位置]*符号服务器地址 ``` 比如当我们调试微软的组件时,可以设置为 ``` SRV*c:symbols*http://msdl.microsoft.com/download/symbols ``` 这样windbg就会自动的从微软符号服务器中下载符号,并储存在c:symbols中。 ![TIM截图20180915190220.png-86.7kB][1] ### 第二种 使用symchk 首先通过cmd进入windbg的目录,使用cmd执行symchk。 -s 指定符号的路径 -r 指定要下载目录中的全部模块的符号 因为我们是要下载符号,所以在-s参数后指定符号服务器的地址,我们使用下面这种形式来指定符号服务器的地址,与windbg中相同。 ``` SRV*[保存的本地位置]*符号服务器地址 ``` 举例来说,我们可以使用第一行命令下载mshtml.dll的符号,使用第二行命令下载system32文件夹中所有的模块的符号。 下载的符号均存放于c:symbols中,之后我们指定windbg的符号路径为c:symbols即可。同时,symchk还会在储存目录中生成日志文件,通过这个文件可以获知下载情况。 ``` symchk c:windowssystem32mshtml.dll -s SRV*c:symbols*http://msdl.microsoft.com/download/symbols symchk -r c:windowssystem32 -s SRV*c:symbols*http://msdl.microsoft.com/download/symbols ``` 当然,symchk还提供了很多其他的参数和功能,微软在MSDN中提供了相应的使用文档,如有需要可以查阅:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/symchk-command-line-options 在我们设置好符号之后,可能会发现一些明明在服务器上具有符号的模块在调试时还是没有加载上符号。 这个时候需要使用.reload命令,在使用.reload命令之前我们可以通过拓展命令!sym noisy设置符号加载为详细输出模式。 如果使用.reload命令之后,我们发现有些符号还是没有加载成功,可能是windbg的延迟符号加载导致的。延迟符号加载就是说只有使用到时才会去下载,如果我们想马上就加载所有的符号文件可以使用.reload -f强制下载所有的符号文件。 ## 4.进行调试 windbg提供了两种进程调试方法,一种是直接附加到一个正在运行的进程上,另一种是从一个可执行文件创建进程,其实这是windows调试api提供的两种方法。 windbg目录下提供了两种windbg可执行文件,分别用于调试32位和64位的进程。32位调试器无法调试64位进程,进行调试时需要正确选择版本。windbg preview版不区分x64和x86进程,可以支持这两种进程。此外windbg也提供了arm版本。 ![TIM截图20180915202250.png-65kB][2] 此外,windbg提供了一种名为非侵入式的attach方法,微软对此解释如下,这种方法并不常用只作为解惑。 ``` In noninvasive debugging, the debugger does not actually attach to the target application. The debugger suspends all of the target's threads and has access to the target's memory, registers, and other such information. However, the debugger cannot control the target, so commands like g (Go) do not work. ``` 下一节我们将解释windbg的常用命令和使用方法,由于功能强大windbg的命令实在是浩如烟海,我们只会介绍在漏洞调试过程中能够使用到的命令(比如只能在内核模式使用的命令就不会介绍),至于其他的windbg手册是你的好帮手。 [1]: http://static.zybuluo.com/vbty/gy40rs7x4zfyyzdy1isj4o1p/TIM%E6%88%AA%E5%9B%BE20180915190220.png [2]: http://static.zybuluo.com/vbty/c1jun9psfrb1cp0h35u80u4g/TIM%E6%88%AA%E5%9B%BE20180915202250.png

上一篇 :
下一篇 :
讨论 (1)
沪ICP备16048531号-1
沪公网安备 31011502006611号