基础篇
第1章 基础知识 2
1.1 什么是加密与解密 2
1.2 文本字符 4
1.3 Windows操作系统 6
调试篇
第2章 动态分析技术 14
2.1 OllyDbg调试器 14
2.2 x64dbg调试器 42
2.3 MDebug调试器 44
2.4 WinDbg调试器 47
第3章 静态分析技术 60
3.1 文件类型分析 60
3.2 反汇编引擎 61
3.3 静态反汇编 65
3.4 十六进制工具 94
3.5 静态分析技术应用实例 97
解密篇
第4章 逆向分析技术 102
4.1 32位软件逆向技术 102
4.2 64位软件逆向技术 131
第5章 演示版保护技术 194
5.1 序列号保护方式 194
5.2 警告窗口 203
5.3 时间限制 205
5.4 菜单功能限制 207
5.5 KeyFile保护 208
5.6 网络验证 213
5.7 光盘检测 219
5.8 只运行1个实例 221
5.9 常用断点设置技巧 222
第6章 加密算法 223
6.1 单向散列算法 223
6.2 对称加密算法 231
6.3 公开密钥加密算法 259
6.4 其他算法 279
6.5 常见的加密库接口及其识别 281
6.6 加密算法在软件保护中的应用 285
系统篇
第7章 Windows内核基础 290
7.1 内核理论基础 290
7.2 内核重要数据结构 298
7.3 内核调试基础 306
第8章 Windows下的异常处理 313
8.1 异常处理的基本概念 313
8.2 SEH的概念及基本知识 319
8.3 SEH异常处理程序原理及设计 325
8.4 向量化异常处理 361
8.5 x64平台上的异常处理 363
8.6 异常处理程序设计中的注意事项 367
8.7 异常处理的实际应用 368
8.8 本章小结 371
第9章 Win32调试API 372
9.1 调试相关函数简要说明 372
9.2 调试事件 375
9.3 创建并跟踪进程 377
9.4 调试循环体 378
9.5 处理调试事件 379
9.6 线程环境 380
9.7 将代码注入进程 382
第10章 VT技术 384
10.1 硬件虚拟化的基本概念 384
10.2 VT技术的应用 389
10.3 VT调试方法 401
第11章 PE文件格式 404
11.1 PE的基本概念 405
11.2 MS-DOS头部 407
11.3 PE文件头 408
11.4 区块 415
11.5 输入表 421
11.6 绑定输入 428
11.7 输出表 429
11.8 基址重定位 432
11.9 资源 435
11.10 TLS初始化 440
11.11 调试目录 441
11.12 延迟载入数据 441
11.13 程序异常数据 442
11.14 .NET头部 442
11.15 编写PE分析工具 443
第12章 注入技术 450
12.1 DLL注入方法 450
12.2 DLL注入的应用 491
12.3 DLL注入的防范 491
第13章 Hook技术 497
13.1 Hook概述 497
13.2 Hook的分类 500
13.3 Hook位置的挑选 515
13.4 Hook的典型过程 519
13.5 Detour函数的典型用法 533
13.6 Hook中的注意事项 536
13.7 Hook在x64平台上的新问题 541
13.8 Hook技术的应用 543
13.9 Hook的检测、恢复与对抗 544
13.10 本章小结 546
漏洞篇
第14章 漏洞分析技术 548
14.1 软件漏洞原理 548
14.2 Shellcode 555
14.3 漏洞利用 566
14.4 漏洞样本 572
14.5 样本分析 573
脱壳篇
第15章 专用加密软件 588
15.1 认识壳 588
15.2 压缩壳 589
15.3 加密壳 590
15.4 虚拟机保护软件 592
第16章 脱壳技术 594
16.1 基础知识 594
16.2 寻找OEP 596
16.3 抓取内存映像 603
16.4 重建输入表 606
16.5 DLL文件脱壳 615
16.6 附加数据 621
16.7 PE文件的优化 623
16.8 压缩壳 626
16.9 加密壳 633
16.10 静态脱壳 637
保护篇
第17章 软件保护技术 644
17.1 防范算法求逆 644
17.2 抵御静态分析 647
17.3 文件完整性检验 655
17.4 代码与数据结合 659
17.5 关于软件保护的若干忠告 663
第18章 反跟踪技术 665
18.1 由BeingDebugged引发的蝴蝶效应 665
18.2 回归Native:用户态的梦魇 676
18.3 真正的奥秘:小技巧一览 696
第19章 外壳编写基础 705
19.1 外壳的结构 705
19.2 加壳主程序 706
19.3 用汇编写外壳部分 721
19.4 用C++编写外壳部分 734
第20章 虚拟机的设计 739
20.1 虚拟机保护技术原理 739
20.2 启动框架和调用约定 740
20.3 Handler的设计 743
20.4 托管代码的异常处理 749
20.5 本章小结 757
第21章 VMProtect逆向和还原浅析 758
21.1 VMProtect逆向分析 758
21.2 VMProtect的还原 765
软件重构篇
第22章 补丁技术 794
22.1 文件补丁 794
22.2 内存补丁 795
22.3 SMC补丁技术 813
22.4 补丁工具 816
第23章 代码的二次开发 818
23.1 数据对齐 818
23.2 增加空间 818
23.3 获得函数的调用信息 820
23.4 代码的重定位 822
23.5 增加输出函数 825
23.6 消息循环 826
23.7 菜单扩展 829
23.8 DLL扩展 833
语言和平台篇
第24章 .NET平台加解密 838
24.1 .NET概述 838
24.2 MSIL与元数据 841
24.3 代码分析与修改技术 851
24.4 .NET代码保护技术及其逆向 857
24.5 本章小结 876
取证篇
第25章 数据取证技术 878
25.1 硬盘数据的获取和固定 878
25.2 硬盘的分区和数据恢复 882
25.3 内存分析 890
25.4 动态仿真技术 897
25.5 注册表 900
25.6 文件格式 903
评论0