灰帽 Python之旅2课件.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2 调试器设计 调试器就是黑客的眼睛。你能够使用它对程序进行动态跟踪和分析。特别是当涉及到exploit ,fuzzer 和病毒分析的时候,动态分析的能力决定你的技术水平。对于调试器的使用大家都再熟悉不过了,但是对调试器的实现原理,估计就不是那么熟悉了。当我们对软件缺陷进行评估的时候,调试器提供了非常多的便利和优点。比如运行,暂停,步进,一个进程;设置断点;操作寄存器和内存;捕捉内部异常,这些底层操作的细节,正是我这章要详细探讨的。 在深入学习之前,先让我们先了解下白盒调试和黑盒调试的不同。许多的开发平台都会包含一个自带的调试器,允许开发工具结合源代码对程序进行精确的跟踪测试。这就是白盒调试。当我们很难得到源代码的时候,开发者,逆向工程师,Hacker就会应用黑盒调试跟踪目标程序。黑盒调试中,被测试的软件对黑客来说是不透明的,唯一能看到的就是反汇编代码。这时候要分析出程序的运作流程,找出程序的错误将变得更复杂,花费的时间也会更多。但是高超的逆向技术集合优秀的逆向工具将使这个过程变得简单,轻松,有时候善于此道的黑客,甚至比开发者更了解软件:)。 黑盒测试分成两种不同的模式:用户模式 和 内核模式。用户模式(通常指的是ring3级的程序)是你平时运行用户程序的一般模式(普通的程序)。用户模式的权限是最低的。当你运行“运算器(cacl.exe)”的时候,就会产生一个用户级别的进程;对这个进程的调试就是用户模式调试。核心模式的权限是最高的。这里运行着操作系统内核,驱动程序,底层组件。当运行Wireshark嗅探数据包的时候,就是和一个工作在内核的网络驱动交互。如果你想暂停驱动或者检测驱动状态,就需要使用支持内核模式的调试器了。 下面的这些用户模式的调试器大家应该再熟悉不过了:WinDbg(微软生产),OllyDbg(一个免费的调试器 作者是Oleh Yuschuk)。当你在Linux下调试程序的时候,就需要使用标准的GNU 调试器(gdb)。以上的三个调试器相当的强大,都有各自的特色和优点。 最近几年,调试器的智能调试技术也取得了长足的发展,特别是在Windows平台。智能调试体现在强大可扩展性上,常常通过脚本或者别的方式对调试器进行进一步的开发利用,比如安装钩子函数,以及其他的专门为Hacker和逆向工程师专门定制的各种功能。在这方面出现了两个新的具有代表性的作品分别是PyDbg (byPedram Amini)和Immunity Debugger (from Immunity, Inc.)。 PyDbg 是一个纯Python实现的调试器,让黑客能够用Python语言全面的控制一个进程,实现自动化调试。Immunity调试器则是一个会让你眼前一亮的调试器,界面相当的友好,类似OllyDbg,但是拥有更强大的功能以及更多的Python调试库。这两个调试器在本书的后面章节将会详细的介绍。现在先让我们深入了解调试器的一般原理。 在这章,我们将把注意力集中在x86平台下的用户模式,通过对CPU体系结构,(堆)栈以及调试器的底层操作细节的深入探究,理解调试器的工作原理,为实现我们自己的调试器打下基础。 2.1 通用CPU寄存器 CPU的寄存器能够对少量的数据进行快速的存取访问。在x86指令集里,一个CPU有八个通用寄存器:EAX, EDX, ECX, ESI, EDI, EBP, ESP和 EBX。还有很多别的寄存器,遇到的时候具体讲解。这八个通用寄存器各有不同的用途,了解它们的作用对于我们设计调试器是至关重要的。让我们先简略的看一看每个寄存器和功能。最后我们将通过一个简单的实验来说明他它们的使用方法。 EAX寄存器也叫做累加寄存器,除了用于存储函数的返回值外也用于执行计算的操作。许多优化的x86指令集都专门设计了针对EAX寄存器的读写和计算指令。列如从最基本的加减,比较到特殊的乘除操作都有专门的EAX优化指令。 前面我们说了,函数的返回值也是存储在EAX寄存器里。这一点很重要,因为通过返回的EAX里的值我们可以判断函数是执行成功与否,或者得到确切返回值。 EDX寄存器也叫做数据寄存器。这个寄存器从本质上来说是EAX寄存器的延伸,它辅助EAX完成更多复杂的计算操作像乘法和除法。它虽然也能当作通用寄存器使用,不过更多的是结合EAX寄存器进行计算操作。 ECX寄存器,也叫做计数寄存器,用于循环操作,比如重复的字符存储操作,或者数字统计。有一点很重要,ECX寄存器的计算是向下而不是向上的(简单理解就是用

文档评论(0)

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

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

1亿VIP精品文档

相关文档