IDA Pro权威指南(第2版)

IDA Pro权威指南(第2版)
作 者: Chris Eagle
出版社: 人民邮电出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 程序设计
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  ChrisEagle是美国加利福尼亚州蒙特雷海军研究生院计算机科学系高级讲师。他设计了很多IDA插件,还与人合著了GrayHat Hacking一书。他应邀在Balckhat、Defcon、Toorcon和Shmoocon等众多安全会议上发表过演讲。

内容简介

内容简介:IDA Pro(交互式反汇编器专业版)是应用最广泛的静态反汇编工具,在IT领域有着举足轻重的地位,但其文档资料一直都不够完善。在IDA Pro开发者Ilfak的协助下问世的这本书,完美地弥补了这一缺憾。Chris Eagle的理论被业界公认为是权威且令人信服的,而他的模拟器也是公开发布的IDA插件中最棒的一款。本书以反汇编与逆向工程的基本信息和IDA Pro的背景知识开篇,为读者奠定基础,紧接着循序渐进地讲解IDA Pro的基本使用、高级应用、扩展功能及其在安全领域的实际应用。通过阅读本书,从事逆向工程的读者一定能迅速掌握IDA Pro的使用方法。

图书目录

第一部分 IDA 简介

第1 章 反汇编简介  2

1.1 反汇编理论  2

1.2 何为反汇编  3

1.3 为何反汇编  3

1.3.1 分析恶意软件  4

1.3.2 漏洞分析  4

1.3.3 软件互操作性  4

1.3.4 编译器验证  4

1.3.5 显示调试信息  5

1.4 如何反汇编  5

1.4.1 基本的反汇编算法  5

1.4.2 线性扫描反汇编  6

1.4.3 递归下降反汇编  7

1.5 小结  10

第2 章 逆向与反汇编工具  11

2.1 分类工具  11

2.1.1 file   11

2.1.2 PE Tools   13

2.1.3 PEiD   14

2.2 摘要工具  14

2.2.1 nm  15

2.2.2 ldd  16

2.2.3 objdump  18

2.2.4 otool   18

2.2.5 dumpbin  19

2.2.6 c++filt  19

2.3 深度检测工具  20

2.3.1 strings   20

2.3.2 反汇编器  22

2.4 小结  23

第3 章 IDA Pro 背景知识  24

3.1 Hex-Rays 公司的反盗版策略  24

3.2 获取IDA Pro   25

3.2.1 IDA 版本  25

3.2.2 IDA 许可证  25

3.2.3 购买IDA  26

3.2.4 升级IDA  26

3.3 IDA 支持资源  26

3.4 安装IDA   27

3.4.1 Windows 安装  28

3.4.2 OS X 和Linux 安装  28

3.4.3 IDA 与SELinux   29

3.4.4 32 位IDA 与64 位IDA   29

3.4.5 IDA 目录的结构  30

3.5 IDA 用户界面  30

3.6 小结  31

第二部分 IDA 基本用法

第4 章 IDA 入门  34

4.1 启动IDA   34

4.1.1 IDA 文件加载  35

4.1.2 使用二进制文件加载器  37

4.2 IDA 数据库文件  38

4.2.1 创建IDA 数据库  39

4.2.2 关闭IDA 数据库  40

4.2.3 重新打开数据库  41

4.3 IDA 桌面简介  42

4.4 初始分析时的桌面行为   44

4.5 IDA 桌面提示和技巧  45

4.6 报告bug   45

4.7 小结  46

第5 章 IDA 数据显示窗口  47

5.1 IDA 主要的数据显示窗口   47

5.1.1 反汇编窗口   47

5.1.2 函数窗口   52

5.1.3 输出窗口   52

5.2 次要的IDA 显示窗口   52

5.2.1 十六进制窗口  52

5.2.2 导出窗口   53

5.2.3 导入窗口   54

5.2.4 结构体窗口  54

5.2.5 枚举窗口   55

5.3 其他IDA 显示窗口   55

5.3.1 Strings 窗口   55

5.3.2 Names 窗口   57

5.3.3 段窗口  58

5.3.4 签名窗口   58

5.3.5 类型库窗口  59

5.3.6 函数调用窗口   59

5.3.7 问题窗口   60

5.4 小结  61

第6 章 反汇编导航  62

6.1 基本IDA 导航  62

6.1.1 双击导航  62

6.1.2 跳转到地址  64

6.1.3 导航历史记录  64

6.2 栈帧  65

6.2.1 调用约定   66

6.2.2 局部变量布局   69

6.2.3 栈帧示例   70

6.2.4 IDA 栈视图  73

6.3 搜索数据库   77

6.3.1 文本搜索   77

6.3.2 二进制搜索   77

6.4 小结   78

第7 章 反汇编操作   79

7.1 名称与命名   79

7.1.1 参数和局部变量   79

7.1.2 已命名的位置   80

7.1.3 寄存器名称   82

7.2 IDA 中的注释   82

7.2.1 常规注释   83

7.2.2 可重复注释   84

7.2.3 在前注释和在后注释   84

7.2.4 函数注释   84

7.3 基本代码转换   85

7.3.1 代码显示选项   85

7.3.2 格式化指令操作数   87

7.3.3 操纵函数   88

7.3.4 数据与代码互相转换   93

7.4 基本数据转换   94

7.4.1 指定数据大小  94

7.4.2 处理字符串   95

7.4.3 指定数组   97

7.5 小结   99

第8 章 数据类型与数据结构  100

8.1 识别数据结构的用法   102

8.1.1 数组成员访问   102

8.1.2 结构体成员访问   107

8.2 创建IDA 结构体  112

8.2.1 创建一个新的结构体(或联合)   112

8.2.2 编辑结构体成员  113

8.2.3 用栈帧作为专用结构体   115

8.3 使用结构体模板  115

8.4 导入新的结构体  118

8.4.1 解析C 结构体声明  118

8.4.2 解析C 头文件   119

8.5 使用标准结构体   120

8.6 IDA TIL 文件   123

8.6.1 加载新的TIL 文件  123

8.6.2 共享TIL 文件  123

8.7 C++逆向工程基础  124

8.7.1 this 指针  124

8.7.2 虚函数和虚表  125

8.7.3 对象生命周期  128

8.7.4 名称改编  129

8.7.5 运行时类型识别  130

8.7.6 继承关系  131

8.7.7 C++逆向工程参考文献  132

8.8 小结  132

第9 章 交叉引用与绘图功能  133

9.1 交叉引用  133

9.1.1 代码交叉引用  134

9.1.2 数据交叉引用  136

9.1.3 交叉引用列表  138

9.1.4 函数调用  139

9.2 IDA 绘图  140

9.2.1 IDA 外部(第三方)图形  140

9.2.2 IDA 的集成绘图视图  147

9.3 小结  149

第10 章 IDA 的多种面孔  150

10.1 控制台模式IDA   150

10.1.1 控制台模式的共同特性  150

10.1.2 Windows 控制台  151

10.1.3 Linux 控制台  152

10.1.4 OS X 控制台  154

10.2 使用IDA 的批量模式  156

10.3 小结  157

第三部分 IDA 高级应用

第11 章 定制IDA   160

11.1 配置文件  160

11.1.1 主配置文件:ida.cfg  160

11.1.2 GUI 配置文件:idagui.cfg   161

11.1.3 控制台配置文件:idatui.cfg   163

11.2 其他IDA 配置选项   164

11.2.1 IDA 颜色  165

11.2.2 定制IDA 工具栏   165

11.3 小结  167

第12 章 使用FLIRT 签名来识别库  168

12.1 快速库识别和鉴定技术  168

12.2 应用FLIRT 签名  169

12.3 创建FLIRT 签名文件  172

12.3.1 创建签名概述  172

12.3.2 识别和获取静态库  173

12.3.3 创建模式文件  174

12.3.4 创建签名文件  175

12.3.5 启动签名  178

12.4 小结  178

第13 章 扩展IDA 的知识  179

13.1 扩充函数信息  179

13.1.1 IDS 文件  181

13.1.2 创建IDS 文件  182

13.2 使用loadint 扩充预定义注释  184

13.3 小结  185

第14 章 修补二进制文件及其他IDA 限制  186

14.1 隐藏的补丁程序菜单  186

14.1.1 更改数据库字节  187

14.1.2 更改数据库中的字  187

14.1.3 使用汇编对话框  188

14.2 IDA 输出文件与补丁生成  189

14.2.1 IDA 生成的MAP 文件  189

14.2.2 IDA 生成的ASM 文件  190

14.2.3 IDA 生成的INC 文件  191

14.2.4 IDA 生成的LST 文件  191

14.2.5 IDA 生成的EXE 文件  191

14.2.6 IDA 生成的DIF 文件  191

14.2.7 IDA 生成的HTML 文件  192

14.3 小结  192

第四部分 扩展IDA 的功能

第15 章 编写IDA 脚本  194

15.1 执行脚本的基础知识  194

15.2 IDC 语言  196

15.2.1 IDC 变量  196

15.2.2 IDC 表达式  197

15.2.3 IDC 语句  197

15.2.4 IDC 函数  198

15.2.5 IDC 对象  200

15.2.6 IDC 程序  200

15.2.7 IDC 错误处理  201

15.2.8 IDC 永久数据存储  202

15.3 关联IDC 脚本与热键  203

15.4 有用的IDC 函数  204

15.4.1 读取和修改数据的函数  204

15.4.2 用户交互函数  205

15.4.3 字符串操纵函数  206

15.4.4 文件输入/输出函数  206

15.4.5 操纵数据库名称  207

15.4.6 处理函数的函数  207

15.4.7 代码交叉引用函数  208

15.4.8 数据交叉引用函数  209

15.4.9 数据库操纵函数  209

15.4.10 数据库搜索函数  210

15.4.11 反汇编行组件   210

15.5 IDC 脚本示例  211

15.5.1 枚举函数  211

15.5.2 枚举指令  212

15.5.3 枚举交叉引用  212

15.5.4 枚举导出的函数  214

15.5.5 查找和标记函数参数  215

15.5.6 模拟汇编语言行为  217

15.6 IDAPython  219

15.7 IDAPython 脚本示例  220

15.7.1 枚举函数  220

15.7.2 枚举指令  221

15.7.3 枚举交叉引用  222

15.7.4 枚举导出的函数  222

15.8 小结   223

第16 章 IDA 软件开发工具包   224

16.1 SDK 简介  225

16.1.1 安装SDK  225

16.1.2 SDK 的布局   225

16.1.3 配置构建环境  226

16.2 IDA 应用编程接口  227

16.2.1 头文件概述   228

16.2.2 网络节点   230

16.2.3 有用的SDK 数据类型   237

16.2.4 常用的SDK 函数   238

16.2.5 IDA API 迭代技巧  242

16.3 小结   246

第17 章 IDA 插件体系结构   247

17.1 编写插件   247

17.1.1 插件生命周期   249

17.1.2 插件初始化   250

17.1.3 事件通知   251

17.1.4 插件执行   252

17.2 构建插件  254

17.3 插件安装  258

17.4 插件配置  259

17.5 扩展IDC   259

17.6 插件用户界面选项   262

17.6.1 使用SDK 的“选择器”对话框   262

17.6.2 使用SDK 创建自定义表单   265

17.6.3 仅用于Windows 的用户界面生成技巧   269

17.6.4 使用Qt 生成用户界面  269

17.7 脚本化插件   271

17.8 小结  272

第18 章 二进制文件与IDA 加载器模块   273

18.1 未知文件分析   274

18.2 手动加载一个Windows PE 文件   275

18.3 IDA 加载器模块   281

18.4 使用SDK 编写IDA 加载器  282

18.4.1 “傻瓜式”加载器  284

18.4.2 构建IDA 加载器模块  288

18.4.3 IDA pcap 加载器  288

18.5 其他加载器策略  294

18.6 编写脚本化加载器  294

18.7 小结  296

第19 章 IDA 处理器模块  297

19.1 Python 字节码  298

19.2 Python 解释器  298

19.3 使用SDK 编写处理器模块  299

19.3.1 processor_t 结构体  299

19.3.2 LPH 结构体的基本初始化  300

19.3.3 分析器  303

19.3.4 模拟器  308

19.3.5 输出器  310

19.3.6 处理器通知  315

19.3.7 其他processor_t 成员  316

19.4 构建处理器模块  318

19.5 定制现有的处理器  322

19.6 处理器模块体系结构  324

19.7 编写处理器模块  325

19.8 小结  326

第五部分 实际应用

第20 章 编译器变体  328

20.1 跳转表与分支语句  328

20.2 RTTI 实现  332

20.3 定位main 函数  332

20.4 调试版与发行版二进制文件  339

20.5 其他调用约定  341

20.6 小结  342

第21 章 模糊代码分析  344

21.1 反静态分析技巧  344

21.1.1 反汇编去同步  344

21.1.2 动态计算目标地址  347

21.1.3 导入的函数模糊  353

21.1.4 有针对性地攻击分析工具  356

21.2 反动态分析技巧  357

21.2.1 检测虚拟化  357

21.2.2 检测“检测工具”   358

21.2.3 检测调试器  359

21.2.4 防止调试  360

21.3 使用IDA 对二进制文件进行“静态去模糊”   361

21.3.1 面向脚本的去模糊  361

21.3.2 面向模拟的去模糊  366

21.4 基于虚拟机的模糊  375

21.5 小结  377

第22 章 漏洞分析  378

22.1 使用IDA 发现新的漏洞  379

22.2 使用IDA 在事后发现漏洞  384

22.3 IDA 与破解程序开发过程  388

22.3.1 栈帧细目  389

22.3.2 定位指令序列  392

22.3.3 查找有用的虚拟地址  394

22.4 分析shellcode  395

22.5 小结  397

第23 章 实用IDA 插件  398

23.1 Hex-Rays   398

23.2 IDAPython   401

23.3 collabREate  402

23.4 ida-x86emu   404

23.5 Class Informer  404

23.6 MyNav   406

23.7 IdaPdf   407

23.8 小结  408

第六部分 IDA 调试器

第24 章 IDA 调试器  410

24.1 启动调试器  410

24.2 调试器的基本显示  414

24.3 进程控制  416

24.3.1 断点  417

24.3.2 跟踪  420

24.3.3 栈跟踪  422

24.3.4 监视  423

24.4 调试器任务自动化  423

24.4.1 为调试器操作编写脚本  424

24.4.2 使用IDA 插件实现调试器操作自动化  428

24.5 小结  430

第25 章 反汇编器/调试器集成  431

25.1 背景知识  431

25.2 IDA 数据库与IDA 调试器  432

25.3 调试模糊代码  434

25.3.1 启动进程  435

25.3.2 简单的解密和解压循环  436

25.3.3 导入表重建  439

25.3.4 隐藏调试器  443

25.4 IDAStealth   448

25.5 处理异常  449

25.6 小结  454

第26 章 其他调试功能   455

26.1 使用IDA 进行远程调试   455

26.1.1 使用Hex-Rays 调试服务器   455

26.1.2 连接到远程进程   458

26.1.3 远程调试期间的异常处理   458

26.1.4 在远程调试过程中使用脚本和插件  458

26.2 使用Bochs 进行调试   459

26.2.1 Bochs IDB 模式  459

26.2.2 Bochs PE 模式  460

26.2.3 Bochs 磁盘映像模式  461

26.3 Appcall    461

26.4 小结  463

附录A 使用IDA 免费版本5.0    464

附录B IDC/SDK 交叉引用   466