网站首页  软件下载  游戏下载  翻译软件  电子书下载  电影下载  电视剧下载  教程攻略

请输入您要查询的图书:

 

书名 黑客调试技术揭秘(附光盘)/安全技术大系
分类 教育考试-考试-计算机类
作者 (美)卡斯帕克尔
出版社 电子工业出版社
下载
简介
编辑推荐

本书是帮助应用程序员和系统程序员理解调试过程的指南,揭示了各种调试器的实用使用技巧,说明了如何操作调试器以及如何克服障碍和修复调试器,介绍了黑客利用调试器和反汇编器来寻找程序弱点和实施攻击的方法。通过本书,程序员将学会如何弄清楚计算机系统内部的结构、如何重建没有提供源程序的程序的运行算法、如何修改程序以及如何调试驱动程序。本书还详细介绍了在Windows和UNIX操作系统中调试应用程序和驱动程序的方法。对于各种调试技术,书中都给出了带有详尽解释的源代码。如果你是具有C/C++或者Pascal/Delphi语言实际编程经验的程序员,那么本书就是使你的技术升华至一个新的台阶的宝典。

内容推荐

本书是帮助应用程序员和系统程序员理解调试过程的指南,揭示了各种调试器的实用使用技巧,说明了如何操作调试器以及如何克服障碍和修复调试器,介绍了黑客利用调试器和反汇编器来寻找程序弱点和实施攻击的方法。本书还详细介绍了在Windows和UNIX操作系统中调试应用程序和驱动程序的方法。对于各种调试技术,书中都给出了带有详尽解释的源代码。

目录

第1部分 调试工具入门调试工具简介 2

1.1 了解你的需求 4

1.2 理解调试器的工作原理 7

1.3 处理异常 8

第2章 在UNIX环境中进行调试的特性 10

2.1 Ptrace是GDB的基础调试工具 12

2.1.1 Ptrace及其命令 14

2.1.2 GDB的多线程支持 15

2.1.3 GDB简明指南 16

2.1.4 追踪系统调用 20

2.1.5 相关链接 21

2.2 UNIX中的黑客工具 22

2.2.1 调试器 22

2.2.2 反汇编工具 26

2.2.3 侦查软件 27

2.2.4 十六进制编辑器 28

2.2.5 内存转储程序 29

2.2.6 自动保护工具 29

第3章 模拟调试器和仿真器 31

3.1 最低系统要求 32

3.2 选择一个仿真器 33

3.2.1 安全性 33

3.2.2 可扩展性 34

3.2.3 是否有源程序 34

3.2.4 仿真质量 34

3.2.5 一个内置的调试器 35

3.3 常见仿真器概述 36

3.3.1 DOSBox 36

3.3.2 Bochs 37

3.3.3 微软Virtual PC 38

3.3.4 VMware 40

3.3.5 仿真器特性汇总表 41

3.4 注解 41

3.5 仿真器的应用领域 41

3.5.1 一般用户使用的仿真器 42

3.5.2 管理员使用的仿真器 43

3.5.3 软件开发人员使用的仿真器 43

3.5.4 黑客使用的仿真器 45

3.5.5 如何在VMware中配置SoftIce 46

3.56. 用于其他设备的仿真器 46

3.6 关于处理器仿真 47

第4章 用BoundsChecker进行应用程序分析 52

4.1 快速开始 54

4.2 装载非标准的DLLs 56

4.3 菜单项 57

第2部分 调试工具入门

第5章 保护机制简介 62

5.1 基于密钥类型的保护机制分类 63

5.2 创建保护与试图破解 65

5.3 从EXE到CRK 67

第6章 熟悉调试器 82

6.1 方法0:破解原始密码 83

6.2 方法1:直接在内存中查找输入的密码 94

6.3 方法2:在密码输入函数中设置断点 102

6.4 方法3:在消息中设置断点 105

第7章 IDA崭露头角 108

7.1 与调试器一起使用反汇编器 134

7.2 关于IDA C语言 136

第8章 注册保护机制之道 140

8.1 如何利用序数来发现函数名 144

8.2 如何使可执行程序变小 165

8.3 设陷捕获WM_GETTEXT 166

第9章 散列及其克服 169

第10章 常见的用于演示版的保护机制 184

10.1 限制功能 184

10.2 限制使用期限 201

10.3 限制启动次数 205

10.4 干扰屏幕 207

10.5 密钥文件 215

第3部分 反调试技术

第11章 反调试技术简介 228

反调试技术概述 229

第12章 各种各样的反调试技术 232

12.1 防御实模式调试器的技术 232

隐含地调用构造函数 245

12.2 防御保护模式调试器的技术 246

检测SoftIce 258

12.3 如何防止追踪 259

追踪 263

12.4 如何抵御断点 265

12.4.1 几种肮脏的黑客手法 271

12.4.2 从中间调用API 272

12.4.3 通过“死亡”带调用API 286

12.4.4 拷贝完整的API函数 289

12.4.5 Windows NT/2000装载程序中的一个缺陷 290

12.4.6 Windows NT/2000装载程序中的另一个缺陷 291

12.5 如何利用Windows工具来检测调试 291

第13章 UNIX特有的反调试技术 293

13.1 寄生的文件描述符 293

13.2 命令行参数与环境变量 294

13.3 进程树 295

13.4 信号、转储和异常 296

13.5 检测软件断点 296

13.6 螳螂捕蝉,黄雀在后 297

13.7 直接在内存中查找调试器 298

13.8 测量执行时间 299

第14章 可自我修改的代码 300

14.1 可自我修改代码的一个例子 309

14.2 通过因特网来修改代码的问题 310

14.3 注解 312

第15章 使用隐含的自我控制来创建不可破解的保护 313

15.1 隐含的自我控制技术 314

15.2 实用的实现 316

15.3 如何破解 324

第16章 智力调试 333

16.1 反汇编 333

几个小技巧 354

16.2 汇编 355

第17章 软件保护 360

17.1 盒子方案的缺点 361

17.2 防止非法拷贝和共享序列号的保护方法 361

17.3 试用版的保护方法 362

17.4 防止算法重建的保护方法 362

17.5 防止在磁盘和内存中改写的保护方法 363

17.6 抵御反汇编器 364

17.7 抵御调试器 365

17.8 抵御监视程序 365

17.9 抵御转储 365

17.10 如何自我保护 367

17.11 关于保护机制的几点想法 368

17.12 防止泄露源程序 369

17.13 防止分析二进制代码 371

第18章 如何使你的应用程序更

第18章 可靠 374

18.1 溢出错误的原因和后果 374

18.2 移植到另一种语言 376

18.3 利用堆来创建数组 376

18.4 放弃使用结束标志 377

18.5 结构化异常处理 378

18.6 传统与可靠 379

18.7 防止溢出错误 380

18.8 查找易受攻击的程序 381

18.9 C语言中不正确的优先级选择 384

第19章 软件测试 387

19.1 微观层上的测试 388

19.2 把错误记录在案 389

19.3 Beta测试 390

19.4 诊断信息的输出 391

19.5 概要 393

19.6 C/C++语言检验程序 393

19.7 累计误差的演示 394

19.8 几点注解 396

第4部分 应用程序和操作系统的严重错误应用程序和操作系统的严重

第20章 错误简介 400

20.1 应用程序、非法操作和其他 401

20.1.1 Doctor Watson 402

20.1.2 微软Visual Studio Debug 409

第21章 战兢苟活还是出死入生 411

21.1 强制退出函数 411

21.2 回绕堆栈 414

21.3 将控制传给消息处理函数 417

第22章 如何利用内存转储 424

22.1 在出现严重错误后恢复系统 431

NT内核的符号名前缀 432

22.2 装载死机转储 433

第5部分 PE文件

第23章 PE文件格式 440

23.1 简介 440

23.2 各种实现系统的PE文件结构特征 441

23.3 PE文件的一般概念和要求 442

23.4 PE文件结构 444

23.5 可做的事与不可做的事 447

23.6 PE文件各主要字段描述 449

23.6.1 [old-exe] e_magic 449

23.6.2 [old-exe] e_cparhdr 449

23.6.3 [old-exe] e_lfanew 449

23.6.4 [IMAGE_FILE_HEADER] Machine 450

23.6.5 [IMAGE_FILE_HEADER] NumberOfSections 450

23.6.6 [image_file_header]PointerTo SymbolTable/NumberOf Symbols 451

23.6.7 [image_file_header] SizeOfOptionalHeader 451

23.6.8 [image_file_header] Characteristics 451

23.6.9 [image_opional_header] Magic 453

23.6.10 [image_opional_header]Size OfCode/SizeOfInitializedData/SizeOfUninitializedData 453

23.6.11 [image_opional_header] BaseOfCode/BaseOfData 454

23.6.12 [image_opional_header] AddressOfEntryPoint 454

23.6.13 [image_opional_header] ImageBase 454

23.6.14 [image_opional_header]File Alignment/SectionAlignment 455

23.6.15 [image_opional_header] SizeOfImage 456

23.6.16 [image_opional_header] SizeOfHeader 456

23.6.17 [image_opional_header] CheckSum 457

23.6.18 [image_opional_header] Subsystem 457

23.6.19 [image_opional_header] DllCharacteristics 458

23.6.20 [image_opional_header]SizeOf StackReserve/SizeOfStack Commit, SizeOfHeapReserve/SizeOfHeapCommit 458

23.6.21 [image_opional_header] NumberOfRvaAndSizes 458

23.6.22 DATA DIRECTORY 459

23.6.23 段表 461

23.6.24 输出 465

23.6.25 输入 468

23.6.26 可重定位元素 475

第24章 在PE文件中插入和删除代码的技术 479

24.1 简介 479

24.2 X-Code和其他的常规表示法 480

24.3 X-Code的目标和任务 481

24.4 X-Code的要求 483

24.5 代码插入 484

24.5.1 避免多次插入 485

24.5.2 插入机制的分类 486

24.5.3 类别A:插入到文件内的可用空闲空间中 487

24.5.4 类别A:依靠压缩文件的某些部分来插入X-Code 500

24.5.5 类别A:在文件内创建一个新的NTFS流 502

24.5.6 类别B:改变文件头的大小 503

24.5.7 类别B:将段的部分灌入到重叠段 506

24.5.8 类别B:创建自己的重叠段 508

24.5.9 类别C:扩展文件的最后一个段 509

24.5.10 类别C:创建一个新的段 512

24.5.11 类别C:扩展宿主文件的中间段 513

24.5.12 类别Z:通过自动装载DLL来插入X-Code 516

24.6 小结 516

附盘说明 517

试读章节

主操作系统成了寄宿操作系统的基础。这个“旅店”的一个房问必须分配为隔离区。我们都知道,当安装一个新程序时,操作系统经常会出现问题,这可能是因为没有正确地使用安装程序、函数库之间存在冲突、广告软件或者只是因为偶然因素(比如因果报应)。只要能从其他渠道获得程序,就尽可能地不使用从不可靠的渠道获得的程序,这种做法是很明智的。只需在仿真器中分配一个单独的虚拟机,这类程序就不能摆脱虚拟机!

3.5.2 管理员使用的仿真器

从管理员的观点来看,仿真器主要是各种不同试验的测试区域:安装几十个不同的UNIX变体,并彻底地测试它们。安装一个系统,删除它,然后再重新安装,稍微修改一下其配置。为了获得一份工作,你不仅要有文凭,是你所工作的领域的一个专家,而且还必须具有实际工作经验。对于数据恢复方面的工作来说,也是如此。如果没有进行特殊的准备工作,并不推荐你在你的主操作系统中运行Disk Editor (对于Disk Doctor来说,更是如此)。这是因为,不能保证这类工具能够修正磁盘错误,而不会弄坏你的磁盘。简单地说,仿真器是很好的测试区域,这在过去是难以成真的美梦。

在大型机构中,管理员通常都有镜像服务器,所有的补丁程序都首先会在镜像服务器中进行测试。小型机构难以负担用于这种目的的额外机器。在这种情形中,仿真器就可以大展身手。此外,仿真器还可用于测试各种不同的试验程序。如果证实了程序的弱点,就可以采取紧急措施来改正它。

虚拟机与主操作系统和其他虚拟机之问的交互一般通过LAN(也是虚拟的)来进行。假定你的计算机有512 MB~1024.MB的RAM,就可以通过结构化查询语言(sQL)和Web服务器、一个“隔离带”、一个防火墙和几个工作站来创建一个内部网模型(如图3.9所示)。这个测试完全适合于在一台家用计算机中进行。换句话说,对于测试目的来说,仿真器比任何东西都适合。在仿真器中,你既可以攻击,也可以管理网络。

3.5.3软件开发人员使用的仿真器

驱动程序开发人员是最喜爱仿真器的人群。内核不仅不会自行修正错误,还会报复性地破坏整个硬盘,使得多年积累的数据毁于一旦而不可恢复。对于驱动程序开发人员来说,就像铁道工习惯于火车轮子的咔嗒声,频繁地重新启动和死机是司空见惯的。另外,大多数内核级调试器都要求两台通过LAN或者至少调制解调器相连在一起的计算机。当然,从专业开发人员的观点来看,使用两台计算机并不是过分奢侈。然而,你如何摆放它们呢?不断地左右转动脑袋并不是一件舒服的事情。有时,这就像要将你的脑袋从脖子上拧下来一样!

P43

序言

当电子工业出版社的郭立女士委托我翻译这本《黑客调试技术揭秘》时,我内心是有几分踌躇的。因为我虽然编了多年程序,但是却从来没有做过一天黑客。我怀疑我是否有兴趣将这本600多页的“黑客书”翻译出来,也怀疑这本书对我这样的程序员是否有帮助。但是在走马观花地浏览了一下这本书后,我就发现我被这本书的书名欺骗了。本书实际上是一本帮助应用程序员和系统程序员理解调试过程的书籍。当然,本书名为“黑客”,也不是为了哗众取宠,而是为了突出本书的写作方式是从“黑客”的角度来看待程序(特别是保护机制)的弱点,介绍了黑客利用调试器和反汇编器来寻找程序弱点和实施攻击的方法,提醒程序员应该如何克服程序的弱点、如何抵御“黑客”的各种攻击。但是,正如作者所言,本书既不是一本教授黑客技术的手册,也不是一本关于防御黑客的保护指南,而是一本探索商业程序的保护机制以及学习调试器的工作原理和使用方法的指南。

本书结合带有详尽解释的源代码,揭示了各种调试器实用使用技巧,说明了如何操作调试器以及如何克服障碍和修复调试器。通过本书,程序员将学会如何弄清楚计算机系统内部的结构、如何重建没有提供源程序的程序的运行算法、如何修改程序以及如何调试驱动程序。本书还详细介绍了在Windows和UNIS操作系统中调试应用程序和驱动程序的方法。

本书的作者Kris Kaspersky是一位经验丰富的“代码挖掘者”,他解决了许多与安全和系统编程有关的问题,包括编译器的开发、优化技术、安全机制研究、实时操作系统内核的创建、软件保护,以及反病毒程序的创建等等。他还是一位著作颇丰的技术作家,出版了大量涉及破解、反汇编和代码优化的文章和书籍。

译者通过翻译本书获益匪浅。我编写程序多年,也使用了多年的调试器,但是本书讲述的调试技术中有许多都是我过去没有接触过,甚至没有听说过的。本书的许多内容也使我有恍然大悟之感,解决了多年来的疑惑。本书还有一些内容使我有胆战心惊之感:我们习以为常的许多代码原来都是极不安全的,可能被黑客利用来攻击我们的系统。幸运的是,我从本书中了解到了这些知识,在将来的编程中就能充分利用这些调试技术、有意识地避免存在问题的编码方式。因此,如果你是一名程序员,本书将有益于你编写出健壮安全的程序;如果你对破解程序感兴趣,你将从本书中学到发现程序的弱点并通过这些弱点来破解程序的方法(但是千万不要有违法的行为)。

由于译者的水平所限,翻译这样的一本集“黑”(黑客或者破解者)“白”(应用程序员或者系统程序员)两道技术于一体的技术指南,真是一种挑战。译文中肯定存在错误和疏漏,敬请读者批评指正。

感谢电子工业出版社博文视点资讯有限公司为本书的出版付出的努力。特别感谢本书的责任编辑顾慧芳女士,她细心地改正了许多译者“脑是笔非”的谬误,她的努力和高效使本书得以快速出版。

周长发

2006年4月

随便看

 

霍普软件下载网电子书栏目提供海量电子书在线免费阅读及下载。

 

Copyright © 2002-2024 101bt.net All Rights Reserved
更新时间:2025/1/31 17:23:40