第1章 基础知识 1
1.1文本编码方式 1
1.2 Windows API函数 2
1.2.1 Win API简介 2
1.2.2什么是句柄 4
1.2.3常用Win32 API函数 4
1.3 Windows与Unicode 7
1.3.1 Windows 9x与Unicode 7
1.3.2 Windows 2000/XP与Unicode 9
1.4 Windows消息机制 9
1.5 Windows注册表 12
1.5.1注册表的逻辑结构 12
1.5.2注册表相关函数 13
1.5.3注册表分析软件 15
1.6保护模式简介 17
1.6.1虚拟内存 18
1.6.2保护模式的权限级别 19
第2章 代码分析技术 21
2.1认识PE格式 21
2.1.1 PE格式 21
2.1.2文件偏移地址与虚拟地址转换 23
2.2代码指令 25
2.2.1转移指令机器码的计算 25
2.2.2条件设置指令 28
2.2.3指令修改技巧 29
2.2.4浮点指令 30
2.3逆向分析技术 33
2.3.1函数 33
2.3.2循环 37
2.3.3控制语句 38
2.3.4全局变量 38
2.3.5字串初始化 39
第3章 静态分析技术 40
3.1文件类型分析 40
3.1.1 FileInfo工具 40
3.1.2 PEiD工具 41
3.2资源 42
3.2.1资源黑客的使用 42
3.2.2 eXeScope的使用 44
3.3 W32Dasm使用介绍 44
3.3.1准备工作 44
3.3.2操作步骤 46
3.3.3代码清单的阅读 52
3.4 IDA Pro使用简介 57
3.4.1 IDA文件 58
3.4.2 IDA配置文件 58
3.4.3 IDA菜单选项配置 60
3.4.4打开文件 62
3.4.5 IDA主窗口界面 63
3.4.6注释 64
3.4.7交叉参考 64
3.4.8查找字符串 65
3.4.9参考重命名 65
3.4.10标签的用法 66
3.4.11进制的转换 67
3.4.12手工识别代码和数据 67
3.4.13数组(Arrays) 68
3.4.14结构体(Structures) 68
3.4.15 枚举类型(Enumerated Types) 70
3.4.16堆栈变量 71
3.4.17 IDC脚本 72
3.4.18 FLIRT 77
3.4.19插件 78
3.4.20输出 79
3.4.21小结 80
3.5文件编辑工具 80
3.5.1 Hiew使用 80
3.5.2 HexWorkshop使用 85
3.5.3 WinHex使用 87
3.6静态分析技术应用实例 88
3.6.1解密初步 88
3.6.2逆向工程初步 89
第4章 动态分析技术 92
4.1 SoftICE调试器 92
4.1.1安装 92
4.1.2调试窗口简介 99
4.1.3窗口操作 102
4.1.4 SoftICE配置 105
4.1.5 SoftICE常用命令简介 111
4.1.6 SoftICE调试技术 115
4.1.7 SoftICE的符号调试技术 123
4.1.8断点 132
4.1.9 SoftICE远程调试 139
4.1.10 IceDump和NticeDump的使用 144
4.2 TRW2000调试器 150
4.2.1安装 150
4.2.2配置 150
4.2.3输出信息(Export)的装载 151
4.2.4 TRW2000操作 151
4.2.5条件断点 153
4.2.6符号调试 154
4.3 OllyDbg调试器 154
4.3.1 O11yDbg界面 154
4.3.2基本操作 156
4.3.3实例 157
4.4常见问题小结 158
第5章 软件保护技术及其弱点 160
5.1序列号保护方式 160
5.1.1序列号保护机制 160
5.1.2如何攻击序列号保护 162
5.1.3字符处理代码分析 164
5.1.4注册机制作 167
5.1.5浮点数 172
5.2警告(Nag)窗口 175
5.3时间限制 177
5.3.1计时器 177
5.3.2时间限制 179
5.3.3拆解时间限制保护 180
5.4菜单功能限制 182
5.4.1相关函数 182
5.4.2拆解菜单限制保护 183
5.5 Key File保护 183
5.5.1相关API函数 183
5.5.2拆解Key File的一般思路 185
5.5.3文件监视工具FileMon 185
5.5.4拆解KeyFile保护 187
5.6 CD-Check 192
5.6.1相关函数 192
5.6.2拆解光盘保护 194
5.7只运行一个实例 194
5.7.1实现方案 195
5.7.2实例 196
5.8常用断点设置技巧 196
5.9关于软件保护的一般性建议 197
第6章 加密算法 199
6.1单向散列算法 199
6.1.1 MD5算法 199
6.1.2 SHA算法 201
6.1.3 CRC算法 203
6.2公开密钥算法 206
6.2.1 RSA算法 206
6.2.2 ElGamal算法 212
6.2.3 DSA算法 217
6.3对称算法 218
6.3.1 BlowFish算法 218
6.4其他算法 221
6.4.1 Base64编码 221
6.4.2 Crypto API 222
6.5小结 224
第7章 反编译语言 225
7.1 Visual Basic程序 225
7.1.1 Visual Basic字符编码方式 225
7.1.2 VB3和VB4反编译 226
7.1.3动态分析VB3和VB4程序 226
7.1.4动态分析VB5和VB6程序 229
7.1.5 SmartCheck调试工具 236
7.1.6伪编译(P-code) 241
7.2 Delphi/ C++ Builder程序 250
7.2.1认识Delphi 250
7.2.2 DeDe反编译器 250
7.2.3断点 256
7.3 Java程序 257
7.3.1 JVM指令系统 258
7.3.2 JVM寄存器 258
7.3.3 JVM堆栈结构 258
7.3.4 JVM碎片回收堆 258
7.3.5 JVM存储区 259
7.4 InstallShield反编译 262
7.4.1安装文件构成 262
7.4.2脚本语言反编译 262
7.4.3 IS解密 263
第8章 PE文件格式 265
8.1 PE文件结构 265
8.1.1 PE的基本概念 265
8.1.2 DOS插桩程序 267
8.1.3 PE文件头(IMAGE_NT_HEADERS) 268
8.1.4块表(The Section Table) 274
8.1.5各种块(Sections)的描述 276
8.1.6输入表(Import Table) 277
8.1.7绑定输入(Bound Import) 284
8.1.8输出表(Export Table) 285
8.1.9基址重定位表(Base ReloCation Table) 287
8.1.10资源 290
8.1.11 PE格式小结 292
8.2 PE编辑工具 292
8.2.1 LordPE使用简介 292
8.2.2 PEditor使用简介 295
第9章 增加PE文件功能 296
9.1数据对齐 296
9.2增加区块(Section) 296
9.2.1手工构造区块 297
9.2.2工具辅助构造区块 298
9.3增加输入函数 298
9.3.1手工增加 298
9.3.2工具辅助 299
9.4增加DLL文件 300
9.5窗口函数 301
9.6增加菜单功能 304
9.6.1扩充WndProc 305
9.6.2 Exit菜单 305
9.6.3 Open菜单 306
9.6.4 Save菜单 309
9.7用DLL增加功能 313
9.7.1创建DLL文件 313
9.7.2调用DLL函数 313
9.8修复基址重定位表 314
9.9增加输出函数 317
9.10扩充输出函数功能 318
第10章 反跟踪技术 319
10.1结构化异常处理 319
10.1.1异常列表 319
10.1.2 SEH异常处理 320
10.1.3异常信息 322
10.1.4系统异常调试程序 325
10.1.5异常处理回调函数 327
10.2反调试技术 330
10.3花指令 339
10.4反-反调试技术 344
10.4.1 SuperBPM 344
10.4.2 FrogsICE 344
10.4.3在Windows 2000/XP下隐藏SoftICE 348
10.5反跟踪实例 349
10.5.1 Anti-SoftIICE 349
10.5.2 Anti-Spy 350
10.5.3 Anti-DeDe 351
第11章 加壳与脱壳 353
11.1认识壳 353
11.1.1壳的概念 353
11.1.2壳的加载过程 354
11.2加壳工具 355
11.2.1 ASPack 356
11.2.2 UPX 357
11.2.3 PECompact 357
11.2.4 ASProtect 358
11.2.5 tElock 359
11.2.6幻影(DBPE) 359
11.3专用脱壳软件 359
11.3.1 ASPack 360
11.3.2 UPX 360
11.3.3 ASProtect 361
11.4通用脱壳软件 361
11.4.1 ProcDump使用简介 362
11.4.2 File Scanner使用简介 368
11.5手动脱壳 369
11.5.1查找入口点 369
11.5.2抓取内存映像文件 372
11.5.3重建输入表 375
11.5.4 ImportREC使用指南 379
11.5.5 Revirgin使用指南 385
11.5.6重建可编辑资源 389
11.6压缩保护的壳 389
11.6.1 ASPack的壳 389
11.6.2 PECompact的壳 394
11.6.3 PE-PaCK的壳 397
11.6.4 Petite的壳 401
11.7加密保护的壳 403
11.7.1 ASProtect加密保护 403
11.7.2 tElock加密保护 416
11.8 DLL文件 423
11.8.1 ASPack的壳 424
11.8.2 PECompact的壳 427
11.8.3 UPX的壳 431
11.8.4 ASProtect的壳 434
11.8.5 tElock的壳 435
11.9脱壳小结 437
第12章 补丁技术 439
12.1补丁原理 439
12.1.1文件补丁 439
12.1.2内存补丁 441
12.2补丁工具 443
12.2.1文件补丁工具 443
12.2.2内存补丁工具 445
12.3 SMC补丁技术 445
12.3.1单层SMC技术 446
12.3.2多层SMC技术 447
12.3.3 SMC函数 449
第13章 商用软件保护技术 451
13.1软件狗(Dongles) 451
13.1.1软件狗介绍 451
13.1.2软件狗厂商 452
13.1.3软件狗的弱点 453
13.2 Vbox保护技术 454
13.2.1 Vbox 4.03版本 454
13.2.2 Vbox 4.2版本 456
13.2.3 Vbox 4.3版本 458
13.3 SalesAgent保护技术 459
13.3.1从“现在购买(BUY NOW)”入手 459
13.3.2暴力去除SalesAgent的保护 461
13.4 SoftSENTRY保护技术 462
13.5 TimeLOCK保护技术 464
13.6 Flexlm保护 466
13.6.1 License文件格式 466
13.6.2设置环境变量 468
13.6.3 Flexlm Server 469
13.6.4 FlexGen工具用法 470
13.6.5利用FlexLm SDK解密 472
附录A 浮点指令 477
附录B SoftICE指令手册 480
附录C TRW2000指令手册 517
参考文献 520