加密与解密(第4版)
基础篇
第1章 基础知识2
1.1 什么是加密与解密2
1.1.1 软件的加密与解密2
1.1.2 软件逆向工程2
1.1.3 逆向分析技术3
1.2 文本字符4
1.2.1 ASCII与Unicode字符集4
1.2.2 字节存储顺序6
1.3 Windows操作系统6
查看完整
第1章 基础知识2
1.1 什么是加密与解密2
1.1.1 软件的加密与解密2
1.1.2 软件逆向工程2
1.1.3 逆向分析技术3
1.2 文本字符4
1.2.1 ASCII与Unicode字符集4
1.2.2 字节存储顺序6
1.3 Windows操作系统6
查看完整
段钢,国内信息安全领域具有广泛影响力的安全网站看雪学院的创始人和运营管理者,长期致力于信息安全技术研究,对当前安全技术的发展有深入思考。参与和组织专业人士推出的十多部技术专著和相关书籍,有不少入选为大学信息技术专业的教辅材料,如《加密与解密》等,影响广泛。在盛大和众人网络的多年工作经历,使得对安全防护有深刻的认识和理解。在2016年创建上海看雪科技有限公司,项目以看雪学院为基础,构建一个提供B2B、B2C信息安全服务的综合平台。
本书以软件逆向为切入点,讲述了软件安全领域相关的基础知识和技能。读者阅读本书后,很容易就能在逆向分析、漏洞分析、安全编程、病毒分析等领域进行扩展。这些知识点的相互关联,将促使读者开阔思路,融会贯通,领悟更多的学习方法,提升自身的学习能力。本书适合安全技术相关工作者、对逆向调试技术感兴趣的人、对软件保护感兴趣的软件开发人员、相关专业在校学生及关注个人信息安全、计算机安全技术并想了解技术内幕的读者阅读。
基础篇
第1章 基础知识2
1.1 什么是加密与解密2
1.1.1 软件的加密与解密2
1.1.2 软件逆向工程2
1.1.3 逆向分析技术3
1.2 文本字符4
1.2.1 ASCII与Unicode字符集4
1.2.2 字节存储顺序6
1.3 Windows操作系统6
1.3.1 Win32 API函数6
1.3.2 WOW649
1.3.3 Windows消息机制9
1.3.4 虚拟内存11
调试篇
第2章 动态分析技术14
2.1 OllyDbg调试器14
2.1.1 OllyDbg的界面14
2.1.2 OllyDbg的配置15
2.1.3 基本操作16
2.1.4 常用断点27
2.1.5 插件35
2.1.6 Run trace36
2.1.7 Hit trace37
2.1.8 调试符号37
2.1.9 加载程序39
2.1.10 OllyDbg的常见问题40
2.2 x64dbg调试器42
2.3 MDebug调试器44
2.3.1 MDebug的界面44
2.3.2 表达式45
2.3.3 调试45
2.3.4 断点46
2.3.5 MDebug的其他功能47
2.4 WinDbg调试器47
2.4.1 WinDbg的安装与配置47
2.4.2 调试过程51
2.4.3 断点命令51
2.4.4 栈窗口53
2.4.5 内存命令55
2.4.6 脚本56
2.4.7 调试功能扩展58
2.4.8 小结59
第3章 静态分析技术60
3.1 文件类型分析60
3.2 反汇编引擎61
3.2.1 OllyDbg的ODDisasm61
3.2.2 BeaEngine61
3.2.3 Udis8661
3.2.4 Capstone62
3.2.5 AsmJit63
3.2.6 Keystone64
3.2.7 小结64
3.3 静态反汇编65
3.3.1 IDA Pro简介65
3.3.2 IDA的配置66
3.3.3 IDA主窗口68
3.3.4 交叉参考69
3.3.5 参考重命名70
3.3.6 标签的用法71
3.3.7 格式化指令操作数71
3.3.8 函数的操作72
3.3.9 代码和数据转换72
3.3.10 字符串73
3.3.11 数组74
3.3.12 结构体75
3.3.13 枚举类型79
3.3.14 变量80
3.3.15 FLIRT81
3.3.16 IDC脚本82
3.3.17 插件86
3.3.18 IDA调试器87
3.3.19 远程调试90
3.3.20 其他功能93
3.3.21 小结94
3.4 十六进制工具94
3.5 静态分析技术应用实例97
3.5.1 解密初步97
3.5.2 逆向工程初步99
解密篇
第4章 逆向分析技术102
4.1 32位软件逆向技术102
4.1.1 启动函数102
4.1.2 函数103
4.1.3 数据结构111
4.1.4 虚函数115
4.1.5 控制语句117
4.1.6 循环语句124
4.1.7 数学运算符125
4.1.8 文本字符串128
4.1.9 指令修改技巧130
4.2 64位软件逆向技术131
4.2.1 寄存器131
4.2.2 函数132
4.2.3 数据结构142
4.2.4 控制语句145
4.2.5 循环语句154
4.2.6 数学运算符158
4.2.7 虚函数169
4.2.8 小结193
第5章 演示版保护技术194
5.1 序列号保护方式194
5.1.1 序列号保护机制194
5.1.2 如何攻击序列号保护机制195
5.1.3 字符串比较形式197
5.1.4 制作注册机198
5.2 警告窗口203
5.3 时间限制205
5.3.1 计时器205
5.3.2 时间限制205
5.3.3 拆解时间限制保护206
5.4 菜单功能限制207
5.4.1 相关函数207
5.4.2 拆解菜单限制保护208
5.5 KeyFile保护208
5.5.1 相关API函数208
5.5.2 拆解KeyFile保护209
5.6 网络验证213
5.6.1 相关函数214
5.6.2 破解网络验证的一般思路214
5.7 光盘检测219
5.7.1 相关函数219
5.7.2 拆解光盘保护220
5.8 只运行1个实例221
5.8.1 实现方法221
5.8.2 实例222
5.9 常用断点设置技巧222
第6章 加密算法223
6.1 单向散列算法223
6.1.1 MD5算法223
6.1.2 SHA算法227
6.1.3 SM3密码杂凑算法231
6.1.4 小结231
6.2 对称加密算法231
6.2.1 RC4流密码231
6.2.2 TEA算法233
6.2.3 IDEA算法236
6.2.4 BlowFish算法243
6.2.5 AES算法246
6.2.6 SM4分组密码算法259
6.2.7 小结259
6.3 公开密钥加密算法259
6.3.1 RSA算法260
6.3.2 ElGamal公钥算法264
6.3.3 DSA数字签名算法270
6.3.4 椭圆曲线密码编码学272
6.3.5 SM2算法279
6.4 其他算法279
6.4.1 CRC32算法279
6.4.2 Base64编码280
6.5 常见的加密库接口及其识别281
6.5.1 Miracl大数运算库281
6.5.2 FGInt283
6.5.3 其他加密算法库介绍284
6.6 加密算法在软件保护中的应用285
系统篇
第7章 Windows内核基础290
7.1 内核理论基础290
7.1.1 权限级别290
7.1.2 内存空间布局291
7.1.3 Windows与内核启动过程292
7.1.4 Windows R3与R0通信294
7.1.5 内核函数296
7.1.6 内核驱动模块297
7.2 内核重要数据结构298
7.2.1 内核对象298
7.2.2 SSDT300
7.2.3 TEB302
7.2.4 PEB304
7.3 内核调试基础306
7.3.1 使用WinDbg搭建双机调试环境306
7.3.2 加载内核驱动并设置符号表308
7.3.3 SSDT与Shadow SSDT的查看311
第8章 Windows下的异常处理313
8.1 异常处理的基本概念313
8.1.1 异常列表313
8.1.2 异常处理的基本过程314
8.2 SEH的概念及基本知识319
8.2.1 SEH的相关数据结构319
8.2.2 SEH处理程序的安装和卸载320
8.2.3 SEH实例跟踪321
8.3 SEH异常处理程序原理及设计325
8.3.1 异常分发的详细过程325
8.3.2 线程异常处理330
8.3.3 异常处理的栈展开336
8.3.4 MSC编译器对线程异常处理的增强342
8.3.5 顶层异常处理349
8.3.6 异常处理程序的安全性357
8.4 向量化异常处理361
8.4.1 向量化异常处理的使用361
8.4.2 VEH与SEH的异同362
8.4.3 向量化异常处理的新内容363
8.5 x64平台上的异常处理363
8.5.1 原生x64程序的异常分发364
8.5.2 WOW64下的异常分发366
8.6 异常处理程序设计中的注意事项367
8.7 异常处理的实际应用368
8.7.1 使用SEH对用户输入进行验证368
8.7.2 SEH在加密与解密中的应用369
8.7.3 用VEH实现API Hook371
8.8 本章小结371
第9章 Win32调试API372
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.1.1 概述384
10.1.2 相关结构和汇编指令385
10.1.3 EPT机制388
10.2 VT技术的应用389
10.2.1 编译运行ShadowWalker389
10.2.2 分析Hypervisor390
10.2.3 检测VT支持情况392
10.2.4 VMCS的配置393
10.2.5 EPT的配置396
10.2.6 开启VT399
10.2.7 内存隐藏的实现399
10.3 VT调试方法401
第11章 PE文件格式404
11.1 PE的基本概念405
11.1.1 基地址405
11.1.2 虚拟地址406
11.1.3 相对虚拟地址406
11.1.4 文件偏移地址407
11.2 MS-DOS头部407
11.3 PE文件头408
11.3.1 Signature字段408
11.3.2 IMAGE_FILE_HEADER结构409
11.3.3 IMAGE_OPTIONAL_HEADER结构410
11.4 区块415
11.4.1 区块表415
11.4.2 常见区块与区块合并417
11.4.3 区块的对齐值419
11.4.4 文件偏移与虚拟地址的转换419
11.5 输入表421
11.5.1 输入函数的调用421
11.5.2 输入表的结构422
11.5.3 输入地址表424
11.5.4 输入表实例分析424
11.6 绑定输入428
11.7 输出表429
11.7.1 输出表的结构430
11.7.2 输出表实例分析431
11.8 基址重定位432
11.8.1 基址重定位的概念432
11.8.2 基址重定位表的结构433
11.8.3 基址重定位表实例分析434
11.9 资源435
11.9.1 资源结构435
11.9.2 资源结构实例分析438
11.9.3 资源编辑工具440
11.10 TLS初始化440
11.11 调试目录441
11.12 延迟载入数据441
11.13 程序异常数据442
11.14 .NET头部442
11.15 编写PE分析工具443
11.15.1 检查文件格式443
11.15.2 读取FileHeader和OptionalHeader的内容444
11.15.3 得到数据目录表信息445
11.15.4 得到区块表信息446
11.15.5 得到输出表信息447
11.15.6 得到输入表信息448
第12章 注入技术450
12.1 DLL注入方法450
12.1.1 通过干预输入表处理过程加载目标DLL450
12.1.2 改变程序运行流程使其主动加载目标DLL466
12.1.3 利用系统机制加载DLL484
12.2 DLL注入的应用491
12.3 DLL注入的防范491
12.3.1 驱动层防范491
12.3.2 应用层防范493
第13章 Hook技术497
13.1 Hook概述497
13.1.1 IAT Hook篡改MessageBox消息497
13.1.2 Inline Hook篡改指定MessageBox消息499
13.2 Hook的分类500
13.2.1 Address Hook501
13.2.2 Inline Hook511
13.2.3 基于异常处理的Hook513
13.2.4 不是Hook的Hook514
13.3 Hook位置的挑选515
13.4 Hook的典型过程519
13.4.1 Address Hook的实施过程519
13.4.2 Inline Hook的实施过程526
13.4.3 基于异常处理的Hook实施过程529
13.4.4 二次Hook的注意事项532
13.4.5 通用Hook引擎的实现533
13.5 Detour函数的典型用法533
13.6 Hook中的注意事项536
13.7 Hook在x64平台上的新问题541
13.8 Hook技术的应用543
13.9 Hook的检测、恢复与对抗544
13.9.1 Hook的检
^ 收 起
第1章 基础知识2
1.1 什么是加密与解密2
1.1.1 软件的加密与解密2
1.1.2 软件逆向工程2
1.1.3 逆向分析技术3
1.2 文本字符4
1.2.1 ASCII与Unicode字符集4
1.2.2 字节存储顺序6
1.3 Windows操作系统6
1.3.1 Win32 API函数6
1.3.2 WOW649
1.3.3 Windows消息机制9
1.3.4 虚拟内存11
调试篇
第2章 动态分析技术14
2.1 OllyDbg调试器14
2.1.1 OllyDbg的界面14
2.1.2 OllyDbg的配置15
2.1.3 基本操作16
2.1.4 常用断点27
2.1.5 插件35
2.1.6 Run trace36
2.1.7 Hit trace37
2.1.8 调试符号37
2.1.9 加载程序39
2.1.10 OllyDbg的常见问题40
2.2 x64dbg调试器42
2.3 MDebug调试器44
2.3.1 MDebug的界面44
2.3.2 表达式45
2.3.3 调试45
2.3.4 断点46
2.3.5 MDebug的其他功能47
2.4 WinDbg调试器47
2.4.1 WinDbg的安装与配置47
2.4.2 调试过程51
2.4.3 断点命令51
2.4.4 栈窗口53
2.4.5 内存命令55
2.4.6 脚本56
2.4.7 调试功能扩展58
2.4.8 小结59
第3章 静态分析技术60
3.1 文件类型分析60
3.2 反汇编引擎61
3.2.1 OllyDbg的ODDisasm61
3.2.2 BeaEngine61
3.2.3 Udis8661
3.2.4 Capstone62
3.2.5 AsmJit63
3.2.6 Keystone64
3.2.7 小结64
3.3 静态反汇编65
3.3.1 IDA Pro简介65
3.3.2 IDA的配置66
3.3.3 IDA主窗口68
3.3.4 交叉参考69
3.3.5 参考重命名70
3.3.6 标签的用法71
3.3.7 格式化指令操作数71
3.3.8 函数的操作72
3.3.9 代码和数据转换72
3.3.10 字符串73
3.3.11 数组74
3.3.12 结构体75
3.3.13 枚举类型79
3.3.14 变量80
3.3.15 FLIRT81
3.3.16 IDC脚本82
3.3.17 插件86
3.3.18 IDA调试器87
3.3.19 远程调试90
3.3.20 其他功能93
3.3.21 小结94
3.4 十六进制工具94
3.5 静态分析技术应用实例97
3.5.1 解密初步97
3.5.2 逆向工程初步99
解密篇
第4章 逆向分析技术102
4.1 32位软件逆向技术102
4.1.1 启动函数102
4.1.2 函数103
4.1.3 数据结构111
4.1.4 虚函数115
4.1.5 控制语句117
4.1.6 循环语句124
4.1.7 数学运算符125
4.1.8 文本字符串128
4.1.9 指令修改技巧130
4.2 64位软件逆向技术131
4.2.1 寄存器131
4.2.2 函数132
4.2.3 数据结构142
4.2.4 控制语句145
4.2.5 循环语句154
4.2.6 数学运算符158
4.2.7 虚函数169
4.2.8 小结193
第5章 演示版保护技术194
5.1 序列号保护方式194
5.1.1 序列号保护机制194
5.1.2 如何攻击序列号保护机制195
5.1.3 字符串比较形式197
5.1.4 制作注册机198
5.2 警告窗口203
5.3 时间限制205
5.3.1 计时器205
5.3.2 时间限制205
5.3.3 拆解时间限制保护206
5.4 菜单功能限制207
5.4.1 相关函数207
5.4.2 拆解菜单限制保护208
5.5 KeyFile保护208
5.5.1 相关API函数208
5.5.2 拆解KeyFile保护209
5.6 网络验证213
5.6.1 相关函数214
5.6.2 破解网络验证的一般思路214
5.7 光盘检测219
5.7.1 相关函数219
5.7.2 拆解光盘保护220
5.8 只运行1个实例221
5.8.1 实现方法221
5.8.2 实例222
5.9 常用断点设置技巧222
第6章 加密算法223
6.1 单向散列算法223
6.1.1 MD5算法223
6.1.2 SHA算法227
6.1.3 SM3密码杂凑算法231
6.1.4 小结231
6.2 对称加密算法231
6.2.1 RC4流密码231
6.2.2 TEA算法233
6.2.3 IDEA算法236
6.2.4 BlowFish算法243
6.2.5 AES算法246
6.2.6 SM4分组密码算法259
6.2.7 小结259
6.3 公开密钥加密算法259
6.3.1 RSA算法260
6.3.2 ElGamal公钥算法264
6.3.3 DSA数字签名算法270
6.3.4 椭圆曲线密码编码学272
6.3.5 SM2算法279
6.4 其他算法279
6.4.1 CRC32算法279
6.4.2 Base64编码280
6.5 常见的加密库接口及其识别281
6.5.1 Miracl大数运算库281
6.5.2 FGInt283
6.5.3 其他加密算法库介绍284
6.6 加密算法在软件保护中的应用285
系统篇
第7章 Windows内核基础290
7.1 内核理论基础290
7.1.1 权限级别290
7.1.2 内存空间布局291
7.1.3 Windows与内核启动过程292
7.1.4 Windows R3与R0通信294
7.1.5 内核函数296
7.1.6 内核驱动模块297
7.2 内核重要数据结构298
7.2.1 内核对象298
7.2.2 SSDT300
7.2.3 TEB302
7.2.4 PEB304
7.3 内核调试基础306
7.3.1 使用WinDbg搭建双机调试环境306
7.3.2 加载内核驱动并设置符号表308
7.3.3 SSDT与Shadow SSDT的查看311
第8章 Windows下的异常处理313
8.1 异常处理的基本概念313
8.1.1 异常列表313
8.1.2 异常处理的基本过程314
8.2 SEH的概念及基本知识319
8.2.1 SEH的相关数据结构319
8.2.2 SEH处理程序的安装和卸载320
8.2.3 SEH实例跟踪321
8.3 SEH异常处理程序原理及设计325
8.3.1 异常分发的详细过程325
8.3.2 线程异常处理330
8.3.3 异常处理的栈展开336
8.3.4 MSC编译器对线程异常处理的增强342
8.3.5 顶层异常处理349
8.3.6 异常处理程序的安全性357
8.4 向量化异常处理361
8.4.1 向量化异常处理的使用361
8.4.2 VEH与SEH的异同362
8.4.3 向量化异常处理的新内容363
8.5 x64平台上的异常处理363
8.5.1 原生x64程序的异常分发364
8.5.2 WOW64下的异常分发366
8.6 异常处理程序设计中的注意事项367
8.7 异常处理的实际应用368
8.7.1 使用SEH对用户输入进行验证368
8.7.2 SEH在加密与解密中的应用369
8.7.3 用VEH实现API Hook371
8.8 本章小结371
第9章 Win32调试API372
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.1.1 概述384
10.1.2 相关结构和汇编指令385
10.1.3 EPT机制388
10.2 VT技术的应用389
10.2.1 编译运行ShadowWalker389
10.2.2 分析Hypervisor390
10.2.3 检测VT支持情况392
10.2.4 VMCS的配置393
10.2.5 EPT的配置396
10.2.6 开启VT399
10.2.7 内存隐藏的实现399
10.3 VT调试方法401
第11章 PE文件格式404
11.1 PE的基本概念405
11.1.1 基地址405
11.1.2 虚拟地址406
11.1.3 相对虚拟地址406
11.1.4 文件偏移地址407
11.2 MS-DOS头部407
11.3 PE文件头408
11.3.1 Signature字段408
11.3.2 IMAGE_FILE_HEADER结构409
11.3.3 IMAGE_OPTIONAL_HEADER结构410
11.4 区块415
11.4.1 区块表415
11.4.2 常见区块与区块合并417
11.4.3 区块的对齐值419
11.4.4 文件偏移与虚拟地址的转换419
11.5 输入表421
11.5.1 输入函数的调用421
11.5.2 输入表的结构422
11.5.3 输入地址表424
11.5.4 输入表实例分析424
11.6 绑定输入428
11.7 输出表429
11.7.1 输出表的结构430
11.7.2 输出表实例分析431
11.8 基址重定位432
11.8.1 基址重定位的概念432
11.8.2 基址重定位表的结构433
11.8.3 基址重定位表实例分析434
11.9 资源435
11.9.1 资源结构435
11.9.2 资源结构实例分析438
11.9.3 资源编辑工具440
11.10 TLS初始化440
11.11 调试目录441
11.12 延迟载入数据441
11.13 程序异常数据442
11.14 .NET头部442
11.15 编写PE分析工具443
11.15.1 检查文件格式443
11.15.2 读取FileHeader和OptionalHeader的内容444
11.15.3 得到数据目录表信息445
11.15.4 得到区块表信息446
11.15.5 得到输出表信息447
11.15.6 得到输入表信息448
第12章 注入技术450
12.1 DLL注入方法450
12.1.1 通过干预输入表处理过程加载目标DLL450
12.1.2 改变程序运行流程使其主动加载目标DLL466
12.1.3 利用系统机制加载DLL484
12.2 DLL注入的应用491
12.3 DLL注入的防范491
12.3.1 驱动层防范491
12.3.2 应用层防范493
第13章 Hook技术497
13.1 Hook概述497
13.1.1 IAT Hook篡改MessageBox消息497
13.1.2 Inline Hook篡改指定MessageBox消息499
13.2 Hook的分类500
13.2.1 Address Hook501
13.2.2 Inline Hook511
13.2.3 基于异常处理的Hook513
13.2.4 不是Hook的Hook514
13.3 Hook位置的挑选515
13.4 Hook的典型过程519
13.4.1 Address Hook的实施过程519
13.4.2 Inline Hook的实施过程526
13.4.3 基于异常处理的Hook实施过程529
13.4.4 二次Hook的注意事项532
13.4.5 通用Hook引擎的实现533
13.5 Detour函数的典型用法533
13.6 Hook中的注意事项536
13.7 Hook在x64平台上的新问题541
13.8 Hook技术的应用543
13.9 Hook的检测、恢复与对抗544
13.9.1 Hook的检
^ 收 起
段钢,国内信息安全领域具有广泛影响力的安全网站看雪学院的创始人和运营管理者,长期致力于信息安全技术研究,对当前安全技术的发展有深入思考。参与和组织专业人士推出的十多部技术专著和相关书籍,有不少入选为大学信息技术专业的教辅材料,如《加密与解密》等,影响广泛。在盛大和众人网络的多年工作经历,使得对安全防护有深刻的认识和理解。在2016年创建上海看雪科技有限公司,项目以看雪学院为基础,构建一个提供B2B、B2C信息安全服务的综合平台。
本书以软件逆向为切入点,讲述了软件安全领域相关的基础知识和技能。读者阅读本书后,很容易就能在逆向分析、漏洞分析、安全编程、病毒分析等领域进行扩展。这些知识点的相互关联,将促使读者开阔思路,融会贯通,领悟更多的学习方法,提升自身的学习能力。本书适合安全技术相关工作者、对逆向调试技术感兴趣的人、对软件保护感兴趣的软件开发人员、相关专业在校学生及关注个人信息安全、计算机安全技术并想了解技术内幕的读者阅读。
比价列表