基本信息
名称: C++反汇编与逆向分析技术揭秘
作者信息: 作者: 钱林松 [ 中文 pdf ]
简单介绍
《C++反汇编与逆向分析技术揭秘》:深度揭秘软件逆向分析技术的流程与方法,理论与实践完美结合,由安全领域资深专家亲自执笔,看雪软件安全网站创始人段钢等多位安全领域专家联袂推荐。
目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
| 前言 第一部分 准备工作 第1章 熟悉工作环境和相关工具 / 2 1.1 调试工具Microsoft Visual C++ 6.0和OllyDBG / 2 1.2 反汇编静态分析工具IDA / 5 1.3 反汇编引擎的工作原理 / 11 1.4 本章小结 / 16 第二部分 C++反汇编揭秘 第2章 基本数据类型的表现形式 / 18 2.1 整数类型 / 18 2.1.1 无符号整数 / 18 2.1.2 有符号整数 / 18 2.2 浮点数类型 / 20 2.2.1 浮点数的编码方式 / 21 2.2.2 基本的浮点数指令 / 23 2.3 字符和字符串 / 26 2.3.1 字符的编码 / 27 2.3.2 字符串的存储方式 / 28 2.4 布尔类型 / 29 2.5 地址、指针和引用 / 29 2.5.1 指针和地址的区别 / 30 2.5.2 各类型指针的工作方式 / 31 2.5.3 引用 / 34 2.6 常量 / 35 2.6.1 常量的定义 / 36 2.6.2 #define和const的区别 / 37 2.7 本章小结 / 38 第3章 认识启动函数,找到用户入口 / 40 3.1 程序的真正入口 / 40 3.2 了解VC++ 6.0的启动函数 / 40 3.3 main函数的识别 / 44 3.4 本章小结 / 46 第4章 观察各种表达式的求值过程 / 47 4.1 算术运算和赋值 / 47 4.1.1 各种算术运算的工作形式 / 47 4.1.2 算术结果溢出 / 82 4.1.3 自增和自减 / 83 4.2 关系运算和逻辑运算 / 85 4.2.1 关系运算和条件跳转的对应 / 85 4.2.2 表达式短路 / 86 4.2.3 条件表达式 / 88 4.3 位运算 / 92 4.4 编译器使用的优化技巧 / 94 4.4.1 流水线优化规则 / 97 4.4.2 分支优化规则 / 101 4.4.3 高速缓存(cache)优化规则 / 101 4.5 一次算法逆向之旅 / 102 4.6 本章小结 / 109 第5章 流程控制语句的识别 / 110 5.1 if语句 / 110 5.2 if…else…语句 / 112 5.3 用if构成的多分支流程 / 115 5.4 switch的真相 / 119 5.5 难以构成跳转表的switch / 128 5.6 降低判定树的高度 / 133 5.7 do/while/for的比较 / 137 5.8 编译器对循环结构的优化 / 143 5.9 本章小结 / 148 第6章 函数的工作原理 / 149 6.1 栈帧的形成和关闭 / 149 6.2 各种调用方式的考察 / 152 6.3 使用ebp或esp寻址 / 155 6.4 函数的参数 / 158 6.5 函数的返回值 / 160 6.6 回顾 / 163 6.7 本章小结 / 165 第7章 变量在内存中的位置和访问方式 / 166 7.1 全局变量和局部变量的区别 / 166 7.2 局部静态变量的工作方式 / 169 7.3 堆变量 / 173 7.4 本章小结 / 177 第8章 数组和指针的寻址 / 178 8.1 数组在函数内 / 178 8.2 数组作为参数 / 181 8.3 数组作为返回值 / 185 8.4 下标寻址和指针寻址 / 189 8.5 多维数组 / 193 8.6 存放指针类型数据的数组 / 199 8.7 指向数组的指针变量 / 201 8.8 函数指针 / 204 8.9 本章小结 / 206 第9章 结构体和类 / 207 9.1 对象的内存布局 / 207 9.2 this指针 / 212 9.3 静态数据成员 / 217 9.4 对象作为函数参数 / 219 9.5 对象作为返回值 / 226 9.6 本章小结 / 231 第10章 关于构造函数和析构函数 / 233 10.1 构造函数的出现时机 / 233 10.2 每个对象都有默认的构造函数吗 / 243 10.3 析构函数的出现时机 / 245 10.4 本章小结 / 254 第11章 关于虚函数 / 256 11.1 虚函数的机制 / 256 11.2 虚函数的识别 / 261 11.3 本章小结 / 268 第12章 从内存角度看继承和多重继承 / 269 12.1 识别类和类之间的关系 / 270 12.2 多重继承 / 292 12.3 虚基类 / 298 12.4 菱形继承 / 299 12.5 本章小结 / 307 第13章 异常处理 / 308 13.1 异常处理的相关知识 / 308 13.2 异常类型为基本数据类型的处理流程 / 314 13.3 异常类型为对象的处理流程 / 323 13.4 识别异常处理 / 329 13.5 本章小结 / 341 第三部分 逆向分析技术应用 第14章 PEiD的工作原理分析 / 344 14.1 开发环境的识别 / 344 14.2 开发环境的伪造 / 353 14.3 本章小结 / 356 第15章 “熊猫烧香”病毒逆向分析 / 357 15.1 调试环境配置 / 357 15.2 病毒程序初步分析 / 358 15.3 “熊猫烧香”的启动过程分析 / 360 15.4 “熊猫烧香”的自我保护分析 / 366 15.5 “熊猫烧香”的感染过程分析 / 369 15.6 本章小结 / 379 第16章 调试器OllyDBG的工作原理分析 / 380 16.1 INT3断点 / 380 16.2 内存断点 / 385 16.3 硬件断点 / 390 16.4 异常处理机制 / 396 16.5 加载调试程序 / 402 16.6 本章小结 / 406 第17章 反汇编代码的重建与编译 / 407 17.1 重建反汇编代码 / 407 17.2 编译重建后的反汇编代码 / 410 17.3 本章小结 / 411 参考文献 / 412
|
亚马逊链接