编译与反编译技术实战pdf下载

编译与反编译技术实战百度网盘pdf下载

作者:
简介:编译与反编译技术实战
出版社:机械工业出版社
出版时间:2017-05-01
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

内容简介
全书共14章,第1章简要介绍了本书所基于的环境与工具;第2~6章针对编译的不同阶段,展开实践方面的相关阐述,并结合GCC和LLVM这两款具体的编译器进行论述;第7章介绍了多样化编译方面的实践;第8~13章从反编译的不同阶段介绍与反编译相关的可执行程序格式、程序解码和反汇编、中间表示生成、数据类型和控制流的恢复、过程定义恢复等内容;第14章简要介绍了反编译在信息安全方面的应用。
目录
版权信息
前言
第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.4 本章小结
第3章 词法分析器的设计与实现
3.1 词法分析器的设计
3.2 词法分析器的手工实现
3.3 词法分析器的LEX实现
3.4 本章小结
第4章 语法分析器的设计与实现
4.1 自上而下的语法分析器的设计与实现
4.2 自下而上的语法分析器的设计与实现
4.3 语法分析器的生成器
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.2 经典编译器概述
6.3 LLVM的设计
6.4 LLVM前端
6.5 LLVM的中间表示
6.6 LLVM后端
6.7 应用实例
6.8 本章小结
第7章 多样化编译实践
7.1 软件多样化的机会
7.2 多样化带来的管理复杂性
7.3 多样化编译技术
7.4 多样化编译的应用
7.5 本章小结
第8章 反编译的对象——可执行文件格式分析
8.1 可执行文件格式
8.2 main函数的识别
8.3 本章小结
第9章 反编译的基础——指令系统和反汇编
9.1 指令系统概述
9.2 指令解码
9.3 反汇编过程
9.4 反汇编工具IDA与OllyICE实践
9.5 本章小结
第10章 反编译的中点——从汇编指令到中间表示
10.1 中间代码生成在经典反编译器中的实际应用
10.2 中间表示从设计到应用的具体实例
10.3 本章小结
第11章 反编译的推进1——数据类型恢复
11.1 基本数据类型的分析和恢复
11.2 函数类型恢复
11.3 本章小结
第12章 反编译的推进2——控制流恢复实例
12.1 基于关键语义子树的间接跳转目标解析
12.2 功能块概念的引入
12.3 基于功能块的间接转移指令目标地址的确定
12.4 本章小结
第13章 反编译的推进3——过程定义恢复
13.1 过程分析概述
13.2 库函数恢复
13.3 用户自定义过程的数据恢复
13.4 用户函数与库函数同名的区分
13.5 本章小结
第14章 反编译在信息安全方面的应用实践
14.1 反编译在信息安全中的应用
14.2 反编译在恶意代码分析中的应用
14.3 恶意代码与反编译技术的对抗
14.4 反编译框架针对恶意行为的改进
14.5 实例分析
14.6 本章小结
参考文献
前言
  前言
  “编译技术”是从事软件开发和信息安全相关工作的技术人员必须掌握的基础性技术,也是高等院校计算机科学与技术和软件专业的一门必修专业课,这是理论与实践结合非常强的领域,对提升开发人员的技术水平和大学生科学思维的养成、解决实际问题能力具有重要作用。“反编译技术”则是近几年发展起来的新兴技术,许多计算机软件或信息安全从业者非常关心该技术的发展,但目前这方面的书籍较少,与“编译技术”结合起来讲解的书也很少,从实践角度来剖析的更是少见。本书就是在这种需求以及作者在这两方面的科研实践的驱动下诞生的,目的是为计算机软件和信息安全从业者提供编译与反编译技术方面的知识和实战技巧。
  本书的编写得到了解放军信息工程大学和机械工业出版社的大力支持,在此表示诚挚的谢意。本书中的一些材料来自本书主编主持的国家自然科学基金(项目编号:61472447)、国家“863”(项目编号:2006AA01Z408)、国家重大专项某子课题等项目的研究成果,在此对这些课题的支持表示衷心的感谢!
  本书是机械工业出版社2016年4月出版的《编译与反编译技术》(ISBN 978-7-111-53412-9)一书的姊妹篇,配合学习和使用效果更佳。在本书中,作者着力阐述编译与反编译技术及实战方面的相关知识和实战技巧,力图使用通用的语言讲述抽象的原理、技术和实战技能,但限于作者水平,书中难免有错误与欠妥之处,恳请读者批评指正。
  作者
  2017年3月
精彩书摘
  本书致力于通过实践及案例,从正反向两个角度介绍编译系统的一般构造原理和基本实现技术,本章首先对书中内容涉及的环境与工具进行简单介绍,这些工具都是编译与反编译过程中常用的工具。
  1.1 实践环境概述
  在编译过程中所涉及的环境主要是编译环境及工具链,常用的工具有词法分析生成器、语法分析生成器、编译器、汇编器、链接器等。在反编译过程中主要涉及反汇编器、静态或动态的调试与分析工具。下面对近年来流行的编译与反编译工具逐一进行简单介绍。
  1.2 词法分析生成器LEX
  词法分析是编译过程的第一个阶段,其任务就是将输入的各种符号转化成相应的标识符号,转化后的标识符很容易被后续阶段处理。
  LEX是LEXical compiler的缩写,是UNIX环境下非常著名的工具,主要功能是生成一个词法分析器的C源码,描述规则采用正则表达式。描述词法分析器的文件*.l经过LEX编译后生成一个lex.yy.c的文件,然后由C编译器编译生成一个词法分析器。
  LEX接收用户输入的正则表达式,识别这些表达式并且将输入流转化为匹配这些表达式的字符串。在这些字符串的分界处,用户提供的程序片段被执行。LEX代码文件将正则表达式和程序片段关联,将每一条输入对应到由LEX生成的程序的表达式,且执行相应的代码片段。
  为了完成任务,除了需要提供匹配的表达式以外,用户还需要提供其他代码,甚至是由其他生成器产生的代码。用户提供一般程序设计语言的代码片段完成程序识别表达式后的工作。因此,用户自由编写动作代码时,并不影响其编写高级语言代码来匹配字符串表达式。这就避免迫使用户使用字符串语言来进行输入分析时,也必须使用同样的方法来编写字符处理程序,而这样做有时是不合适的。LEX不是完整的语言,它是一个新语言的生成器,可以插入各种不同的被叫作“宿主语言”的程序设计语言中。就像大多数高级语言可以生成在不同计算机硬件上运行的代码一样,LEX可以生成不同的宿主语言。宿主语言用于LEX生成输出代码,也用于用户插入程序片段,这使得LEX适用于不同的环境和不同的使用者。每一个应用程序可以是硬件、适用于该任务的宿主语言、用户背景和局部接口属性的直接结合。现在,LEX唯一支持的宿主语言是C,过去也支持过其他语言。Fortran LEX自身一般运行于UNIX或Linux系统之上,但是LEX生成的代码可以在任何适当的编译器上使用。
  LEX将用户输入的表达式和动作代码转换为宿主语言,生成的函数一般名为yylex。yylex识别字符流中的表达式,并且当每一个表达式被检测出来后,输出相应的动作。
  对于内容“AAAAAAA”,LEX程序会输出“I like run”,首先匹配最长的4个“A”,之后在剩下的三个“A”中匹配两个“A”,直到最后的一个“A”。可以看出LEX的确按照最长的规则匹配。
  3)辅助部分放一些扫描器的其他模块,可以包含用C语言编写的子程序,而这些子程序可以用在前面的动作中,这样就可以达到简化编程的目的。辅助部分也可以在另一个程序文件中编写,最后再链接到一起。生成C代码后,需用C的编译器编译,链接时需要指定链接库。
  本书的第3章将更加详细地介绍LEX及其用法。需要说明的是,对于GNU/Linux用户,与UNIX环境中LEX对应的工具是Flex,其具体用法和LEX相似,这里不再赘述。
  1.3 语法分析生成器YACC
  语法分析的任务是分析句子是否符合语法规范。YACC(Yet Another Compiler Compiler)是一个经典的语法分析生成器。YACC最初是由AT&T公司的Steven C.Johnson为UNIX操作系统开发的,后来一些兼容的程序如Berkeley YACC、GNU Bison、MKS YACC和Abraxas YACC陆续出现,它们都是在此基础上做了少许改进或者增强,但是基本概念是相同的。现在YACC也已普遍移植到Windows及其他平台上。
精彩插图