新書推薦:
《
中国常见植物野外识别手册:青海册
》
售價:HK$
78.2
《
三星堆对话古遗址(从三星堆出发,横跨黄河流域,长江流域,对话11处古遗址,探源多元一体的中华文明)
》
售價:HK$
89.7
《
迷人的化学(迷人的科学丛书)
》
售價:HK$
147.2
《
宋代冠服图志(详尽展示宋代各类冠服 精美插图 考据严谨 细节丰富)
》
售價:HK$
87.4
《
形似神异:什么是中日传统政治文化的结构性差异
》
售價:HK$
55.8
《
养育不好惹的小孩
》
售價:HK$
79.4
《
加加美高浩的手部绘画技法 II
》
售價:HK$
91.8
《
卡特里娜(“同一颗星球”丛书)
》
售價:HK$
89.7
|
編輯推薦: |
IDA Pro开发者亲自推荐
步入IDA Pro和逆向工程的殿堂
逆向工程师的必备手册
|
內容簡介: |
《IDA Pro权威指南第2版》共分为六部分,首先介绍了反汇编与逆向工程的基本信息和IDA Pro的背景知识,接着讨论了IDA Pro的基本用法和高级用法,然后讲解了其高扩展性及其在安全领域的实际应用,最后介绍了IDA的内置调试器包括Bochs调试器,一方面让用户对IDA Pro有全面深入的了解,另一方面让读者掌握IDA Pro在现实中的应用。相比上一版,这一版以IDA6.0为基础,介绍了它的新的、基于Qt的图形用户界面,以及IDAPython插件。
《IDA Pro权威指南第2版》适合IT领域的所有安全工作者阅读。
|
關於作者: |
Chris Eagle是美国加利福尼亚州蒙特雷海军研究生院计算机科学系高级讲师。他设计了很多IDA插件,还与人合著了Gray Hat Hacking一书。他应邀在Balckhat、Defcon、Toorcon和Shmoocon等众多安全会议上发表过演讲
|
目錄:
|
目 录
第一部分 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 IDCSDK交叉引用 466
|
內容試閱:
|
第1章 反汇编简介
拿到一本专门介绍IDAPr0的书,你很可能急切地想知道书里会讲些什么。很明显,本书以IDA为中心,但我并不希望读者将其作为IDAPr0用户手册。相反,本书旨在将IDA作为推动逆向工程技术讨论的工具。你会发现,在分析各种软件包括易受攻击的应用程序和恶意软件时,这些技术非常有用。在适当的时候,我将提供在使用IDA时需要遵循的详细步骤,好让你执行与你手头的任务有关的特殊操作。因此,我将简略地介绍IDA的功能,包括最初分析文件时需要执行的基本任务,最后讨论IDA的高级用法和定制功能用来解决更具挑战性的逆向工程问题。我不会介绍IDA的所有功能。但是,你将发现,在应对逆向工程挑战时,本书介绍的功能极其有用,这也使得IDA成为你工具箱中最强大的武器。
在详细介绍IDA之前,了解反汇编过程的一些基础知识,以及其他一些对编译代码进行逆向工程的可用工具,会有一定好处。虽然这些工具的功能都不如IDA全面,但它们具备IDA的一部分功能,有助于我们了解IDA的某些功能。本章的剩余部分主要介绍反汇编过程。
1.1反汇编理论
任何学过编程语言的人都知道,编程语言分为好几代,下面为那些上课不认真的读者简要总结一下。
第一代语言。这些语言是最低级的语言,一般由0和1或某些简写编码如十六进制码组成。只有二进制超人才能读懂它们。由于数据和指令看起来都差不多,人们往往很难将它们区分开来,因此这种语言很容易造成混淆。第一代语言也称为机器语言,有时也叫做字节码,而机器语言程序常被称为二进制文件。
第二代语言。第二代语言也叫汇编语言,它只是一种脱离了机器语言的表查找方式。通常,汇编语言会将具体的位模式或操作码,与短小且易于记忆的字符序列即助记符对应起来。有时候,这些助记符确实有助于程序员记住与它们有关的指令。汇编器是程序员用来将汇编语言程序转换成能够执行的机器语言的工具。
第三代语言。这些语言引入了关键字和结构它们是程序的构建块,因而其表达能力更接近于自然语言。通常,第三代语言不依赖于任何平台。但是,由于用第三代语言编写的程序使用了特定于操作系统的独特功能,它们便具有了平台依赖性。……
|
|