加密与解密第4版pdf下载pdf下载

加密与解密第4版百度网盘pdf下载

作者:
简介:本篇主要提供加密与解密第4版pdf下载
出版社:文轩网旗舰店
出版时间:2017-02
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

作  者:段钢 著
定  价:198
出 版 社:电子工业出版社
出版日期:2017年02月01日
页  数:936
装  帧:平装
ISBN:9787121336928
目录
基础篇 章 基础知识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 WOW9 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 xdbg调试器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 Keystone 3.2.7 小结 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 位软件逆向技术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公钥算法2 6.3.3 DSA数字签名算法270 6.3.4 椭圆曲线密码编码学272 6.3.5 SM2算法279 其他算法279 .1 CRC32算法279 .2 Base编码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 台上的异常处理363 8.5.1 原生x程序的异常分发3 8.5.2 WOW下的异常分发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 0章 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 1章 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 2章 注入技术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 3章 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在台上的新问题541 13.8 Hook技术的应用543 13.9 Hook的检测、恢复与对抗544 13.9.1 Hook的检测与恢复544 13.9.2 Hook的对抗545 13.10 本章小结546 漏洞篇 4章 漏洞分析技术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 脱壳篇 5章 专用加密软件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 6章 脱壳技术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 1 重建输入表606 1.1 输入表重建的原理606 1.2 确定IAT的地址和大小607 1.3 根据IAT重建输入表608 1.4 用Import REC重建输入表611 1.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 编写静态脱壳器1 保护篇 7章 软件保护技术4 17.1 防范算法求逆4 17.1.1 基本概念4 17.1.2 堡垒战术5 17.1.3 游击战术6 17.2 抵御静态分析7 17.2.1 花指令7 17.2.2 SMC技术实现9 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 8章 反跟踪技术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 9章 外壳编写基础705 19.1 外壳的结构705 19.2 加壳主程序706 19.2.1 判断文件是否为PE格式706 19.2.2 文件基本数据读入706 19.2.3 附加数据的读取708 19.2.4 输入表的处理708 19.2.5 重定位表的处理711 19.2.6 文件的压缩713 19.2.7 资源数据的处理716 19.2.8 区块的融合720 19.3 用汇编写外壳部分721 19.3.1 外壳的加载过程721 19.3.2 自建输入表722 19.3.3 外壳引导段723 19.3.4 外壳第2部分726 19.3.5 将外壳部分添加至原程序731 19.4 用C++编写外壳部分734 第20章 虚拟机的设计739 20.1 虚拟机保护技术原理739 20.1.1 反汇编引擎739 20.1.2 指令分类739 20.2 启动框架和调用约定740 20.2.1 调度器740 20.2.2 虚拟环境741 20.2.3 平衡栈vBegin和vCheckESP742 20.3 Handler的设计743 20.3.1 辅助Handler743 20.3.2 普通Handler和指令拆解744 20.3.3 标志位问题745 20.3.4 相同作用的指令745 20.3.5 转移指令746 20.3.6 转移跳转指令的另一种实现747 20.3.7 call指令748 20.3.8 retn指令748 20.3.9 不可模拟指令749 20.4 托管代码的异常处理749 20.4.1 VC++的异常处理749 20.4.2 Delphi的异常处理754 20.5 本章小结757 第21章 VMProtect逆向和还原浅析758 21.1 VMProtect逆向分析758 21.1.1 VMProtect虚拟执行引擎的全景图758 21.1.2 VMProtect虚拟引擎的基本架构763 21.1.3 指令分类763 21.2 VMProtect的还原765 21.2.1 虚拟执行系统766 21.2.2 生成完整的字节码流程图767 21.2.3 给Handler命名并添加语义动作774 21.2.4 将字节码的低级描述转换为中级描述775 21.2.5 清除无用的字节码776 21.2.6 用真值表化简逻辑指令776 21.2.7 从特征中建立部分寄存器映射信息779 21.2.8 其他无法确定的寄存器的图着色算法785 21.2.9 使用DAG匹配生成指令788 21.2.10 其他问题791 软件重构篇 第22章 补丁技术794 22.1 文件补丁794 22.2 内存补丁795 22.2.1 跨进程内存存取机制795 22.2.2 Debug API机制797 22.2.3 利用调试寄存器机制800 22.2.4 利用DLL注入技术803 22.2.5 利用Hook技术807 22.2.6 利用VT技术810 22.3 SMC补丁技术813 22.3.1 单层SMC补丁技术813 22.3.2 多层SMC补丁技术814 22.4 补丁工具816 第23章 代码的二次开发818 23.1 数据对齐818 23.2 增加空间818 23.2.1 区块间隙818 23.2.2 手动构造区块819 23.2.3 工具辅助构造区块820 23.3 获得函数的调用信息820 23.3.1 增加输入函数820 23.3.2 显式链接调用DLL821 23.4 代码的重定位822 23.4.1 修复重定位表822 23.4.2 代码的自定位技术824 23.5 增加输出函数825 23.6 消息循环826 23.6.1 WndProc函数826 23.6.2 寻找消息循环827 23.6.3 WndProc汇编形式828 23.7 菜单扩展829 23.7.1 扩充WndProc829 23.7.2 扩充Et菜单的功能830 23.7.3 扩充Open菜单的功能830 23.8 DLL扩展833 23.8.1 扩展接口833 23.8.2 扩展消息循环834 语言和平台篇 第24章 .NET平台加解密838 24.1 .NET概述838 24.1.1 什么是 .NET838 24.1.2 基本概念839 24.1.3 个 .NET程序840 24.2 MSIL与元数据841 24.2.1 PE结构的扩展841 24.2.2 .NET下的汇编MSIL847 24.2.3 MSIL与元数据的结合849 24.3 代码分析与修改技术851 24.3.1 静态分析851 24.3.2 动态调试853 24.3.3 代码修改855 24.4 .NET代码保护技术及其逆向857 24.4.1 强名称857 24.4.2 名称混淆859 24.4.3 流程混淆863 24.4.4 压缩865 24.4.5 加密869 24.4.6 其他保护手段875 24.5 本章小结876 取证篇 第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 术语表909 参考文献911
内容简介
本书以软件逆向为切入点,讲述了软件安全领域相关的基础知识和技能。读者阅读本书后,很容易就能在逆向分析、漏洞分析、安全编程、病毒分析等领域进行扩展。这些知识点的相互关联,将促使读者开阔思路,融会贯通,领悟更多的学习方法,提升自身的学习能力。本书适合安全技术相关工作者、对逆向调试技术感兴趣的人、对软件保护感兴趣的软件开发人员、相关专业在校学生及关注个人信息安全、计算机安全技术并想了解技术内幕的读者阅读。
作者简介
段钢 著
段钢,靠前信息安全领域具有广泛影响力的安所有渠道站看雪学院的创始人和运营管理者,长期致力于信息安全技术研究,对当前安全技术的发展有深入思考。参与和组织专业人士推出的十多部技术专著和相关书籍,有不少入选为大学信息技术专业的教辅材料,如《加密与解密》等,影响广泛。在盛大和众人网络的多年工作经历,使得对安全防护有深刻的认识和理解。在2016年创建上海看雪科技有限公司,项目以看雪学院为基础,构建一个提供B2B、B2C信息安全服务的综合平台。