OD: Windows Kernel Debug

内核调试入门

内核程序运行在内核态,因此不能像对用户态应用程序那样来调试。关于内核调试方面的知识请参考《软件调试》这本书。目前内核调试主要有以下三种方法。

一是使用硬件调试器,它通过特定的接口(如 JTAG)与 CPU 建立连接并读取它的状态,例如 ITP 调试器。

二是在内核中插入专门用于调试的中断处理函数和驱动程序。当操作系统内核被中断时,这些中断处理函数和驱动程序接管系统的硬件,营造一个可以供调试器运行的简单环境,并用自己的驱动程序来处理用户输入、输出,例如 SoftICE 和 Syser 等调试器。

三是在系统内核中加入调试支持,当需要中断到调试器中时,只保留这部分支持调试的代码还在运行,因为正常的内核服务都已经停止,所以调试器程序是不可能运行在同一个系统中的,因此这种方法需要调试器运行在另一个系统中,二者通过通信电缆交流信息。

Windows操作系统推荐的内核调试方式是第三种,这种方法需要在被调试系统和调试系统之间建立连接,迄今为止共有三种连接方式:串行口、1394 和 USB2.0。

起初,内核调试大多通过双机调试进行。随着虚拟机技术的广泛使用,双机调试逐渐被虚拟机调试所取代。本节介绍一种非常方便的虚拟机内核调试方法—— "利用命名管道(Named Pipe)模拟串行端口"。具体地说,就是在虚拟机中虚拟一个串行端口,并且把这个串口映射到宿主机的命名管道上。这样一来,虚拟机中所有对该串口的读写操作都会被虚拟机管理软件转换为对宿主系统中的命名管道的读写,运行在宿主系统中的调试器便可以通过这个命名管道来与虚拟机中的内核调试引擎进行通信。

这种虚拟机调试内核的方法实现了单机调试,其优点是简单方便,但也存在一些缺点,一是难以调试硬件相关的驱动程序;二是当对某些涉及底层操作(中断、异常或者 I/O)的函数或指令设置断点时,可能导致虚拟机意外重启;三是当将目标系统中断到调试器中时,目前的虚拟机管理软件会占用非常高的 CPU,超过 90%。不过总的来说,这种调试方法足以调试目前公布的内核漏洞了。

下面我们来介绍一下,如何使用 WinDbg 和 VMware 来实现这种方法的调试。VMware Support 中提到,自 4.0.18.0 版本之后的 WinDbg 都支持了通过 pipe 来进行调试。

时间: 2024-10-02 20:42:04

OD: Windows Kernel Debug的相关文章

Linux Kernel - Debug Guide (Linux内核调试指南 )

http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环

Windows Kernel Security Training Courses

http://www.codemachine.com/courses.html#kerdbg Windows Kernel Internals for Security Researchers This course takes a deep dive into the internals of the Windows kernel from a security perspective. Attendees learn about behind the scenes working of va

Windows Kernel Way 1:Windows内核调试技术

掌握Windows内核调试技术是学习与研究Windows内核的基础,调试Windows内核的方式大致分为两种: (1)通过Windbg工具在Windows系统运行之初连接到Windows内核,连接成功之后便可以调试,此时即可以调试Windows内核启动过程,又可以在Windows启动之后调试某内核组件或应用程序.或使用Windbg的Kernel debugging of the local mechine功能,在Windows系统完全启动之后,调试Windows内核组件或应用程序.这种方式需要配

Windows kernel pool 初探(2014.12)

Windows kernel pool 1. 简介 Kernel pool类似于Windows用户层所使用Heap,其为内核组件提供系统资源.在系统初始化的时候,内存管理模块就创建了pool. 严格的来说,pool只分为nonpaged pool和paged pool两类. nonpaged pool: 只能常驻于物理内存地址,不能映射.(reside in physical memory at all times and can be accessed at any time without

Windows Kernel Way 扉言

七年寒窗,但求一道. 笔者在学习windows/linux以及各类编程语言.框架之初因摸不到门路而磕磕绊绊,因寻不到明师而步履蹒跚,或不知缘从何起,或不知路在何处,只能尝试.回溯.重来.反反复复,竟也惶度七年有余……七年流光,物是人非,伊人不再,道也未成,每念及此,不胜唏嘘. 然光阴之美,尽在于此. 时光与梦想不可怠慢,遂决定写Kernel Way系列文章,重走来时路…… Windows Kernel Way系列包含Windows内核基本原理.Windows驱动开发.WIndows内核安全编程等

Linux Systemcall、Llinux Kernel Debug Based On Sourcecode

目录 1. 系统调用简介 2. 系统调用跟踪调试 3. 系统调用内核源码分析 1. 系统调用简介 关于系统调用的基本原理,请参阅另一篇文章,本文的主要目标是从内核源代码的角度来学习一下系统调用在底层的内核中是如何实现的 Relevant Link: http://www.cnblogs.com/LittleHann/p/3850653.html http://www.kerneltravel.net/journal/iv/syscall.htm http://zjuedward.blog.51c

OD: Windows Security Techniques & GS Bypassing via C++ Virtual Function

Windows 安全机制 漏洞的万源之本在于冯诺依曼设计的计算机模型没有将代码和数据进行区分——病毒.加壳脱壳.shellcode.跨站脚本攻击.SQL注入等都是因为计算机把数据和代码混淆这一天然缺陷而造成的. Windows XP SP2 之前的系统致力于系统稳定性,忽略安全性:之后的 Windows 系统系统加入了独特的安全性设计: 1. GS 编译技术:函数返回地址之前加入了 Security Cookie,返回之前首先检测 cookie 是否正确,栈溢出难度增加. 2. 增加了对 S.E

MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption 2017-05-18 16:45

wget "https://raw.githubusercontent.com/rapid7/metasploit-framework/6d81ca42087efd6548bfcf924172376d5234a25a/modules/exploits/windows/smb/ms17_010_eternalblue.rb" -O /usr/share/metasploit-framework/modules/exploits/windows/smb/ms17_010_eternalbl

Microsoft Windows Kernel .fon字体文件远程代码执行漏洞(MS11-077)

漏洞描述 Microsoft Windows是流行的计算机操作系统. IWindows Kernel在.fon字体文件的处理上存在远程代码执行漏洞,远程攻击者可利用此漏洞以内核权限执行任意代码,导致完全控制受影响计算机. <*来源:Will Dorman 链接:https://docs.microsoft.com/en-us/security-updates/securitybulletins/2011/ms11-077 *> 解决方法 厂商补丁: Microsoft --------- Mi