关于WINDBG调试内核下断点的问题

hawk1987 2013-07-07 04:41:06
小弟没调试过系统内核。目标是一个驱动程序(没有源码),它随系统启动(start = 0)。实际工作中这个驱动还有个应用程序配合,我想动态跟踪下他俩通信时的情况。现在我遇到的问题是:

1.给他下断点是可以,比如在DriverEntry处,那么开机的时候就可以断住,但因为这个时候没有与应用程序通信,所以进不到我想要跟踪的地方。

2.我在dispatch处下了断点,问题来了,当我运行相应的应用程序时怎么就断不住呢?当应用程序关掉后,反而能断住,可惜这个时候又不能进到我想跟踪的地方了

所以想请教各位,这是个什么情况?我该怎么做才能跟踪到我想要去的地方呢?

...全文
162 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
围绕如何实现高效调试这一主题,本书深入系统地介绍了以调试器为核心的各种软件调试技术。本书共30章,分为6篇。第1篇介绍了软件调试的概况和简要历史。第2篇以英特尔架构(IA)的CPU为例,介绍了计算机系统的硬件核心所提供的调试支持,包括异常、断点指令、单步执行标志、分支监视、JTAG和MCE等。第3篇以Windows操作系统为例,介绍了计算机系统的软件核心中的调试设施,包括内核调试引擎、用户态调试子系统、异常处理、验证器、错误报告、事件追踪、故障转储、硬件错误处理等。第4篇以Visual C/C++编译器为例,介绍了生产软件的主要工具的调试支持,重点讨论了编译期检查、运行期检查及调试符号。第5篇讨论了软件的可调试性,探讨了如何在软件架构设计和软件开发过程中加入调试支持,使软件更容易被调试。在前5篇内容的基础上,第6篇首先介绍了调试器的发展历史、典型功能和实现方法,然后全面介绍了WinDBG调试器,包括它的模块结构、工作模型、使用方法和主要调试功能的实现细节。. 本书是对软件调试技术在过去50年中所取得成就的全面展示,也是对作者本人在软件设计和系统开发第一线奋战10多年的经验总结。本书理论与实践紧密结合,选取了大量具有代表性和普遍意义的技术细节进行讨论,是学习软件调试技术的宝贵资料,适合每一位希望深刻理解软件和自由驾驭软件的人阅读,特别是从事软件开发、测试、支持的技术人员和有关的研究人员。...
WinDBG 是个非常强大的调试器,它设计了极其丰富的功能来支持各种调试任务,包括用户 态调试内核调试调试转储文件、 远程调试等等。 WinDBG 具有非常大的灵活性和可扩展性, 用来满足各种各样的调试需求,比如用户可以自由定义调试事件的处理方式,编写调试扩展模块 来定制和补充 WinDBG调试功能。 尽管 WinDBG 是个典型的窗口程序, 但是它的大多数调试功能还是以手工输入命令的方式来 工作的。目前版本的 WinDBG 共提供了 20 多条标准命令, 140 多条元命令( Meta-commands), 和难以计数的大量扩展命令。学习和灵活使用这些命令是学习 WinDBG 的关键,也是难点。 上一章我们从设计的角度分析了 WinDBG ,本章将从使用(用户)的角度介绍 WinDBG 。我 们先介绍工作空间的概念和用法(第 1 节),然后介绍命令的分类和不同种类的命令提示符(第 2 节)。 第 3 节介绍不同的调试模式, 也就是如何与不同特征的调试目标建立调试会话。 第 4 节介绍 上下文的概念和在调试时应该如何切换和控制上下文。第 5 节介绍调试事件和如何定制调试事件 的处理方式。 从第 6 节到第 9 节我们将分别介绍如何在 WinDBG 中完成典型的调试操作, 比如控 制调试目标(第 6 节)、设置断点(第 7 节)、观察栈(第 8 节)以及如何观察和修改数据(第 9 节)。
第一部分 概 述 第1章 调试工具简介 1 1.1.泄漏诊断工具 1 1.2.Windows调试工具集 3 1.3.UMDH 4 1.4.Microsoft.应用程序验证器 4 1.5.全局标志 9 1.6.进程浏览器11 1.7.Windows驱动程序开发包 12 1.8.Wireshark 14 1.9.DebugDiag 15 1.10.小结 15 第2章.调试器简介 16 2.1.调试器的基础知识 16 2.1.1.调试器类型 17 2.1.2.调试器命令 18 2.1.3.调试器的配置19 2.1.4.通过内核调试器重定向用户 态调试器 24 2.1.5.是否使用KD 26 2.2.基本的调试任务26 2.2.1.键入调试命令27 2.2.2.解析调试器的提示信息27 2.2.3.配置和使用符号 29 2.2.4.使用源文件 38 2.2.5.分析命令40 2.2.6.修改上下文的命令60 2.2.7.其他的辅助命令 67 2.2.8.示例68 2.3.远程调试 70 2.3.1.Remote.exe 70 2.3.2.调试服务器 71 2.3.3.进程服务器与内核服务器 73 2.3.4.远程调试中的符号解析74 2.3.5.远程调试中的源代码解析 75 2.4.调试场景 75 2.4.1.调试非交互式进程(服务 或者COM服务器) 76 2.4.2.在没有内核调试器的情况 下调试非交互式进程(服务 或者COM服务器) 77 2.5.小结 77 第3章.调试器揭密 78 3.1.用户态调试器的内幕78 3.1.1.操作系统对用户态调试器的支持78 3.1.2.调试事件的顺序 83 3.1.3.控制来自调试器的异常和事件 84 3.1.4.内核调试器中的调试事件处理105 3.2.控制调试目标 106 3.2.1.断点的工作原理 107 3.2.2.内存访问断点的工作原理 108 3.2.3.处理器跟踪 109 3.2.4.实时调试中的线程状态管理109 3.2.5.通过用户态调试器来挂起线程 112 3.3.小结 113 第4章.符号文件与源文件的管理 114 4.1.调试符号的管理114 4.1.1.公有符号的生成 115 4.1.2.在符号库中存储符号 117 4.1.3.在HTTP服务器上共享公有符号 119 4.2.源文件的管理 120 4.2.1.收集源文件信息 120 4.2.2.源文件信息的使用122 4.2.3.不带源文件修订控制的源文件 服务器 123 4.3.小结 125 第二部分.调 试 实 践 第5章.内存破坏之一—栈 127 5.1.内存破坏的检测过程128 5.1.1.步骤1:状态分析 128 5.1.2.步骤2:源代码分析 129 5.1.3.步骤3:使用内存破坏检测工具 133 5.1.4.步骤4:调整源代码 133 5.1.5.步骤5:定义回避策略 133 5.2.栈内存破坏133 5.2.1.栈溢出 142 5.2.2.异步操作与栈顶指针 147 5.2.3.调用约定的不匹配154 5.2.4.回避策略164 5.3.小结 166 第6章.内存破坏之二—堆 167 6.1.堆简介167 6.1.1.前端分配器 168 6.1.2.后端分配器 169 6.2.堆破坏181 6.2.1.使用未初始化状态181 6.2.2.堆的上溢与下溢 185 6.2.3.堆句柄的不匹配 195 6.2.4.重用已删除的堆块199 6.3.小结 205 第7章.安全 206 7.1.Windows安全概述 206 7.1.1.安全标识符 207 7.1.2.访问控制列表208 7.1.3.安全描述符 209 7.1.4.访问令牌211 7.2.安全信息的来源213 7.2.1.访问令牌213 7.2.2.安全描述符 215 7.3.如何执行安全检查 217 7.4.在客户端/服务器程序中传播标识 218 7.4.1.远程认证与安全支持提供者接口218 7.4.2.模拟级别220 7.5.系统边界上的安全检查 220 7.6.安全故障的分析221 7.6.1.本地安全故障221 7.6.2.延迟初始化中的安全问题 226 7.6.3.身份模拟的潜在安全问题 231 7.6.4.分布式COM错误 232 7.6.5.扩展命令!token的故障241 7.6.6.在Windows XP SP2上安装了 某个程序后发生DCOM激活故障243 7.6.7.通过跟踪工具来分析安全故障 247 7.7.小结 248 第8章.进程间通信 249 8.1.通信机制 249 8.2.本地通信分析 250 8.2.1.LPC的背景知识 251 8.2.2.调试LPC通信251 8.2.3.调试本地DCOM以及MSRPC通信 254 8.3.远程通信分析 260 8.3.1.RPC故障测定状态信息的使用 260 8.3.2.网络流量分析270 8.3.3.打破调用路径275 8.4.一些其他的技术信息277 8.4.1.远程认证277 8.4.2.RPC扩展错误信息 278 8.4.3.其他工具278 8.5.小结 279 第9章.资源泄漏 280 9.1.什么是资源泄漏280 9.2.高层流程 280 9.2.1.步骤1:找出潜在的资源泄漏 281 9.2.2.步骤2:什么东西正在泄漏 282 9.2.3.步骤3:初步分析 282 9.2.4.步骤4:资源泄漏检测工具 282 9.2.5.步骤5:制定回避策略 283 9.3.资源泄漏的可重现性283 9.4.句柄泄漏 284 9.4.1.存在泄漏的程序 285 9.4.2.步骤1和步骤2:它是不是一个 句柄泄漏 286 9.4.3.步骤3:初始分析 287 9.4.4.更复杂的程序290 9.4.5.步骤4:利用泄漏检测工具 292 9.4.6.句柄注入与!htrace 298 9.4.7.步骤5:为句柄泄漏制定回避策略 300 9.5.内存泄漏 301 9.5.1.一个简单的内存泄漏 301 9.5.2.步骤1和步骤2:是否存在泄漏, 以及泄漏的是什么资源 302 9.5.3.步骤3:使用内存检测工具 303 9.5.4.步骤4:回避策略 322 9.6.小结 322 第10章.同步 323 10.1.同步的基础知识 323 10.1.1.事件 323 10.1.2.临界区 325 10.1.3.互斥体 329 10.1.4.信号量 330 10.2.高层流程 331 10.2.1.步骤1:识别问题的征兆 331 10.2.2.步骤2:转储所有线程331 10.2.3.步骤3:分析线程中的同步问题332 10.2.4.步骤4:修复问题334 10.2.5.步骤5:制定回避策略334 10.3.同步情况 334 10.3.1.死锁 334 10.3.2.第1种孤立临界区情况—异常 338 10.3.3.第2种孤立临界区情况—线程 结束 343 10.3.4.DllMain函数的注意事项 347 10.3.5.锁竞争 353 10.3.6.管理临界区 358 10.4.小结 361 第三部分.高 级 主 题 第11章.编写定制的调试扩展363 11.1.调试扩展简介 363 11.2.调试扩展示例 365 11.2.1.调试扩展模型 369 11.2.2.调试扩展示例的需求 371 11.2.3.头文件和代码组织 372 11.2.4.调试扩展的初始化 374 11.2.5.调试会话状态的变化 379 11.2.6.KnownStructOutput 379 11.2.7.退出调试扩展 379 11.2.8.Help命令的实现 380 11.2.9.dumptree命令的实现 381 11.2.10.KnownStructOutput函数的实现 384 11.2.11.取消命令的实现387 11.2.12.版本 389 11.2.13.调试扩展的构建389 11.3.小结 390 第12章.64位调试 391 12.1.Microsoft 64位系统 391 12.1.1.操作系统简介 392 12.1.2.在WOW64中运行的32位程序 393 12.2.Windows x64带来的变化395 12.2.1.第1章—调试工具简介 396 12.2.2.第2章—调试器简介 397 12.2.3.第3章—调试器揭密 407 12.2.4.第5章—内存破坏之一—栈 411 12.2.5.第6章—内存破坏之二—堆 411 12.2.6.第7章—安全 412 12.2.7.第8章—进程间通信 413 12.2.8.第11章—编写定制的调试扩展414 12.3.小结 414 第13章.事后调试 415 13.1.转储文件基础 415 13.1.1.通过调试器来生成转储文件 417 13.1.2.通过ADPlus来生成转储文件 420 13.1.3.内核态转储文件的创建 421 13.2.转储文件的使用 423 13.2.1.转储文件的分析:访问违例 424 13.2.2.转储文件的分析:句柄泄漏 425 13.3.Windows错误报告 429 13.3.1.Dr.Watson 429 13.3.2.Windows错误报告的系统架构 434 13.4.企业错误报告 446 13.4.1.设置企业错误报告 447 13.4.2.通过企业错误报告来报告错误 449 13.5.小结 451 第14章.功能强大的工具452 14.1.调试诊断工具 452 14.1.1.分析内存泄漏或者句柄泄漏 453 14.1.2.编写定制的分析脚本 455 14.2.扩展命令!analyze 457 14.2.1.故障程序 457 14.2.2.分析结果 458 14.2.3.故障的跟进人员 462 14.3.小结 463 第15章.Windows Vista基础 464 15.1.第1章—调试工具简介 464 15.2.第2章—调试器简介 465 15.2.1.用户访问控制的副作用 465 15.2.2.启用内核调试器 467 15.2.3.地址空间布局的随机化 468 15.3.第6章—内存破坏之二—堆 469 15.4.第7章—安全性 473 15.4.1.用户访问控制 474 15.4.2.调试器中的UAC 475 15.4.3.注册表和文件虚拟化 479 15.5.第8章—进程间通信 481 15.6.第9章—资源泄漏 482 15.7.第10章—同步482 15.7.1.轻量读写锁 482 15.7.2.条件变量 483 15.7.3.单次初始化 484 15.7.4.增强线程池 484 15.8.第11章—编写定制的调试扩展 484 15.9.第13章—事后调试485 15.10.小结487 附录A.应用程序验证器的测试设置488
20秋学期(1709、1803、1809、1903、1909、2003、2009 )《计算机病毒分析》在线作业 ()是可以记录程序详细的运行信息的调试技术。 A:内存映射 B:基地址重定位 C:断点 D:跟踪 答案:D 在WinDbg的搜索符号中, ()命令允许你用符号在没有加载的代码中设置一个延迟断点。 A:bu B:x C:Ln D:dt 答案:A WinDbg的内存窗口支持通过命令来浏览内存,以下WinDbg读选项中,()选项描述读取内存数据并以ASCII文本显示。 A:da B:du C:dd D:dc 答案:A GFI沙箱生成报告不包括哪个小节()。 A:分析摘要 B:文件活动 C:注册表 D:程序功能 答案:D 20秋学期(1909、2003、2009-)《计算机病毒分析》在线作业全文共11页,当前为第1页。 20秋学期(1909、2003、2009-)《计算机病毒分析》在线作业全文共11页,当前为第1页。 以下哈希值做的事是() A:将哈希值作为标签使用 B:与其他分析师分享哈希值,以帮助他们来识别恶意代码 C:通过哈希值计算文件的生成日期 D:在线搜索这段哈希值,看看这个文件是否已经被识别 答案:C 在获取不到高级语言源码时,()是从机器码中能可信并保持一致地还原得到的最高一层语言。 A:机器指令 B:微指令 C:汇编语言 D:机器码 答案:C 而0x52000000对应0x52这个值使用的是()字节序。 A:小端 B:大端 C:终端 D:前端 答案:A 以下那个窗口是操作和分析二进制的主要位置,也是反汇编代码所在的地方 A:函数窗口 B:结构窗口 C:反汇编窗口 D:二进制窗口 答案:C ()能够将一个被调试的进程转储为一个PE文件 A:OllyDump B:调试器隐藏插件 20秋学期(1909、2003、2009-)《计算机病毒分析》在线作业全文共11页,当前为第2页。C:命令行 20秋学期(1909、2003、2009-)《计算机病毒分析》在线作业全文共11页,当前为第2页。 D:书签 答案:A 源代码通过()后形成可执行文件。 A:汇编 B:编译 C:连接 D:编译和连接 答案:D WinDbg的内存窗口支持通过命令来浏览内存,以下WinDbg读选项中,()选项描述读取内存数据并以内存32位双字显示。 A:da B:du C:dd D:dc 答案:C 计算机病毒的编写者使用的哪项技术可以使编写的代码,功能不变,语义混淆。 A:垃圾指令 B:多态技术 C:变形技术 D:单项执行技术 答案:C 内存中的()节用于函数的局部变量和参数,以及控制程序执行流。 A:数据 B:堆 C:代码 D:栈 答案:D 20秋学期(1909、2003、2009-)《计算机病毒分析》在线作业全文共11页,当前为第3页。PE文件中的分节中唯一包含代码的节是()。 20秋学期(1909、2003、2009-)《计算机病毒分析》在线作业全文共11页,当前为第3页。 A:.rdata B:.text C:.data D:.rsrc 答案:B 在以下寄存器中用于定位要执行的下一条指令的寄存器是()。 A:通用寄存器 B:段寄存器 C:状态寄存器 D:指令指针 答案:D 以下Windows API类型中()是描述一个双字节、32位的无符号数值。 A:WORD B:DWORD C:Habdles D:Callback 答案:B 下列对内核套件的描述正确的是()。 A:恶意代码将自身安装到一台计算机来允许攻击者访问 B:这是一类只是用来下载其他恶意代码的恶意代码 C:用来启动其他恶意程序的恶意代码 D:设计用来隐藏其他恶意代码的恶意代码网络造成破坏的软件 答案:D 在WinDbg的搜索符号中, ()命令允许你使用通配符来搜索函数或者符号。 A:bu B:x C:Ln D:dt 20秋学期(1909、2003、2009-)《计算机病毒分析》在线作业全文共11页,当前为第4页。答案:B 20秋学期(1909、2003、2009-)《计算机病毒分析》在线作业全文共11页,当前为第4页。 要插入一个跨反汇编窗口,并且在任何时候只要存在对你添加注释的地址的交叉引用就重复回显,应该按()键。 A:; B:: C:shift D:ctrl 答案:A ()被定义为一个相似数据项的有序集合。 A:数组 B:结构体 C:链表 D:变量 答案:A 以下哪个选项属于木马()。 A:震网病毒 B:WannaCry C:灰鸽子 D:熊猫烧香 答案:C WinINet API实现了()层的协议。 A:网络层 B:数据链路层 C:应用层 D:传输层 答案:C 单步调试是通过( )实现的 A:每条代码之前添加软件断点 20秋学期(1909、2003、2009-)《计算机病毒分
内容提要   《网络渗透技术》是国内第一本全面深入地披露系统与网络底层安全技术的书籍。本书分为十个章节,详细介绍了渗透测试技术的方方面面。   首先介绍了各种调试器和分析工具的简单使用,然后从各种操作系统的体系结构讲起,深入浅出地分析了相应平台的缓冲区溢出利用技术,接着介绍其高级shellcode技术,以及更深入的堆溢出利用技术等。除了用户层的利用技术,在第6章还以Linux操作系统为例详细地介绍了内核溢出的各种利用技术。另外还结合实例,详细介绍了类UNIX系统漏洞分析与发掘技术。   本书不放过每一处技术细节,记录了分析调试过程的每一个步骤,并且给出详细的演示程序。在最后两个章节,本书还对渗透测试撕裂口——Web应用的渗透做了精辟的描述。   本书是XFOCUS团队倾力之作,对于有志于网络安全事业人士而言,本书是一本不可多得的专业参考书。 编辑本段编辑推荐   本书作者均来自专注于网络安全技术的著名站点XPOCUS,Xcon是由XFOCUS TEAM组织的民间信息安全年会,其宗旨是创造自由、交流、共享、创新的学术气氛,促进信息安全技术的发展。   第一届Xcon都是新的超越,我们期待与您相会。 编辑本段目录   第1章 基础知识   1.1 GDB的基本使用方法   1.1.1 断点相关命令   1.1.2 执行相关命令   1.1.3 信息查看相关命令   1.1.4 其他常用命令   1.1.5 Insight图形界面调试器   1.2 SoftICE的基本使用方法   1.2.1 断点相关命令   1.2.2 执行相关命令   1.2.3 查看与修改相关命令   1.2.4 其他常用命令   1.2.5 常用默认快捷键   1.3 NTSD(WinDbg/CDB)的基本使用方法   1.3.1 断点相关命令   1.3.2 执行相关命令   1.3.3 查看与修改相关命令   1.3.4 其他常用命令   1.4 IDA Pro的基本使用方法   1.4.1 强大的反汇编功能   1.4.2 方便的代码阅读功能   1.4.3 常用默认快捷键   第2章 缓冲区溢出利用技术   2.1 缓冲区溢出历史   2.2 Linux x86平台缓冲区溢出利用技术   2.2.1 Linux的内存管理   2.2.2 缓冲区溢出的流程   2.2.3 缓冲区溢出的攻击技术   2.3 Win32平台缓冲区溢出利用技术   2.3.1 Win32平台缓冲区溢出的流程   2.3.2 跳转地址   2.3.3 远程缓冲区溢出演示   2.3.4 结构化异常处理   2.3.5 Windows XP和2003下的增强异常处理   2.3.6 突破Windows 2003堆栈保护   2.4 AIX PowerPC平台缓冲区溢出利用技术   2.4.1 熟悉PowerPC体系及其精简指令集计算   2.4.2 AIX PowerPC堆栈结构   2.4.3 学习如何攻击AIX PowerPC的溢出程序   2.5 Solaris SPARC平台缓冲区溢出利用技术   2.5.1 SPARC体系结构   2.5.2 Solaris SPARC堆栈结构及函数调用过程   2.5.3 学习如何攻击Solaris SPARC的溢出程序   2.6 HP-UX PA平台缓冲区溢出利用技术   2.6.1 PA-RISC体系结构   2.6.2 常用指令集   2.6.3 运行时体系结构(Run~time Architecture)   2.6.4 学习如何攻击HP-UX下的溢出程序   2.7 Windows CE缓冲区溢出利用技术   2.7.1 ARM简介   2.7.2 Windows CE内存管理   2.7.3 Windows CE的进程和线程   2.7.4 Windows CE的API搜索技术   2.7.5 Windows CE缓冲区溢出流程演示   第3章 Shellcode技术   3.1 Linux x86平台Shellcode技术   3.1.1 熟悉系统调用   3.1.2 得到Shell的Shellcode   3.1.3 提取Shellcode的Opcode   3.1.4 渗透防火墙的Shellcode   3.2 Win32平台Shellcode技术   3.2.1 获取kernel32.dll基址   3.2.2 获取Windows API地址   3.2.3 写一个实用的Windows Shellcode   3.2.4 渗透防火墙的Shellcode   3.3 AIX PowerPC平台Shellcode技术   3.3.1 学习AIX PowerPC汇编   3.3.2 学写AIX PowerPC的Shellcode   3.3.3 远程Shellcode   3.3.4 遭遇I-cache   3.3.5 查找socket的Shellcode   3.4 Solaris SPARC平台的Shellcode技术   3.4.1 Solaris系统调用   3.4.2 得到shell的Shellcode   3.4.3 Shellcode中的自身定位   3.4.4 解码Shellcode   3.4.5 渗透防火墙的Shellcode   第4章 堆溢出利用技术   第5章 格式化串漏洞利用技术   第6章 内核溢出利用技术   第7章 其他利用技术   第8章 漏洞发掘分析   第9章 CGI渗透测试技术   第10章 SQL注入利用技术   附录A 网络安全英文术语解释

6,849

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧