图书简介:
第1章 基础知识 1
1.1 漏洞的相关概念 1
1.1.1 什么是漏洞 1
1.1.2 漏洞的价值 1
1.1.3 0Day漏洞 2
1.1.4 PoC与Exploit 2
1.2 为什么要分析漏洞 2
1.3 常用分析工具 3
1.3.1 IDA——汇编利器 3
1.3.2 OllyDbg——破解与逆向常用调试器 4
1.3.3 Immunity Debugger——漏洞分析专用调试器 4
1.3.4 WinDbg——微软正宗调试器 5
1.3.5 x64dbg——Windows 64位调试器 6
1.3.6 Ghidra——反汇编器 7
1.3.7 GDB——Linux调试器 8
1.3.8 JEB——Android反编译器 9
1.3.9 其他工具 10
1.4 常见的漏洞分析方法 10
1.4.1 静态分析 10
1.4.2 动态调试 11
1.4.3 源码分析 11
1.4.4 补丁比较 12
1.4.5 污点追踪 12
1.5 学习资源 13
1.5.1 站点分享 13
1.5.2 书籍推荐 14
1.6 本章总结 15
第2章 栈溢出漏洞分析 16
2.1 栈溢出简史 16
2.2 栈溢出原理 17
2.3 CVE-2010-2883 Adobe Reader TTF字体SING表栈溢出漏洞 18
2.3.1 LuckyCat攻击事件 18
2.3.2 漏洞描述 19
2.3.3 分析环境 19
2.3.4 基于字符串定位的漏洞分析方法 20
2.3.5 样本Exploit技术分析 21
2.3.6 样本Shellcode恶意行为分析 27
2.3.7 漏洞修复 30
2.4 CVE-2010-3333 Microsoft RTF栈溢出漏洞 31
2.4.1 林来疯攻击事件 31
2.4.2 漏洞描述 32
2.4.3 分析环境 32
2.4.4 RTF文件格式 33
2.4.5 基于栈回溯的漏洞分析方法 34
2.4.6 漏洞利用原理分析 42
2.4.7 Office 2003与Office 2007 Exploit通用性研究 43
2.4.8 漏洞修复 46
2.5 CVE-2011-0104 Microsoft Excel TOOLBARDEF Record栈溢出漏洞 52
2.5.1 漏洞描述 52
2.5.2 分析环境 52
2.5.3 基于污点追踪思路的漏洞分析方法 53
2.5.4 漏洞修复 59
2.6 阿里旺旺ActiveX控件imageMan.dll栈溢出漏洞 60
2.6.1 漏洞描述 60
2.6.2 分析环境 61
2.6.3 针对ActiveX控件的漏洞分析方法 61
2.6.4 漏洞利用原理分析 64
2.7 CVE-2012-0158 Microsoft Office MSCOMCTL.ocx栈溢出漏洞 65
2.7.1 Lotus Blossom 行动 65
2.7.2 漏洞描述 66
2.7.3 分析环境 66
2.7.4 基于OffVis工具的Office漏洞分析方法 66
2.7.5 漏洞修复 72
2.8 本章总结 73
第3章 堆溢出漏洞分析 74
3.1 堆溢出简史 74
3.2 堆溢出原理 75
3.3 堆调试技巧 80
3.3.1 堆尾检查 81
3.3.2 页堆 82
3.4 CVE-2010-2553 Microsoft Cinepak Codec CVDecompress函数堆溢出漏洞 86
3.4.1 漏洞描述 86
3.4.2 分析环境 86
3.4.3 基于HeapPage的堆漏洞分析方法 86
3.4.4 漏洞修复 101
3.5 CVE-2012-0003 Microsoft Windows Media Player winmm.dll MIDI文件堆溢出漏洞 104
3.5.1 关于“蜘蛛”漏洞攻击包(Zhi-Zhu Exploit Pack) 104
3.5.2 漏洞描述 105
3.5.3 分析环境 105
3.5.4 MIDI文件格式 105
3.5.5 基于导图推算的漏洞分析方法 107
3.5.6 漏洞利用原理分析 120
3.5.7 补丁比较 127
3.6 CVE-2013-0077 Microsoft DirectShow quartz.dll m2p文件堆溢出漏洞 127
3.6.1 漏洞描述 127
3.6.2 基于HTC的漏洞分析方法 127
3.6.3 漏洞修复 131
3.7 CVE-2012-1876 Internet Explorer MSHTML.dll CalculateMinMax堆溢出漏洞 132
3.7.1 在Pwn2Own黑客大赛上用于攻破IE9的漏洞 132
3.7.2 分析环境 132
3.7.3 基于HPA的漏洞分析方法 132
3.7.4 通过信息泄露实现漏洞利用 146
3.7.5 漏洞修复 155
3.8 本章总结 157
第4章 整数溢出漏洞分析 158
4.1 整数溢出简史 158
4.2 整数溢出原理 158
4.2.1 基于栈的整数溢出 159
4.2.2 基于堆的整数溢出 160
4.3 CVE-2011-0027 Microsoft Data Access Components整数溢出漏洞 161
4.3.1 在Pwn2Own黑客大赛上用于攻破IE8的漏洞 161
4.3.2 基于堆分配记录的漏洞分析方法 162
4.3.3 补丁比较 170
4.4 CVE-2012-0774 Adobe Reader TrueType字体整数溢出漏洞 172
4.4.1 漏洞描述 172
4.4.2 PDF文件格式与常用分析工具 172
4.4.3 基于条件记录断点的漏洞分析方法 176
4.4.4 补丁分析 190
4.5 CVE-2013-0750 Firefox字符串替换整数溢出漏洞 191
4.5.1 漏洞描述 191
4.5.2 基于源码调试的漏洞分析方法 191
4.5.3 源码比对 201
4.6 CVE-2013-2551 Internet Explorer VML COALineDashStyleArray整数溢出漏洞 202
4.6.1 在Pwn2Own黑客大赛上攻破IE10的漏洞 202
4.6.2 基于类函数定位的漏洞分析方法 202
4.6.3 利用信息泄露实现漏洞利用 217
4.7 本章总结 220
第5章 格式化字符串漏洞分析 221
5.1 格式化字符串漏洞简史 221
5.2 格式化字符串漏洞的原理 221
5.3 CVE-2012-0809 Sudo sudo_debug函数格式化字符串漏洞 228
5.3.1 漏洞描述 228
5.3.2 通过源码比对分析漏洞 228
5.4 CVE-2012-3569 VMware OVF Tool格式化字符串漏洞 229
5.4.1 漏洞描述 229
5.4.2 基于输出消息的漏洞定位方法 229
5.4.3 漏洞利用原理分析 233
5.5 本章总结 236
第6章 双重释放漏洞分析 237
6.1 双重释放漏洞简史 237
6.2 双重释放漏洞的原理 237
6.3 CVE-2010-3974 Windows传真封面编辑器fxscover.exe双重释放漏洞 240
6.3.1 漏洞描述 240
6.3.2 通过栈回溯和堆状态判定漏洞类型 240
6.3.3 通过补丁比较确定漏洞成因及修复方法 243
6.4 CVE-2014-0502 Adobe Flash Player 双重释放漏洞 245
6.4.1 GreedyWonk行动 245
6.4.2 静态分析攻击样本 245
6.4.3 Shellcode自动化模拟执行 254
6.4.4 基于ROP指令地址的反向追踪 256
6.5 本章总结 264
第7章 释放重引用漏洞分析 265
7.1 释放重引用(Use After Free,UAF)漏洞简史 265
7.2 UAF漏洞的原理 265
7.3 CVE-2011-0065 Firefox mChannel UAF漏洞 268
7.3.1 漏洞描述 268
7.3.2 通过动态调试快速定位漏洞源码 268
7.3.3 漏洞利用原理分析 276
7.3.4 源码比对 277
7.4 CVE-2013-1347 Microsoft IE CGenericElement UAF漏洞 278
7.4.1 “水坑”攻击事件 278
7.4.2 通过HPA快速定位漏洞对象 278
7.4.3 逆向分析IE引擎对JavaScript代码的解析 281
7.4.4 追本溯源:探寻漏洞的根因 312
7.4.5 漏洞利用原理分析 315
7.5 CVE-2013-3346 Adobe Reader ToolButton UAF漏洞 317
7.5.1 “Epic Turla”网络间谍攻击行动 317
7.5.2 使用peepdf分析PDF恶意样本 317
7.5.3 漏洞利用原理分析 326
7.6 CVE-2015-0313 Adobe Flash Player Workers ByteArray UAF漏洞 328
7.6.1 漏洞描述 328
7.6.2 分析ActionScript虚拟机源码辅助漏洞调试 328
7.6.3 Flash JIT调试插件与符号文件 341
7.6.4 漏洞利用原理分析 342
7.6.5 漏洞修复 348
7.7 本章总结 348
第8章 数组越界访问漏洞分析 349
8.1 数组越界与溢出的关系 349
8.2 数组越界访问漏洞原理 349
8.3 CVE-2011-2110 Adobe Flash Player数组越界访问漏洞 351
8.3.1 漏洞描述 351
8.3.2 解决安装旧版Flash Player的限制问题 351
8.3.3 通过Perl脚本辅助分析样本 352
8.3.4 搭建服务器重现漏洞场景 358
8.3.5 通过修改样本代码定位漏洞 360
8.3.6 通过构造信息泄露利用漏洞 363
8.3.7 通过搜索指令序列分析补丁 367
8.4 CVE-2014-0160 OpenSSL TLS数组越界访问漏洞(“心脏滴血”) 369
8.4.1 漏洞描述 369
8.4.2 基于源码对比与跟踪的漏洞分析方法 370
8.4.3 利用漏洞盗取网站账号 376
8.5 本章总结 380
第9章 内核漏洞分析 381
9.1 Windows内核漏洞漫谈 381
9.2 Windows内核调试环境搭建 382
9.3 常见内核漏洞原理与利用 384
9.3.1 漏洞成因分析 384
9.3.2 漏洞利用原理分析 391
9.4 360安全卫士bregdrv.sys本地提权漏洞分析 399
9.4.1 漏洞描述 399
9.4.2 基于导出函数和I/O控制码的追踪分析 400
9.5 CVE-2011-2005 Windows Afd.sys本地提权漏洞 409
9.5.1 漏洞描述 409
9.5.2 从利用代码到漏洞函数的定位分析 409
9.5.3 补丁比较 412
9.6 CVE-2013-3660 Windows win32k.sys EPATHOB指针未初始化漏洞 412
9.6.1 漏洞描述 412
9.6.2 通过IDA定义结构体辅助分析 413
9.6.3 漏洞利用原理分析 417
9.7 CVE-2014-1767 Windows AFD.sys双重释放漏洞(Pwn2Own 2014) 423
9.7.1 Pwnie Awards 2014“最佳提权漏洞奖”得主 423
9.7.2 基于IOCTL处理函数自动追踪记录的分析方法 423
9.7.3 漏洞利用原理分析 440
9.7.4 补丁分析 446
9.8 本章总结 448
第10章 Android平台漏洞分析 449
10.1 Android平台漏洞简史 449
10.2 Android平台漏洞分类 452
10.3 常见的漏洞分析方法 453
10.3.1 APK静态分析 453
10.3.2 smali动态调试 454
10.3.3 so库动态调试 460
10.3.4 补丁源码比对 460
10.3.5 系统Java源码调试 463
10.3.6 系统C/C++源码调试 471
10.3.7 Android内核源码调试 473
10.4 智能插座漏洞分析 476
10.4.1 漏洞描述 476
10.4.2 静态逆向分析 477
10.4.3 利用漏洞控制网络上的任意插座 481
10.4.4 总结 486
10.5 CVE-2013-4787 Android系统签名漏洞 487
10.5.1 漏洞描述 487
10.5.2 Android签名机制 487
10.5.3 漏洞重现 493
10.5.4 漏洞原理分析 498
10.5.5 漏洞修复 500
10.6 CVE-2010-1119 Android WebKit UAF漏洞 500
10.6.1 漏洞描述 500
10.6.2 漏洞利用原理分析 501
10.6.3 通过补丁源码分析漏洞成因 508
10.7 CVE-2014-3153 Android内核Futex提权漏洞(Towelroot) 512
10.7.1 Android设备Root神器—Towelroot 512
10.7.2 通过内核源码调试分析漏洞 512
10.7.3 漏洞利用原理分析 532
10.7.4 漏洞修复 538
10.8 本章总结 538
第11章 其他类型的漏洞分析 539
11.1 引言 539
11.2 CVE-2013-2423 JAVA Applet reflection类型混淆代码执行漏洞 539
11.2.1 漏洞描述 539
11.2.2 类型混淆漏洞 539
11.2.3 Java安全机制 540
11.2.4 漏洞分析与利用原理 542
11.2.5 漏洞修复 546
11.2.6 2013年漏洞之王—Java 547
11.3 CVE-2014-0257 Microsoft Internet Explorer 11 dfsvc组件沙盒逃逸漏洞 548
11.3.1 漏洞描述 548
11.3.2 IE沙盒保护原理 548
11.3.3 IE沙盒攻击面分析 553
11.3.4 CVE-2014-0257漏洞分析与利用原理 554
11.4 CVE-2014-9150 Adobe Acrobat Reader MoveFileEx IPC Hook竞争条件(沙盒逃逸)漏洞 556
11.4.1 Therac-25医疗事故 556
11.4.2 竞争条件漏洞原理 557
11.4.3 CVE-2014-9150漏洞描述 558
11.4.4 Adobe沙盒简介 558
11.4.5 利用漏洞实现沙盒逃逸 559
11.5 本章总结 562
展开
修订版说明
遥想当年,初次著书时的忐忑,几经放弃又重启的波澜,来回修改时的烦躁,出版后的如释重负……不由深为感慨:人生有此一番经历足矣!
本书第一版印刷时采用了轻型环保纸,由于纸张颜色偏暗、手感较粗糙,多次被读者误认为是盗版书,因此出版社后来改用常规纸张印刷——这也是网上有人反馈自己买来的书比朋友买的薄许多的原因。这些读者心声,出版社一直在关注并改进。
个人认为,书的质量远比数量重要。此类漏洞案例实战的书并不好写、费时费力,以致自本书第一版问世后,我便一直没有再著新书的想法,但前版的内容可以持续完善与优化。因此,当编辑提议修订内容再版时,我是举双手赞成的。
本次主要修订了以下内容:
第一,修正前版中的错误,简化前版中的冗余表述,并更新了不够清晰的图片(如许多调试器和IDE的界面均默认为暗黑背景,此版均改成了白底黑字,以提升阅读体验)。
因此严格来说,此版虽未涉及大幅更新,但一定是目前最好、最清晰的版本。
第二,在第1章中增补了对x64dbg和Ghidra的介绍;删除前版部分过时的内容。
书中选取的案例虽已有些年头,但其中介绍的技巧仍旧适用,对于缺少漏洞挖掘实战经验的读者,依然有参考价值,如果读者能跟着书中案例动手调试一遍,功力定能有所提升。
这些年笔者一直关注网络安全出版领域,个人认为无论是在图书出版的数量还是质量上均有一定的提升空间,期待未来能诞生更多优秀的网络安全著作,推动国内网络安全行业的发展。
最后感谢七年来众多读者的支持与反馈,帮助笔者不断改进与完善本书,特别是帮助勘误本书的读者,他们分别是陈良、江小照、不高兴撒、55-AA、肯特awp、hanfengley、期待的远行、ench4nt3r、杯中取月、兴华蔡27136、Murasaki、王大状、rootkiter、wingdbg、rwx、willJ、2017要好好长肉肉、坩埚钳Deeom、holing。以上名单按反馈时间排序,若有遗漏,敬请见谅。
林桠泉
2023年11月
前言
不知道大家是否曾有这样的经历:
● 无法读懂网上众多的软件漏洞分析文章,不理解漏洞成因和漏洞利用技巧。
● 即使读懂某篇软件漏洞分析文章,自己仍无法独立完成相同漏洞的分析。如果文章中所使用的测试环境与软件版本跟自己使用的不一样,则顿时不知从何入手。
● 很多软件漏洞分析文章会贴出存在漏洞的汇编代码,指出漏洞形成的原因,即给出“结论式分析”,却并不解释如何定位到此段代码,看完之后,仍不知如何快速定位,缺乏可借鉴的思路。
带着这些问题,相信读者会在本书中找到想要的答案。
本书的写作始于2012年5月,最初是网友“爱无言”向我提议合写一本关于软件漏洞案例分析的著作——因为当时我在博客上每周都会分享一两篇软件漏洞分析的实际案例,而当时国内还没有专门针对软件漏洞案例的专著(《0Day安全:软件漏洞分析技术》主要偏向堆栈溢出及内核方面的漏洞分析,实际案例较少,且“爱无言”也是该书作者之一)——于是,我们一拍即合,写书的念头就此产生。
后来,我又拉了两位朋友加入,共同列出了大纲。然而种种原因,最后只剩下我独自完成本书的创作,中途也曾多次想放弃。直到某一天,编辑皎子找我聊了一些出书的想法,就这样,一本原打算沉埋箱底的“残卷”再次被“激活”,而一本原为“合著”的书就成了“专著”。好在“激活”之后的写书经历还算顺利,从开始动笔到出版上市,前后历时4年。图书质量和出版后的效果也比较符合预期,埋藏心底多年的“结”总算可以打开了。
相信一些读者看到本书目录后会有一些疑问,我也相信其中一些疑问也是当时我在定位本书方向时曾考虑过的,所以有必要在此谈一谈。
Q:本书与《0day安全:软件漏洞分析技术》有何区别?
A:《0day安全:软件漏洞分析技术》一书主要阐述Windows平台下堆栈溢出和内核提权的漏洞分析技术,同时涉及部分格式化字符串漏洞,从基础讲起,最后是实例分析。本书则完全以真实的漏洞为实例,并根据不同的漏洞类型来分享漏洞分析的不同技巧,可以说是“用调试器写出来的一本书”,而且综合考虑了当前热门的移动安全技术,特意加入Android平台上的漏洞分析章节,从Java层、Native层和内核层等方向分享不同的调试分析方法。从难度而言,本书比《0day安全:软件漏洞分析技术》一书更难,读者朋友可以将本书当成进阶版,搭配学习。
Q:本书列举的许多漏洞实例网上早有分析文章,为何还写这本书?
A:著书的宗旨在于“授人以鱼,不如授人以渔”。如果读者经常看网上的漏洞分析文章,就会发现一个常见现象:它们大多是“结论性分析”,而非“思路性分析”。换句话说,就是贴出存在漏洞的汇编代码,然后直接给出漏洞成因的结论,至于如何定位到漏洞代码,并没有给出分析思路。正因为如此,即使你看懂了Vupen漏洞军火商写的分析文章,也不代表你看完后就能独立分析出来,甚至在调试之后,你还会发现Vupen会在一些文章中留“坑”,故意省略或写错某些关键内容,如果自己没有实际调试一遍是很难发现这些问题的。
相信有一定软件漏洞分析经验的朋友会注意到,软件漏洞分析的大部分时间花费在寻找和定位漏洞代码上,而非分析存在漏洞的代码。对于有一定编程经验和漏洞基础的读者,如果直接给出一段漏洞代码,他们可能很容易就能看出来;但如果是像Adobe和Windows这样复杂的软件或系统,分析人员要在千千万万的代码行中找出漏洞代码是有一定难度的。因此,本书的重点是讲授如何快速地定位漏洞代码,针对不同漏洞类型采取不同的分析技巧,以帮助大家快速地分析出漏洞成因,制定检测、防御与修复方案。书中的漏洞实例分析技巧是可以长期运用和延伸的,这才是本书的核心价值。
Q:如何借助本书提升自身的软件漏洞分析能力?
A:本书主要面向有一定软件漏洞分析基础的读者。如果读者缺乏这方面的基础,但有一定的C语言和汇编语言的基础,则建议提前阅读《0day安全:软件漏洞分析技术》一书。软件漏洞分析是实践性较强的技术工作,需要许多实际动手的调试经验,因此建议大家在阅读本书的同时,自己手动调试,以加深理解。这就像骑自行车一样,在熟练之后,哪怕十年未碰车,也依然能上手。本书在分析漏洞时,也尽量以思路性的描述为主,侧重讲解分析漏洞时的思考方式和常用技巧,包括工具和方法论,因此大家在阅读时,应该掌握书中介绍的思考方式、工具运用及分析技巧,毕竟某个漏洞案例本身是会过时的,但技巧性的东西总是可以借鉴和扩展的。
记得大一上第一节历史课时,老师说过这样一句话,如果在未来的某一天,你在和朋友闲聊时,能够运用到历史课上学到的知识,哪怕只是用到一句话作为谈资,那这节历史课就算没白学。同样地,我也希望未来大家在分析软件漏洞时,本书能够提供一些帮助,哪怕是一个分析技巧,一个工具使用,我也觉得这4年的付出相当值了。
近年来,各种APT攻击事件频发,一些知名企业,甚至国家级单位都曾遭受到漏洞攻击。每年都有一款产品的漏洞被频繁用于网络攻击,比如,2012年的Office漏洞(还记得经典的CVE-2012-0158吗),2013年的Java漏洞,2014年的Internet Explorer漏洞,2015年的Adobe Flash漏洞。PC端上的软件漏洞则一直在逐年增加,虽然厂商不断推出各种安全机制,但漏洞利用技术自身的发展也从未间断,Exploiters依然生存得很好。同时,互联网早已步入移动化时代,伴随着PC软件漏洞攻击事件的频发,移动端的漏洞攻击也在逐年增长。因此,笔者结合PC端(Windows)与移动端(Android)平台上的漏洞案例,将自身的实战经验整理成本书。
求学之路
经常有人问我:“一个医学生为什么会转行做安全?”通常我都会这么回答:“因为小说看多了。”
大一时,由于喜欢看黑客小说,比如,《黑客传说》《地狱黑客》《指间的黑客》,我就去图书馆找一些黑客书籍来自学,每天中午都不休息,几乎天天泡在图书馆看书,甚至“翘课”去看计算机专业的书。
一直到大四我才终于买了计算机,在此之前都只能去网吧、学校机房或者借用舍友的计算机。当年,我就用诺基亚3100手机看完了《Windows程序设计》《Windows核心编程》和《Windows环境下32位汇编语言程序设计》;再后来就网购图书——这比在网吧看电子书更实惠。
大学期间,我还经常给《黑客防线》杂志投稿,一方面可以提升个人技术水平,另一方面还可以用稿费作为生活补贴。后来我也是用稿费再加上哥哥的支持,买了人生中第一台属于自己的计算机,本书就有一半内容是在这台计算机上完成的。
在求学这条道路上,我一直是一个人默默地前行着,就连一块生活了几年的舍友也不知道我在学习安全方面的知识,我买的一堆计算机专业的图书一直被藏在宿舍衣柜的最里面。在此过程中,自己走过很多弯路,甚至差点放弃,但很庆幸最后还是坚持下来了。直至今日,我依然在安全这条道路上前行着……
面试经历
在圈内朋友的建议下,我在大五(医学五年制)上学期开始寻找信息安全相关的工作,最终顺利拿到安恒和腾讯的offer。当初投简历给安恒时,安恒的副总裁看完我的简历后直接发了offer,我有点受宠若惊,也特别感谢安恒的信任,但最终还是选择了腾讯。面试腾讯的经历,我觉得是个有趣的过程,值得与大家分享。
那年我还在厦门市第二医院骨伤科实习,门诊部刚好不是特别忙,我给一位腰椎患者做完针灸后,就接到来自腾讯安全中心的面试电话。趁主任不在,我偷偷躲到门诊部后面的楼梯口进行电话面试,整个面试过程还算比较顺利,第二天腾讯安全中心就来电说希望我到深圳总部面试。
到了深圳总部后,腾讯安全中心的主管面试了我,虽然聊了一个半小时,但没有问太多问题,聊完后我就被直接带到HR那里面试。
HR面试时,我们的开场并非常规的话题,而是腰椎间盘突出!这也算是一次别开生面的面试经历吧。
回到厦门后,我向带教老师说明了转行情况,之后有上手术台的机会,我都会主动让给其他同班同学,让他们有更多上台练手的机会,而我自己自然有更多的时间去钻研安全技术。
加入腾讯
腾讯是我的第一家雇主,也是目前我唯一工作过的公司,从我毕业一直工作到现在。我见证了腾讯安全应急响应中心(TSRC)的成立与发展,并帮助完善了各种流程和标准。作为早期主要的漏洞审核者,我也从广大白帽子身上学到很多东西,包括各种漏洞挖掘与利用技术,涉及各个安全领域,如Web安全、驱动安全、应用软件安全、移动安全等。正是TSRC给了我更多学习的机会,使我在安全技术上能够更加全面地发展。除此之外,我在公司也从事一些安全研究工作,研发出Android与iOS应用安全审计系统,现已投入公司日常运营中。
至今,我依然觉得能够将工作与兴趣结合在一起,是一件既幸福又幸运的事,而选择腾讯依然是我当年的明智之举。
著书感言
本书是我写的第一本书,也可能是我写的最后一本技术书。只有亲历著书过程,才知道写书的不易。特别是类似本书这种针对漏洞实例进行调试分析的书,写起来特别费时,也更需要有持之以恒的毅力。如果说单纯写书花了1年时间,那么我用来调试的时间大约是3年,因此也可以说这是“一本用调试器写出来的书”。
“开头容易,收尾难”是个人著书的真实感受,很多人一时兴起写了开头,最后很难坚持下去,应该有不少潜在的佳作就此中途夭折了。
本书结构
本书共12章,可以分为三大部分。
基础篇(第1章):主要介绍一些软件漏洞相关的基本概念,以及常用工具及漏洞分析方法,最后向读者推荐一些相关的学习站点和书籍,方便读者进一步学习和交流。
实战篇(第2~11章):这是本书最主要的部分,根据不同的漏洞类型挑选不同的经典案例,用不同的漏洞分析技巧,向读者介绍比较高效的分析方法,剖析各种常见的软件漏洞类型、原理、利用和修复的实战技术。同时,紧跟当前热门的移动互联网安全问题,增加了Android平台的漏洞分析,以保证内容与时俱进。
展望篇(第12章):对未来的软件漏洞发展趋势作出预判,相信未来的主要战场会更集中在移动终端、云计算平台、物联网三大方向上,并简要介绍这些方向的漏洞案例。
致谢
感谢父母的养育之恩,是他们在背后默默地支持我前行。
感谢兄长在生活和工作上的帮助与支持。
感谢我的女朋友,正是她的督促和支持才让我能够准时完稿,书中部分截图是由她后期制作的,以呈现更好的印刷效果。
感谢姑母长期以来对我生活上的关心与照顾。
感谢我的东家腾讯公司,它营造的良好氛围,令我的技术水平和职场发展都更上了一层楼。同时也感谢在工作中一直给予我帮助和鼓励的同事和领导,由于人数较多,在此不一一列举。
感谢博文视点的编辑皎子、郑柳洁及她们的团队,正是她们的努力才使得本书最终能够与大家见面。
感谢各位圈内的朋友,他们包括但不限于(排名不分先后):wushi、爱无言、仙果、wingdbg、instruder、kanxue、lake2、harite、h4ckmp、dragonltx、非虫、monster、gmxp、古河、冰雪风谷、KiDebug、KK……
由于作者水平有限,书中难免有错漏之处,欢迎各位业界同仁斧正!
展开