zhouxinhuagg

《加密与解密(第4版)》PDF+光盘

作者: zhouxinhuagg 发布时间: 2020-03-20 4.88K 人阅读

《加密与解密(第4版)》PDF+光盘

 

本资源由JAD资源网收集整理丨WWW.JIUANDUN.COM

目 录

基础篇

第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 虚拟内存10

调试篇

第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 SSDT表300

7.2.3 TEB302

7.2.4 PEB304

7.3 内核调试基础306

7.3.1 WinDbg搭建双机调试环境306

7.3.2 加载内核驱动并设置符号表308

7.3.3 SSDT与ShadowSSDT表的查看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 文件偏移与虚拟地址转换420

11.5 输入表421

11.5.1 输入函数的调用421

11.5.2 输入表结构422

11.5.3 输入地址表424

11.5.4 输入表实例分析425

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头部443

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注入的作用490

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的Hook515

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的检测与恢复544

13.9.2 Hook对抗545

13.10 本章小结546

漏洞篇

第14章 漏洞分析技术548

14.1 软件漏洞原理548

14.1.1 缓冲区溢出漏洞548

14.1.2 整型溢出漏洞553

14.1.3 UAF漏洞555

14.2 Shellcode555

14.2.1 Shellcode结构556

14.2.2 Shellcode通用技术559

14.2.3 实战Shellcode编写560

14.3 漏洞利用566

14.3.1 漏洞利用的基本技术567

14.3.2 漏洞利用高级技术570

14.4 漏洞样本572

14.5 样本分析573

14.5.1 准备工作573

14.5.2 静态分析574

14.5.3 动态调试576

14.5.4 追根溯源581

14.5.5 小结585

脱壳篇

第15章 专用加密软件588

15.1 认识壳588

15.1.1 壳的概念588

15.1.2 压缩引擎589

15.2 压缩壳589

15.2.1 UPX589

15.2.2 ASPack590

15.3 加密壳590

15.3.1 ASProtect590

15.3.2 Armadillo590

15.3.3 EXECryptor591

15.3.4 Themida591

15.4 虚拟机保护软件592

15.4.1 虚拟机介绍592

15.4.2 VMProtect简介592

第16章 脱壳技术594

16.1 基础知识594

16.1.1 壳的加载过程594

16.1.2 脱壳机595

16.1.3 手动脱壳596

16.2 寻找OEP596

16.2.1 根据跨段指令寻找OEP596

16.2.2 用内存访问断点寻找OEP600

16.2.3 根据栈平衡原理寻找OEP601

16.2.4 根据编译语言特点寻找OEP602

16.3 抓取内存映像603

16.3.1 Dump原理603

16.3.2 反Dump技术604

16.4 重建输入表606

16.4.1 输入表重建的原理606

16.4.2 确定IAT的地址和大小607

16.4.3 根据IAT重建输入表608

16.4.4 Import REC重建输入表611

16.4.5 输入表加密概括614

16.5 DLL文件脱壳615

16.5.1 寻找OEP615

16.5.2 Dump映像文件617

16.5.3 重建DLL的输入表618

16.5.4 构造重定位表619

16.6 附加数据621

16.7 PE文件的优化623

16.8 压缩壳626

16.8.1 UPX外壳626

16.8.2 ASPack外壳629

16.9 加密壳633

16.10 静态脱壳637

16.10.1 外壳Loader分析637

16.10.2 编写静态脱壳器641

保护篇

第17章 软件保护技术644

17.1 防范算法求逆644

17.1.1 基本概念644

17.1.2 堡垒战术645

17.1.3 游击战术646

17.2 抵御静态分析647

17.2.1 花指令647

17.2.2 SMC技术实现649

17.2.3 信息隐藏653

17.2.4 简单的多态变形技术654

17.3 文件完整性检验655

17.3.1 磁盘文件校验实现655

17.3.2 校验和657

17.3.3 内存映像校验657

17.4 代码与数据结合技术659

17.4.1 准备工作660

17.4.2 加密算法的选用661

17.4.3 手动加密代码661

17.4.4 使 .text区块可写662

17.5 软件保护的若干忠告663

第18章 反跟踪技术665

18.1 由BeingDebugged引发的蝴蝶效应665

18.1.1 BeingDebugged665

18.1.2 NtGlobalFlag669

18.1.3 Heap Magic671

18.1.4 从源头消灭BeingDebugged676

18.2 回归Native:用户态的梦魇676

18.2.1 CheckRemoteDebuggerPresent677

18.2.2 ProcessDebugPort677

18.2.3 ThreadHideFromDebugger680

18.2.4 DebugObject682

18.2.5 SystemKernelDebuggerInformation686

18.2.6 Native API688

18.2.7 Hook和AntiHook693

18.3 真正的奥秘:小技巧一览696

18.3.1 SoftICE检测方法696

18.3.2 OllyDbg检测方法698

18.3.3 调试器漏洞700

18.3.4 防止调试器附加701

18.3.5 父进程检测703

18.3.6 时间差703

18.3.7 通过Trap Flag检测704

18.3.8 双进程保护704

第19章 外壳编写基础746

19.1 外壳的结构746

19.2 加壳主程序747

19.2.1 判断文件是否为PE格式747

19.2.2 文件基本数据读入747

19.2.3 附加数据的读取749

19.2.4 输入表的处理749

19.2.5 重定位表的处理752

19.2.6 文件的压缩754

19.2.7 资源数据的处理757

19.2.8 区块的融合761

19.3 用汇编写外壳部分762

19.3.1 外壳的加载过程762

19.3.2 自建输入表763

19.3.3 外壳引导段764

19.3.4 外壳第2段767

19.3.5 将外壳部分添加至原程序772

19.4 用C++ 编写外壳部分775

第20章 虚拟机的设计780

20.1 虚拟机保护技术原理780

20.1.1 反汇编引擎780

20.1.2 指令分类780

20.2 启动框架和调用约定781

20.2.1 调度器781

20.2.2 虚拟环境782

20.2.3 平衡栈VBegin和VCheckEsp783

20.3 Handler的设计784

20.3.1 辅助Handler784

20.3.2 普通Handler和指令拆解785

20.3.3 标志位问题786

20.3.4 相同作用的指令786

20.3.5 转移指令787

20.3.6 转移跳转指令的另一种实现788

20.3.7 call指令789

20.3.8 retn指令789

20.3.9 不可模拟指令790

20.4 托管代码的异常处理790

20.4.1 VC++ 的异常处理790

20.4.2 Delphi的异常处理795

20.5 本章小结798

第21章 VMProtect逆向和还原浅析799

21.1 VMProtect逆向分析799

21.1.1 VMProtect虚拟执行引擎的全景图799

21.1.2 VMProtect虚拟引擎的基本架构804

21.1.3 指令分类804

21.2 VMProtect的还原806

21.2.1 虚拟执行系统807

21.2.2 生成完整的字节码流程图808

21.2.3 给Handler命名并添加语义动作815

21.2.4 将字节码的低级描述转换为中级描述816

21.2.5 清除无用的字节码817

21.2.6 用真值表化简逻辑指令818

21.2.7 从特征中建立部分寄存器映射信息820

21.2.8 其他无法确定的寄存器的图着色算法826

21.2.9 使用DAG匹配生成指令829

21.2.10 其他问题832

软件重构篇

第22章 补丁技术834

22.1 文件补丁834

22.2 内存补丁835

22.2.1 跨进程内存存取机制835

22.2.2 Debug API机制837

22.2.3 利用调试寄存器机制840

22.2.4 利用DLL注入技术843

22.2.5 利用Hook技术847

22.2.6 利用VT技术850

22.3 SMC补丁技术853

22.3.1 单层SMC补丁技术853

22.3.2 多层SMC补丁技术854

22.4 补丁工具856

第23章 代码的二次开发858

23.1 数据对齐858

23.2 增加空间858

23.2.1 区块间隙858

23.2.2 手工构造区块859

23.2.3 工具辅助构造区块860

23.3 获得函数的调用860

23.3.1 增加输入函数860

23.3.2 显式链接调用DLL861

23.4 代码的重定位862

23.4.1 修复重定位表862

23.4.2 代码的自定位技术864

23.5 增加输出函数865

23.6 消息循环866

23.6.1 WndProc函数866

23.6.2 寻找消息循环867

23.6.3 WndProc汇编形式868

23.7 菜单扩展869

23.7.1 扩充WndProc869

23.7.2 扩充Exit菜单的功能870

23.7.3 扩充Open菜单的功能870

23.8 DLL扩展873

23.8.1 扩展接口873

23.8.2 扩展消息循环874

语言篇

第24章 .NET平台加解密

第24章 .NET平台加解密 4

24.1 .NET概述 4

24.1.1 什么是 .NET 4

24.1.2 基本概念 5

24.1.3 第1个 .NET程序 6

24.2 MSIL与元数据 7

24.2.1 PE结构的扩展 7

24.2.2 .NET下的汇编MSIL 14

24.2.3 MSIL与元数据的结合 17

24.3 代码分析与修改技术 19

24.3.1 静态分析 19

24.3.2 动态调试 21

24.3.3 代码修改 24

24.4 .NET代码保护技术及其逆向 26

24.4.1 强名称 26

24.4.2 名称混淆 28

24.4.3 流程混淆 33

24.4.4 压缩 35

24.4.5 加密 39

24.4.6 其他保护手段 46

24.5 小结 48

取证篇

第25章 数据取证技术878

25.1 硬盘数据的获取和固定878

25.1.1 硬盘数据的获取878

25.1.2 电子数据的固定882

25.2 硬盘的分区和数据恢复882

25.2.1 分区的解析884

25.2.2 基于文件系统的数据恢复原理886

25.3 内存分析890

25.3.1 内存镜像的获取891

25.3.2 内存镜像的分析894

25.4 动态仿真技术897

25.4.1 仿真专用硬件897

25.4.2 软件仿真898

25.5 注册表900

25.5.1 Hive文件900

25.5.2 注册表中的时间901

25.5.3 USB移动存储设备902

25.6 文件格式903

25.6.1 文件修复和特征码903

25.6.2 基于文件的数据恢复技术904

25.6.3 数据隐藏的分析906

注:附录以电子版形式,放随书配套映像文件提供下载。

附录

附录A:浮点指令

附录B:在Visual C++中使用内联汇编

附录C:Visual Basic程序

附录D:加密算法变形引擎

前言
前 言

软件安全是信息安全领域的重要内容,涉及软件的逆向分析、加密、解密、漏洞分析、安全编程及病毒分析等。随着互联网应用的普及和企业信息化程度的不断提升,社会和企业对安全技术人才的需求逐年增加,国内高校对信息安全学科也越来越重视,但在计算机病毒查杀、网络安全、个人信息安全等方面的人才缺口仍然很大。习近平总书记指出“网络空间的竞争,归根结底是人才竞争”。着重发现、培养、输送信息安全专业人才,已经成为各国信息安全战略的重要组成部分。从就业的角度来看,掌握信息安全相关知识和技能,从业者不但可以提高自身的职场竞争力,而且有机会发挥更大的个人潜力、获得满意的薪酬;从个人成长方面来说,研究信息安全技术有助于掌握许多系统底层知识,是提升职业技能的重要途径。作为一名合格的程序员,除了掌握需求分析、设计模式等,如果能掌握一些系统底层知识,熟悉整个系统的底层结构,必将获益良多。本书以软件逆向为切入点,讲述了软件安全领域相关的基础知识和技能。读者在阅读本书的内容后,很容易就能在逆向分析、漏洞分析、安全编程、病毒分析等领域进行扩展。这些知识点的相互关联,将促使读者开阔思路,使所学融会贯通,领悟更多的学习方法,提升自身的学习能力。

《加密与解密》从第1版到今天的第4版,能够一直陪伴读者,完全基于广大读者的热情和鼓舞,在此深表谢意。

本书的缘起
在信息社会里,安全技术变得越来越重要,如何普及安全知识是作者始终关注的一个大问题。正是为了更好地将安全知识普及到社会各个领域的愿望,促成了本书的问世。依托看雪学院的技术背景,由作者主编和主导的看雪安全系列书籍,目前已出版发行了《加密与解密——软件保护技术及完全解决方案》(简体版,繁体版)、《加密与解密(第二版)》(简体版,繁体版)、《加密与解密(第三版)》(简体版,繁体版)、《软件加密技术内幕》等;基于电子资料的形式,历年发行的《看雪论坛精华》被众多网站转载,保守计算,其下载量已达数百万次,极大地推动了国内安全技术的发展。

这是一本很难写的书,因为在2000年时,软件安全是一个全新的领域,从Windows 95面世以来的6年内,市面上没有一本这方面的书,网上也缺乏相关资料。为了填补国内Windows平台软件安全书籍的空白,作者与看雪论坛的一流好手努力合作,克服种种困难,于2001年9月推出了国内第一本全面介绍Windows平台软件安全技术的书籍,这就是本书的第1版《加密与解密——软件保护技术及完全解决方案》。这本书一经面世,就得到了广大读者的喜爱和认可,获得了2002年全国优秀畅销书奖(科技类),在全国很多计算机专业书店获得了极佳的销售业绩。2003年,本书的繁体版在台湾地区发行,受到了台湾读者的热烈欢迎。

本文最后更新于2020年3月26日,若涉及的内容可能已经失效,直接留言反馈补链即可,我们会处理,谢谢
本站所有资源收集于网络,如有侵权违规请联系联系客服处理删帖,谢谢
52草根资源 » 《加密与解密(第4版)》PDF+光盘

常见问题FAQ

1.关于新手解压出错 必看(附电脑+安卓WINRAR APP)
新手必看 本站资源解压教程:http://www.52cgzys.com/76304/
2.本站Telegram群组链接
本站Telegram群组链接:https://t.me/joinchat/ElyDb9Es_YNjYjdl
3.所有礼包码下载地址:http://www.52cgzys.com/422289/
所有礼包码下载地址:http://www.52cgzys.com/422289
4.各类问题及解决处理方法合集
各类问题及解决处理方法合集:http://www.52cgzys.com/zhanwu/xinshou/

发表回复

提供最优质的资源集合

立即查看 申请友链