黑客反汇编揭秘
作者:[美]Kris Kaspersky 译者:谭明金 定价:59.00 页码:532 开本:短16开 出版时间:2004-09-01
dearbook订书地址 本书分为两大部分。第一部分结合精心挑选的实例,系统地讨论了黑客代码分析技术,包括调试器于反汇编器等典型分析工具的使用、代码分析的基本过程以及相关疑难问题的处理等。第二部分介绍了程序保护所面临的各种挑战及其相关的反调试、反跟踪、防反汇编加密解密技术等内容,这实际上是代码分析方面的高级专题。该书在内容上将针对性、实践性与综合性有机地结合在一起,很好地满足了学习代码分析技术的需要。该书主要是为致力于计算机安全维护而阻止黑客侵袭或者从事安全保护程序开发人员写的。同时,本书对于深入学习程序和操作系统等计算机内核知识,也有很好的参考价值。
图书目录 第1部分 精通黑客基本技术 第1章 概述 2 1.1 保护方式分类 2 1.2 保护强度 4 第2章 第一步:热身 6 第3章 第二步:熟练使用反汇编器 11 第4章 第三步:外科手术 17 第5章 第四步:熟练使用调试器 24 5.1 方法0:破解原始密码 25 5.2 方法1:直接在内存中搜索用户输入的密码 37 5.3 方法2:在密码输入函数上设置断点 46 5.4 方法3:针对消息设置断点 49 第6章 第五步:IDA粉墨登场 53 第7章 第六步:结合调试器使用反汇编器 82 第8章 第七步:识别高级语言的关键结构 85 8.1 函数 85 8.2 启动函数 100 8.3 虚函数 104 8.4 构造函数与析构函数 136 8.5 对象、结构体与数组 147 8.6 this指针 164 8.7 new操作符与delete操作符 165 8.8 库函数 169 8.9 函数的参数 173 8.9.1 函数的返回值 255 8.9.2 局部堆栈变量 309 8.9.3 寄存器与临时变量 327 8.9.4 全局变量 338 8.9.5 常量与偏移量 344 8.9.6 文本与字符串 357 8.9.7 IF-THEN-ELSE条件语句 374 8.9.8 SWITCH-CASE-BREAK语句 415 8.9.9 循环语句 433 8.9.10 数学运算符 475 第2部分 提高软件分析难度的技术途径 第9章 概述 500 第10章 反调试技术 502 10.1 调试技术发展简介 502 10.2 调试器的工作原理 503 10.3 实模式与保护模式下的异常处理 505 10.4 黑客如何破除程序的保护机制 505 10.5 程序的保护 506 10.6 如何进行反跟踪 506 10.7 断点的防范 512 第11章 反汇编防范技术 518 11.1 最新操作系统的自修改代码 518 11.2 Windows内存体系结构 519 11.3 使用WriteProcessMemory函数 520 11.4 在堆栈中执行代码 522 11.5 可重定位代码的缺陷 522 11.6 优化编译器的是与非 524 11.7 使用自修改代码保护应用程序 525 11.8 总结 529 第12章 新保护技术讨论与展望 530 说明 531
图书前言 本书通过展示如何创建与绕过保护环节等方面的内容,向读者开启了一扇通往安全机制这一神秘世界的大门。该书是为喜欢破译难解之谜的人们,以及将业余时间或者上班时间都花在对程序与操作系统进行刨根问底的人们写的,同时,它也是为经常或者偶尔从事保护程序开发的人员,以及想知道如何出色而可靠地阻止无处不在的黑客的人员写的。 黑客底层分析技术,即用调试器与反汇编器开展工作所需要的技能,是本书介绍的主要内容。书中详细介绍了识别与重建源代码的关键结构——函数(包括虚函数)、局部与全局变量、分支、循环、对象及其层次、数学运算符等方面的内容。 选取阅读本书时所需要的工具软件,完全由读者个人的喜好决定。每个人的爱好是很不一样的,因此,请不要把我在下面提到的那些东西看成板上钉钉的事,只管将它们当做一些建议好了。使用本书需要的工具软件包括: 调试器——SoftIce,版本在3.25以上 反汇编器——IDA,版本为3.7x(推荐使用3.8版本,4.x版本更佳) 十六进制编辑器——HIEW,任何版本都行 开发包——SDK与DDK(后者不是必需的,但拥有它的确很好) 操作系统——任何版本的Windows操作系统都行,但强烈推荐使用Windows 2000或者更高的版本 编译器——读者最喜欢的任何C/C++或者Pascal编译器(书中虽然对Microsoft Visual C++、Borland C++、Watcom C、GNU C以及Free Pascal等编译器各自具有的特点都进行了详细描述,但用得最多的只是Microsoft Visual C++ 6.0编译器) 现在,我们来比较详细地介绍一下这些内容: SoftIce。SoftIce调试器是黑客们使用的主要武器。虽然有一些免费的调试器(比如Microsoft的WINDEB与刘涛涛的TRW)可供使用,但SoftIce比所有这些免费程序提供的功效加在一起还要有效与方便。几乎所有版本的SoftIce都能满足用户的需要,作者使用的是3.26版本。这是一个经受了时间考验的版本,它具有很好的稳定性,并且在Windows 2000下运行良好。该软件的当前版本4.x与我计算机上的电视卡(Matrox Millennium G450)不能在一起很好地运作,大致说来,随着运行时间的推移,它会出现死机。除此以外,在第四个版本的所有新增功能中,只有“参考点省略”(FPO, Frame Point Omission)这一部分功能(参见“局部堆栈变量”一节)才对通过ESP寄存器直接寻址局部变量的程序员特别有用,这无疑是一个很实用的特性,然而,如果一定要实现类似的操作,没有它同样可以做到。去购买SoftIce调试器吧,读者是不会遗憾的。(破译程序的工作与盗版行为可不是一回事,直到今天,从事这类工作的人们都还算得上是诚实的。) IDA Pro。目前世界上功能最强的反汇编器无疑是IDA。没有IDA固然可以生存,但有了它肯定可以生活得更好。IDA为浏览所剖析的内容提供了一个便利的工具,它自动识别库函数和局部变量(包括通过ESP直接寻址的那些变量),并支持众多的处理器与文件格式。一句话,黑客要是不配备它就不能称为黑客了。但是在我看来,为它大做广告其实是不必要的。惟一的问题是,读者如何才能得到这个IDA工具程序。加进该软件程序的盗版是十分罕见的(我看到过的最新版本是 IDA 3.74,不过它显得不够稳定),提供它的Internet网站通常更少。IDA开发人员会迅速阻止任何非授权性质的产品分发企图。获取该软件的惟一可靠途径是从开发人员(http//www.idapro.com)或者正式发行商那里购买。不幸的是,该软件并不提供配套的文档资料(非常简短且不系统的即时帮助信息除外)。 HIEW。HIEW不仅仅是一个十六进制的编辑器,它还将反汇编器、汇编器与编码器的功能集于一身。HIEW虽然不能取代IDA而使用户不必去购买 IDA,但在某些情况下,它会带给用户很多的回报。(IDA运行起来很慢,因此,假如用户仅仅是想快速地看一眼待用文件的话,则浪费大量的时间确实是件令人头疼的事情。)不过,HIEW的主要用途不在于反汇编,而在于进行一些细小的修剪——针对二进制文件进行一些小小的外科手术。这样做的目的通常是去除部分保护机制,从而使该工具能够正常地运行。 SDK(软件开发套件——应用程序开发包)。需要从SDK包获得的主要资源是关于Win32 API函数以及用于PE文件的DUMPBIN实用工具等方面的文档资料。没有这些资料,无论是黑客还是开发人员什么都做不了。至少,用户需要通过文档资料来了解主要系统函数的原型和用途。这类信息虽然可以从浩如烟海的编程书籍中收集而来,但是没有哪本书能够宣称它所展示的内容达到了必要的深度和广度,所以说,用户迟早要去使用SDK。怎样去获取SDK呢?SDK是MSDN的一部分,MSDN按季度以光盘的形式进行发布,同时也可以通过征订来分发。(用户可以通过官方网站http//msdn.microsoft.com来了解关于订阅条件方面的内容。)此外,MSDN也随Microsoft Visual C++ 6.0编译器一起提供(这个版本虽然不是特别新,但它对于阅读本书已经足够了)。 DDK(驱动程序开发套件——驱动程序开发包)。黑客使用DDK开发包做什么?它有助于弄清楚,驱动程序是如何开发、工作,以及如何被攻击的吗?除了基本的文档和大量的样例之外,DDK包还包括一个非常有价值的文件NTDDK.h,该文件含有绝大部分非公开结构的定义,它同揭示系统某些非一般性操作细节的注释内容一起加载。随DDK一起提供的一些实用程序也是有用的,其中,WINDEB调试器就是DDK所包括的实用工具之一,这是一个相当好的调试器,但无论从什么角度看,它都难及SoftIce的项背,因此,本书不考虑它的使用。(如果读者找不到SoftIce,WINDEB也凑合能用。)用于编写驱动程序的MASM汇编工具显得十分有用,另外,DDK还有一些使黑客的生活变得稍微容易点儿的小程序。最新的DDK版本可以从Microsoft站点免费下载。不过,要记住一点,用于NT的整个DDK的大小超过了40MB(压缩的),它甚至要求磁盘上存在更多的空间。 操作系统。我无意将自己的品味和嗜好强加于读者,不过,我还是强烈地建议读者安装Windows 2000或者更高的版本。这样做的原因在于它是一个性能非常稳定且运行牢靠的操作系统,能够抵御严重的应用程序错误的破坏。与黑客的工作紧密相关的一件事情是,这种针对程序的核心层所施加的外部干扰使程序非常容易陷入崩溃而出现难以预料的行为。Windows 9x操作系统和崩溃程序的频繁“罢工”表现出“高度一致”的步调,有时候,计算机请求启动高达几十次之多!如果启动频繁发生而读者又不用去修复因为故障而遭到破坏的磁盘的话,那只能说用户运气不错。(这样的事情虽然很少发生,但还是存在发生的必然。)冻结Windows 2000要困难得多,在我睡眠不好或者疏忽大意的时候,我“成功”实施冻结的次数一个月也不会多于两次。而且,Windows 2000允许用户在任何时候加载SoftIce而不用重新启动系统,这实在是太方便了!最后要说明的一点是,本书的所有内容都是基于Windows 2000或者更高版本而展开叙述的,作者也很少提及其他系统所表现出的不同之处。 本书的读者需要事先对汇编语言很熟悉。即使没有用汇编语言编写程序的经历,至少也应该知道诸如寄存器、段、机器指令等概念指的是什么,否则,阅读本书很可能感到太复杂而难于理解。作者的建议是,读者去找一本汇编方面的指南书籍,然后进行系统的学习。 除了汇编语言,读者至少还应该具备操作系统方面的一般概念。 此外,从Intel和AMD站点上下载所有可以获得的关于处理器的文档资料,也是很有用的。 至此,已经准备足够素材,该是起步向前的时候了!
出处:蓝色理想
责任编辑:donger
|