搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
C++反汇编与逆向分析技术揭秘
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787111356332
  • 作      者:
    钱林松,赵海旭著
  • 出 版 社 :
    机械工业出版社
  • 出版日期:
    2011
收藏
编辑推荐
  

    《C++反汇编与逆向分析技术揭秘》深度揭秘软件逆向分析技术的流程与方法,理论与实践完美结合,由安全领域资深专家亲自执笔,看雪软件安全网站创始人段钢等多位安全领域专家联袂推荐。

展开
作者简介
  钱林松,资深安全技术专家、软件开发工程师和架构师,从事计算机安全和软件开发工作12年,实践经验极其丰富。尤其精通软件逆向分析技术,对C/C++技术和Windows的底层机制也有非常深入的研究。武汉科锐软件技术有限公司创始人,教学经验丰富,多年来,为国内计算机安全领域培养和输送了大量的人才。活跃于看雪软件安全网站,有较高的知名度和影响力。
展开
内容介绍
  《C++反汇编与逆向分析技术揭秘》从介绍调试工具开始,到语言特性的分析,反汇编代码的重建等,再到逆向分析技术应用,内容逐步深入。软件分析技术重在方法,所以《C++反汇编与逆向分析技术揭秘》以启发方法为导向,逐步培养读者的分析和推理能力。全书共分为三个部分:第一部分 准备工作;第二部分 C++反汇编揭秘;第三部分 逆向分析技术应用,逐步引导读者,结合具体的应用掌握逆向分析的关键技术。
  《C++反汇编与逆向分析技术揭秘》对所有软件安全领域工作者, 想了解C++内部机制的中高级C++程序员以及 对Windows底层技术感兴趣的技术人员来说,是一本很好的学习C++反汇编与逆向分析技术的参考书。
展开
精彩书评

  “工欲善其事,必先利其器”。我经常对课题组的研究生说:“学习知识要把握事物本质(即夯实基础),基础牢固了,学习任何技术都能事半功倍,反之亦然。”这是一本能为程序员(尤其是C++程序员)打牢基础的专业书籍,它将引“导你一步一步去深入探究和分析程序的本质,从而逐渐让你在专业上感到踏实和自信,并在这个领域有豁然开朗的感觉。本书非常适合那些想通过反汇编与逆向分析等技术手段探究C++应用底层奥秘的人,当然,你还要能耐得住寂寞!”
  ——彭国军(武汉大学计算机学院副教授)

  “我与老钱相识已经相当长时间了,他给我的印象是为人简单、厚道、仗义。他的书一如他的为人,用简单、精炼、易懂的语言诠释了程序世界里晦涩难懂的反汇编与逆向分析技术,是一本不可多得的好书。”
  ——雷建云(中南民族大学计算机科学学院副院长)

  随着互联网技术的不断发展,以及互联网应用的不断暴增和普及,计算机系统的安全保护在今天已经成为一个重要的课题。有一群默默无闻的工作者,他们的职业是“病毒分析”,一个合格的病毒分析人员必须具备过硬的软件逆向技术。本书是一本可以给病毒分析人员系统而全面的指导的专业书籍,对反汇编与逆向分析技术进行了深入且全面的讲解,对有志于从事软件安全相关工作的人来说,本书将对他们大有裨益,值得推荐。
  ——姚辉(金山网络安全副总监)


展开
精彩书摘
    下标寻址方式也可以被指针寻址方式所代替,但指针寻址方式需要两次间接访问才能访问到数组内的元素,第一次是访问指针变量,第二次才能访问到数组元素,故指针寻址的执行效率不会高于下标寻址,但是在使用的过程中更加方便。
    数组下标和指针的寻址如此相似,如何在反汇编代码中区分它们呢?只要抓住一点即可,那就是指针寻址需要两次以上间接访问才可以得到数据。因此,在出现了两次间接访问的反汇编代码中,如果第一次间接访问得到的值作为地址,则必然存在指针。图8.6就使用寄存器作为指针变量,保存全局数组的地址,从而利用保存了全局数组首地址的寄存器对该数组进行间接访问操作。
    数组下标寻址的识别相对复杂,下标为常量时,由于数组的元素长度固定,siZeof(type)*n也为常量,产生了常量折叠,编译前可直接算出偏移量,因此只需使用数组首地址作为基址加偏移即可寻址相关数据,不会出现二次寻址现象。当下标为变量或者变量表达式时,会明显体现出数组的寻址公式,且发生两次内存访问,但是和指针寻址明显不同,第一次访问的是下标,这个值一般不会作为地址使用,且代入公式计算后才得到地址。值得注意的是,在打开优化选项02后,需留心各种优化方式。
    ……
展开
目录
前言
第一部分 准备工作
第1章 熟悉工作环境和相关工具 
1.1 调试工具Microsoft Visual C++ 6.0和OllyDBG 
1.2 反汇编静态分析工具IDA 
1.3 反汇编引擎的工作原理 
1.4 本章小结 

第二部分 C++反汇编揭秘
第2章 基本数据类型的表现形式 
2.1 整数类型 
2.1.1 无符号整数 
2.1.2 有符号整数 
2.2 浮点数类型 
2.2.1 浮点数的编码方式 
2.2.2 基本的浮点数指令 
2.3 字符和字符串 
2.3.1 字符的编码 
2.3.2 字符串的存储方式 
2.4 布尔类型 
2.5 地址、指针和引用 
2.5.1 指针和地址的区别 
2.5.2 各类型指针的工作方式 
2.5.3 引用 
2.6 常量 
2.6.1 常量的定义 
2.6.2 #define和const的区别 
2.7 本章小结 

第3章 认识启动函数,找到用户入口 
3.1 程序的真正入口 
3.2 了解VC++ 6.0的启动函数 
3.3 main函数的识别 
3.4 本章小结 

第4章 观察各种表达式的求值过程 
4.1 算术运算和赋值 
4.1.1 各种算术运算的工作形式 
4.1.2 算术结果溢出 
4.1.3 自增和自减 
4.2 关系运算和逻辑运算 
4.2.1 关系运算和条件跳转的对应 
4.2.2 表达式短路 
4.2.3 条件表达式 
4.3 位运算 
4.4 编译器使用的优化技巧 
4.4.1 流水线优化规则 
4.4.2 分支优化规则 
4.4.3 高速缓存(cache)优化规则 
4.5 一次算法逆向之旅 
4.6 本章小结 

第5章 流程控制语句的识别 
5.1 if语句 
5.2 if…else…语句 
5.3 用if构成的多分支流程 
5.4 switch的真相 
5.5 难以构成跳转表的switch 
5.6 降低判定树的高度 
5.7 dowhilefor的比较 
5.8 编译器对循环结构的优化 
5.9 本章小结 

第6章 函数的工作原理 
6.1 栈帧的形成和关闭 
6.2 各种调用方式的考察 
6.3 使用ebp或esp寻址 
6.4 函数的参数 
6.5 函数的返回值 
6.6 回顾 
6.7 本章小结 

第7章 变量在内存中的位置和访问方式 
7.1 全局变量和局部变量的区别 
7.2 局部静态变量的工作方式 
7.3 堆变量 
7.4 本章小结 

第8章 数组和指针的寻址 
8.1 数组在函数内 
8.2 数组作为参数 
8.3 数组作为返回值 
8.4 下标寻址和指针寻址 
8.5 多维数组 
8.6 存放指针类型数据的数组 
8.7 指向数组的指针变量 
8.8 函数指针 
8.9 本章小结 

第9章 结构体和类 
9.1 对象的内存布局 
9.2 this指针 
9.3 静态数据成员 
9.4 对象作为函数参数 
9.5 对象作为返回值 
9.6 本章小结 

第10章 关于构造函数和析构函数 
10.1 构造函数的出现时机 
10.2 每个对象都有默认的构造函数吗 
10.3 析构函数的出现时机 
10.4 本章小结 

第11章 关于虚函数 
11.1 虚函数的机制 
11.2 虚函数的识别 
11.3 本章小结 

第12章 从内存角度看继承和多重继承 
12.1 识别类和类之间的关系 
12.2 多重继承 
12.3 虚基类 
12.4 菱形继承 
12.5 本章小结 

第13章 异常处理 
13.1 异常处理的相关知识 
13.2 异常类型为基本数据类型的处理流程 
13.3 异常类型为对象的处理流程 
13.4 识别异常处理 
13.5 本章小结 

第三部分 逆向分析技术应用
第14章 PEiD的工作原理分析 
14.1 开发环境的识别 
14.2 开发环境的伪造 
14.3 本章小结 

第15章 “熊猫烧香”病毒逆向分析 
15.1 调试环境配置 
15.2 病毒程序初步分析 
15.3 “熊猫烧香”的启动过程分析 
15.4 “熊猫烧香”的自我保护分析 
15.5 “熊猫烧香”的感染过程分析 
15.6 本章小结 

第16章 调试器OllyDBG的工作原理分析 
16.1 INT3断点 
16.2 内存断点 
16.3 硬件断点 
16.4 异常处理机制 
16.5 加载调试程序 
16.6 本章小结 

第17章 反汇编代码的重建与编译 
17.1 重建反汇编代码 
17.2 编译重建后的反汇编代码 
17.3 本章小结 
参考文献
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证