《编译与反编译技术实战 》一导读


《编译与反编译技术实战 》一导读


前  言

“编译技术”是从事软件开发和信息安全相关工作的技术人员必须掌握的基础性技术,也是高等院校计算机科学与技术和软件专业的一门必修专业课,这是理论与实践结合非常强的领域,对提升开发人员的技术水平和大学生科学思维的养成、解决实际问题能力具有重要作用。“反编译技术”则是近几年发展起来的新兴技术,许多计算机软件或信息安全从业者非常关心该技术的发展,但目前这方面的书籍较少,与“编译技术”结合起来讲解的书也很少,从实践角度来剖析的更是少见。本书就是在这种需求以及作者在这两方面的科研实践的驱动下诞生的,目的是为计算机软件和信息安全从业者提供编译与反编译技术方面的知识和实战技巧。
本书的编写得到了解放军信息工程大学和机械工业出版社的大力支持,在此表示诚挚的谢意。本书中的一些材料来自本书主编主持的国家自然科学基金(项目编号:61472447)、国家“863”(项目编号:2006AA01Z408)、国家重大专项某子课题等项目的研究成果,在此对这些课题的支持表示衷心的感谢!
本书是机械工业出版社2016年4月出版的《编译与反编译技术》(ISBN 978-7-111-53412-9)一书的姊妹篇,配合学习和使用效果更佳。在本书中,作者着力阐述编译与反编译技术及实战方面的相关知识和实战技巧,力图使用通用的语言讲述抽象的原理、技术和实战技能,但限于作者水平,书中难免有错误与欠妥之处,恳请读者批评指正。

目  录

第1章 实践的环境与工具
1.1  实践环境概述
1.2  词法分析生成器LEX
1.3  语法分析生成器YACC
1.4  编译器GCC
1.5  编译器LLVM
1.6  反汇编工具IDA
1.7  反汇编工具OllyICE
1.8  仿真与分析工具QEMU
1.9  动态分析工具TEMU
1.10  本章小结
第2章 编译器实践概述
2.1  编译器、解释器及其工作方式
2.2  编译器的结构
2.3  编译器的设计与实现概述
2.3.1 利用Flex和Bison实现词法和语法分析
2.3.2 利用LLVM实现代码优化和代码生成
2.4  本章小结
第3章 词法分析器的设计与实现
3.1  词法分析器的设计
3.1.1 词法分析器的功能
3.1.2 输入及其处理
3.2  词法分析器的手工实现
3.3  词法分析器的LEX实现
3.3.1 LEX源文件结构
3.3.2 LEX系统中的正规式
3.3.3 LEX 的使用方式 36
3.3.4 LEX 源文件示例——C语言词法分析器
3.4  本章小结
第4章 语法分析器的设计与实现
4.1 自上而下的语法分析器的设计与实现
4.2 自下而上的语法分析器的设计与实现
4.3 语法分析器的生成器
4.3.1 YACC的源文件结构
4.3.2 YACC和LEX的接口
4.3.3 YACC源程序示例——简单的台式计算器
4.4 本章小结
第5章 GCC编译器分析与实践
5.1 GCC编译器概述
5.2 GCC编译器的系统结构
5.3 GCC编译器的分析程序
5.4 GCC编译器的中间语言及其生成
5.5 GCC编译器的优化
5.6 GCC编译器的目标代码生成
5.7 本章小结
第6章 LLVM编译器分析与实践
6.1 LLVM编译器概述
6.1.1 起源
6.1.2 相关项目
6.2 经典编译器概述
6.2.1 经典编译器设计的启示
6.2.2 现有编译器的实现
6.3 LLVM的设计
6.3.1 LLVM中间表示
6.3.2 LLVM库文件
6.4 LLVM前端
6.4.1 前端库文件
6.4.2 词法分析
6.4.3 语法分析
6.4.4 语义分析
6.4.5 LLVM IR代码生成
6.5 LLVM的中间表示
6.5.1 LLVM IR语法
6.5.2 LLVM IR优化实例
6.6 LLVM后端
6.6.1 后端库文件
6.6.2 LLVM目标架构描述文件
6.7 应用实例
6.7.1 代码插桩
6.7.2 代码保护
6.8 本章小结
第7章 多样化编译实践
7.1 软件多样化的机会
7.1.1 应用层的多样化机会
7.1.2 Web服务层的多样化机会
7.1.3 操作系统层的多样化机会
7.1.4 组合后的多样化机会
7.1.5 虚拟层的多样化机会
7.2 多样化带来的管理复杂性
7.3 多样化编译技术
7.3.1 随机化技术
7.3.2 代码混淆技术
7.3.3 与堆栈相关的多样化技术
7.4 多样化编译的应用
7.4.1 多样化编译在安全防御方面的应用
7.4.2 多样化编译工具的结构组成及原理
7.5 本章小结
第8章  反编译的对象——可执行文件格式分析
8.1 可执行文件格式
8.1.1 PE可执行文件格式
8.1.2 ELF可执行文件格式
8.2 main函数的识别
8.2.1 程序启动过程分析
8.2.2 startup函数解析
8.2.3 main()函数定位
8.3 本章小结
第9章  反编译的基础——指令系统和反汇编
9.1 指令系统概述
9.1.1 机器指令及格式
9.1.2 汇编指令及描述
9.2 指令解码
9.2.1 SLED通用编解码语言
9.2.2 x64的SLED描述
9.2.3 IA64的SLED描述
9.3 反汇编过程
9.3.1 线性扫描反汇编
9.3.2 行进递归反汇编
9.4 反汇编工具IDA与OllyICE实践
9.4.1 IDA实践
9.4.2 OllyICE实践
9.5 本章小结
第10章 反编译的中点——从汇编指令到中间表示
10.1 中间代码生成在经典反编译器中的实际应用
10.1.1 低级中间代码
10.1.2 高级中间代码
10.2 中间表示从设计到应用的具体实例
10.2.1 指令基本组件描述
10.2.2 用UMSDL描述指令语义
10.3 本章小结
第11章 反编译的推进1——数据类型恢复
11.1 基本数据类型的分析和恢复
11.1.1 数据类型分析的相关概念
11.1.2 基于指令语义的基本数据类型分析
11.1.3 基于过程的数据类型分析技术
11.2 函数类型恢复
11.2.1 问题引入
11.2.2 函数类型的恢复
11.3 本章小结
第12章 反编译的推进2——控制流恢复实例
12.1 基于关键语义子树的间接跳转目标解析
12.1.1 问题的提出
12.1.2 相关工作
12.1.3 跳转表的语义特征
12.1.4 基于关键语义子树的间接跳转目标解析及翻译
12.2 功能块概念的引入
12.2.1 分析单位
12.2.2 基于基本块的分析
12.2.3 功能块
12.2.4 针对功能块的验证
12.3 基于功能块的间接转移指令目标地址的确定
12.3.1 程序控制流图构建方法中存在的问题
12.3.2 无法处理的代码
12.3.3 程序执行路径的逆向构造
12.3.4 逆向构造执行路径的控制执行
12.3.5 针对程序执行路径逆向构造的验证
12.4 本章小结
第13章 反编译的推进3——过程定义恢复
13.1 过程分析概述
13.1.1 过程抽象
13.1.2 调用约定分析
13.2 库函数恢复
13.2.1 快速库函数调用识别方法
13.2.2 基于特征数据库的模式匹配方法
13.2.3 基于函数签名的库函数识别方法
13.2.4 库函数参数的恢复
13.2.5 隐式库函数调用
13.3 用户自定义过程的数据恢复
13.3.1 基于语义映射的数据恢复
13.3.2 基于栈帧平衡的数据恢复
13.4 用户函数与库函数同名的区分
13.4.1 函数同名问题
13.4.2 函数同名解决实例
13.5 本章小结
第14章 反编译在信息安全方面的应用实践
14.1 反编译在信息安全中的应用
14.1.1 反编译技术的优势
14.1.2 代码恶意性判定
14.1.3 代码敏感行为标注
14.1.4 恶意代码威胁性评估
14.2 反编译在恶意代码分析中的应用
14.2.1 基于文件结构的恶意代码分析
14.2.2 基于汇编指令的恶意代码分析
14.2.3 基于流图的恶意代码分析
14.2.4 基于系统调用的恶意代码分析
14.3 恶意代码与反编译技术的对抗
14.3.1 混淆
14.3.2 多态
14.3.3 变形
14.3.4 加壳
14.3.5 虚拟执行
14.4 反编译框架针对恶意行为的改进
14.4.1 条件跳转混淆
14.4.2 指令重叠混淆
14.4.3 子程序异常返回
14.4.4 不透明谓词混淆
14.5 实例分析
14.5.1 系统设计
14.5.2 系统模块划分
14.5.3 测试结果与分析
14.6 本章小结
参考文献

上一篇:spring boot 2.0 源码分析(二)


下一篇:MySql 5.7 命令行使用