第一篇 黑客工具介绍 2
第1章 携黑客工具启程 2
1.1 调试器 2
1.2 反汇编器 6
1.3 反编译器 8
1.4 十六进制编辑器 10
1.5 解包器(Unpacker) 12
1.6 转储器 13
1.7 资源编辑器 14
1.8 窥测器(Spy) 14
1.9 监视器(Monitor) 15
1.10 修正器 17
1.11 受保护光盘复制器 17
第2章 UNIX黑客工具 18
2.1 调试器 18
2.2 反汇编器 21
2.3 窥测器 22
2.4 十六进制编辑器 23
2.5 转储器 24
2.6 自动保护工具 24
第3章 调试器与仿真器的仿真 25
3.1 仿真器概述 25
3.2 历史概况 25
3.2.1 仿真器的应用范围 27
3.2.2 硬件虚拟 31
3.3 流行的仿真器 32
3.3.1 DOSBox 32
3.3.2 Bochs 34
3.3.3 VMware 35
3.3.4 Microsoft Virtual PC 37
3.3.5 Xen 39
3.3.6 最势均力敌的竞争对手 40
3.4 仿真器的选择 41
3.4.1 安全性 41
3.4.2 可扩展性 41
3.4.3 源代码是否可用 41
3.4.4 仿真的质量 42
3.4.5 内置调试器 43
3.4.6 如何在VMware下配置SoftICE 45
第4章 汇编器入门 46
4.1 汇编语言方法论 47
4.2 基于C程序实例解释汇编概念 48
4.3 汇编插入语句 49
4.4 可用的汇编语言工具 50
4.5 汇编编译器的概况与比较 51
4.5.1 评判的基本标准 52
4.5.2 MASM 54
4.5.3 TASM 56
4.5.4 FASM 57
4.5.5 NASM 58
4.5.6 YASM 59
4.5.7 结论 60
第二篇 基本黑客技术 64
第5章 走进黑客门 64
5.1 按密钥类型划分保护机制 67
5.2 保护机制的强度 68
5.3 商业化保护机制的缺点 70
5.4 定制保护机制的实现错误 70
5.4.1 非授权复制与序列号分发 70
5.4.2 试用期及其弱点 71
5.4.3 算法重建 74
5.4.4 磁盘与内存的修改 78
5.4.5 反反汇编器 78
5.4.6 反调试技术 79
5.4.7 反监听器 79
5.4.8 反转储器 79
5.4.9 弥补保护机制 80
5.5 容易导致严重后果的小错误 80
第6章 热身 83
6.1 创建保护机制,并尝试破解 83
6.2 走近反汇编器 85
6.2.1 批反汇编器与交互式反汇编器 86
6.2.2 使用批反汇编器 87
6.2.3 从EXE到CRK 90
6.3 实际的破解范例 101
6.3.1 抑制干扰屏的出现 102
6.3.2 强行注册 105
6.3.3 彻底破解或者驯服“About”对话框 108
6.4 总结 111
第7章 通晓应用程序调试技术 112
7.1 调试简介 112
7.2 配套使用反汇编器与调试器 113
7.3 API函数断点 115
7.4 消息断点 117
7.5 数据断点 118
7.6 展开堆栈 119
7.7 调试DLL 121
7.8 总结 122
第8章 在UNIX与Linux下的特殊调试技术 123
8.1 GDB的基础——ptrace 124
8.1.1 ptrace及其命令 126
8.1.2 GDB对多进程的支持 127
8.1.3 GDB简介 128
8.1.4 跟踪系统调用 131
8.2 用GDB调试二进制文件 133
8.2.1 准备进行文件调试 133
8.2.2 跟踪前的准备 138
第9章 Linice内核调试基础 141
9.1 系统要求 142
9.2 编译与配置Linice 143
9.3 引导系统与启动调试器 144
9.4 Linice的基本使用原理 147
9.5 总结 151
第10章 高级调试专题 152
10.1 SoftICE用做日志记录器 152
10.1.1 热身运动 153
10.1.2 更复杂的过滤器 156
10.1.3 SoftICE的动画型跟踪 159
10.2 随机设置断点的技巧 160
10.2.1 单步跟踪的秘密 161
10.3 通过覆盖方法进行破解 169
10.3.1 总体思路 169
10.3.2 工具的选择 170
10.4 确定代码覆盖的算法 172
10.5 方法的选择 173
10.6 程序破解实例 174
10.7 总结 179
第三篇 高级反汇编技术第11章 反汇编32位PE文件 182
11.1 PE文件结构不同实现形式的特性 182
11.2 PE文件的一般概念与要求 183
11.3 PE文件结构 184
11.4 PE文件的代码插入与删除技术 186
11.4.1 X码概念及其他约定 186
11.4.2 X码的目的与任务 187
11.4.3 对X码的要求 188
11.4.4 插入 189
11.5 总结 215
第12章 在Linux与BSD中反汇编ELF文件 216
12.1 所需要的工具 216
12.2 ELF文件结构 217
12.3 在ELF文件中插入外来码 219
12.3.1 通过合并来感染文件 220
12.3.2 通过扩展文件的最后分区来感染文件 222
12.3.3 通过压缩部分原始文件而感染文件 224
12.3.4 通过扩展文件的代码分区而感染文件 228
12.3.5 通过下移代码分区而感染文件 231
12.3.6 通过创建定制分区而感染文件 233
12.3.7 通过在文件与头结构之间插入代码而感染文件 233
12.3.8 在ELF文件中插入代码的实验 234
12.4 反汇编Linux版tiny-crackme程序 241
12.4.1 剖析tiny-crackme 241
12.5 总结 253
第13章 反汇编x86-64程序 254
13.1 简介 254
13.2 需要的工具 255
13.3 x86-64体系结构概述 258
13.4 切换到64位模式 260
13.5 x86-64平台上的“Hello,World”程序 262
13.6 总结 267
第14章 反汇编与破解Linux内核 268
14.1 反汇编Linux内核 268
14.1.1 内核的外围话题 268
14.1.2 攻击内核 269
14.1.3 深入内核 271
14.1.4 错误所在的位置 275
14.2 内核攻击秘诀 276
14.2.1 修改Linux徽标 276
第15章 高级补丁技术 281
15.1 联机补丁的秘密与诀窍 281
15.1.1 最简单的联机补丁器 282
15.1.2 大比拼 284
15.1.3 截取传递信号的API函数 285
15.1.4 硬件断点 287
15.2 几种鲜为人知的破解客户程序的方法 289
15.2.1 破解客户应用程序的方法概述 289
15.2.2 在不编辑字节的情况下进行修改 289
15.3 Windows NT/2000/XP内核黑码事宜 296
15.3.1 内核结构 296
15.3.2 内核类型 298
15.3.3 修改内核的方法 300
15.3.4 修改启动徽标 306
15.4 BSOD之后还有活路吗 308
15.4.1 用SoftICE克服BSOD 309
15.4.2 自动实现的复活过程 313
15.4.3 这个反BSOD程序安全吗 317
15.5 总结 318
第16章 反汇编其他格式的文件 319
16.1 反汇编PDF文件 319
16.1.1 Adobe Acrobat为那些不循规蹈矩的人提供了什么 320
16.1.2 修改Adobe Acrobat 323
16.1.3 使用打印屏幕功能实施破解 324
16.1.4 尽量多懂几种语言 324
16.1.5 PDF文件结构 324
16.1.6 生成加密密钥 328
16.1.7 攻击U-密码 329
16.1.8 如何动手破解PDF密码 331
16.2 总结 333
第四篇 实用代码探查技术第17章 在Windows上捉迷藏 336
17.1 Windows反调试技术 337
17.1.1 历史在不断地重演 339
17.1.2 自跟踪程序 340
17.1.3 基于物理内存访问的反调试技术 345
17.1.4 Windows 2000/XP SDT Restore如何工作 349
17.2 Windows世界的隐形技术 349
17.2.1 Blue Pill、Red Pill——Windows Longhorn再现《黑客帝国》 350
17.2.2 Blue Pill 350
17.2.3 规避数字签名 350
17.2.4 沉迷于虚拟世界 352
17.2.5 Red Pill 355
17.3 总结 357
第18章 攻克打包器 358
18.1 初步的分析 358
18.2 解包与其他方法 361
18.3 解包算法 361
18.4 搜索原始入口点 362
18.4.1 活动程序转储 362
18.4.2 通过内存中的签名搜索启动代码 364
18.4.3 流行但低效的工具:GetModuleHandleA与fs:0 365
18.4.4 解包器的副作用 369
18.4.5 基于堆栈平衡找到OEP的通用方法 372
18.4.6 如果调试器跳过了解包器入口点怎么办 375
18.5 转储受保护的应用程序 377
18.5.1 简单转储案例 377
18.5.2 自行搜索 381
18.5.3 从外部查看转储内容 382
18.5.4 动态解密机制 383
18.5.5 对内部数据进行转储 384
18.5.6 打包器的诡计 386
18.6 总结 388
第19章 攻克代码混淆 389
19.1 混码器如何发挥作用 390
19.2 如何破解混淆程序 394
19.2.1 解除代码混淆 395
19.3 黑盒方法 397
19.4 虚拟机牢笼 398
19.5 总结 399
第20章 攻克Linux与BSD打包器 400
20.1 打包器对性能的影响 400
20.2 ELFCrypt 401
20.3 UPX 408
20.4 Burneye 410
20.5 Shiva 413
20.6 打包器的比较 414
20.7 总结 415
第21章 调试与反汇编恶意软件 416
21.1 用调试器反监视 416
21.1.1 时间也会留下印记 416
21.1.2 进程树 418
21.1.3 查看线程 420
21.1.4 恢复系统服务表 426
21.2 攻击程序的核查与反汇编 430
21.2.1 如何反汇编攻击程序 431
21.2.2 分析消息排队攻击程序 432
21.2.3 如何在调试器下运行外壳码 443
21.3 总结 444