标题：Oday安全:软件漏洞分析技术
编辑推荐
从软件开发者的角度著书阐述漏洞分析与检测技术的专业软件工程师。《oday安全：软件漏洞分析技术》的作者非常恰当地把着眼点放在一个软件开发者的角度去做漏洞检测，使得《oday安全：软件漏洞分析技术》对大多数读者来说更加实用。
《oday安全：软件漏洞分析技术》为我们系统介绍了漏洞分析的原理和技术细节，并深入浅出地引用了不少在安全界非常经典的漏洞实例。然而，更重要的是failwest并没有流水账式的罗列知识与技术，而是花了大量的篇幅介绍了漏洞检测的步骤及其背后的思维方式。这些完全不同的思维方式，加上分析员必备的技能以及必需的工具，为读者展现了一套非常完整的软件漏洞分析方法。
关于安全技术人才
国内外对网络安全技术人才的需求量很大，精通缓冲区溢出攻击的安全专家可以在大型软件公司轻易地获得高薪的安全咨询职位。
信息安全技术是一个对技术性要求极高的领域，除了扎实的计算机理论基础外，更重要的是优秀的动手实践能力。在我看来，不懂二进制数据就无从谈起安全技术。
国内近年来对网络安全的重视程度正在逐渐增加，许多高校相继成立了“信息安全学院”或者设立“网络安全专业”。科班出身的学生往往具有扎实的理论基础，他们通晓密码学知识、知道PKI体系架构，但要谈到如何真刀实枪地分析病毒样本、如何拿掉PE上复杂的保护壳、如何在二进制文件中定位漏洞、如何对软件实施有效的攻击测试……能够做到的人并不多。
虽然每年有大量的网络安全技术人才从高校涌入人力市场，真正能够满足用人单位需求的却寥寥无几。捧着书本去做应急响应和风险评估是滥竽充数的作法，社会需要的是能够为客户切实解决安全风险的技术精英，而不是满腹教条的阔论者。
我所认识的很多资深安全专家都并非科班出身，他们有的学医、有的学文、有的根本没有学历和文凭，但他们却技术精湛，充满自信。
这个行业属于有兴趣、够执著的人，属于为了梦想能够不懈努力的意志坚定者。
关于“Impossible”与“I’mpossible”
从拼写上看，“Impossible”与“I’mpossible”仅仅相差一个用于缩写的撇号（apostrophe）。学完本书之后，您会发现将“不可能（Impossible）”变为“可能（I’mpossible）”的“关键（keypoint）”往往就是那么简单的几个字节，本书将要讨论的就是在什么位置画上这一撇！
从语法上看，“Impossible”是一个单词，属于数据的范畴；“I’mpossible”是一个句子，含有动词（算符），可以看成是代码的范畴。学完本书之后，您会明白现代攻击技术的精髓就是混淆数据和代码的界限，让系统错误地把数据当作代码去执行。
从意义上看，Tobetheapostrophewhichchanged“Impossible”into“I’mpossible”代表着人类挑战自我的精神，代表着对理想执著的追求，代表着对事业全情的投入，代表着敢于直面惨淡人生的豪情……而这一切正好是黑客精神的完美诠释——还记得在电影《SwordFish（剑鱼行动）》中，Stan在那台酷毙的计算机前坚定地说：“Nothingisimpossible”，然后开始在使用Vernam加密算法和512位密钥加密的网络上，挑战蠕虫的经典镜头吗？
于是我在以前所发表过的所有文章和代码中都加入了这个句子，甚至用它作为自己的签名档。
尽管我的英语老师和不少外国朋友提醒我，说这个句子带有强烈的“Chinglish”味道，甚至会引起NativeSpeaker的误解，然而我最终还是决定把它写进书里。
虽然我不是莎士比亚那样的文豪，可以创造语言，发明修辞，用文字撞击人们的心灵，但这句“Chinglish”的确能把我所要表达的含义精确地传递给中国人，这已足够。
关于本书
通常情况下，利用缓冲区溢出漏洞需要深入了解计算机系统，精通汇编语言乃至二进制的机器代码，这足以使大多数技术爱好者望而却步。
随着时间的推移，缓冲区溢出攻击在漏洞的挖掘、分析、调试、利用等环节上已经形成了一套完整的体系。伴随着调试技术和逆向工程的发展，Windows平台下涌现出的众多功能强大的debug工具和反汇编分析软件逐渐让二进制世界和操作系统变得不再神秘，这有力地推动了Windows平台下缓冲区溢出的研究。除此以外，近年来甚至出现了基于架构（FrameWork）的漏洞利用程序开发平台，让这项技术的进入门槛大大降低，使得原本高不可攀的黑客技术变得不再遥不可及。
遗憾的是，与国外飞速发展的高级黑客技术相比，目前国内还没有系统介绍Windows平台下缓冲区溢出漏洞利用技术的专业书籍，而且相关的中文文献资料也非常匮乏。
本书将系统全面地介绍Windows平台软件缓冲区溢出漏洞的发现、检测、分析和利用等方面的知识。
为了保证这些技术能够被读者轻松理解并掌握，本书在叙述中尽量避免枯燥乏味的大段理论阐述和代码粘贴。概念只有在实践中运用后才能真正被掌握，这是我多年来求学生涯的深刻体会。书中所有概念和方法都会在紧随其后的调试实验中被再次解释，实验和案例是本书的精髓所在。从为了阐述概念而精心自制的漏洞程序调试实验到现实中已经造成很大影响的著名漏洞分析，每一个调试实验都有着不同的技术侧重点，每一个漏洞利用都有自己的独到之处。
我将带领您一步一步地完成调试的每一步，并在这个过程中逐步解释漏洞分析思路。不管您是网络安全从业人员、黑客技术发烧友、网络安全专业的研究生或本科生，如果您能够完成这些分析实验，相信您的软件调试技术、对操作系统底层的理解等计算机能力一定会得到一次质的飞跃，并能够对安全技术有一个比较深入的认识。
目录
第1篇　基础知识
第1章　漏洞概述2
1.1　bug与漏洞2
1.2　几个令人困惑的安全问题2
1.3　漏洞挖掘、漏洞分析、漏洞利用3
1.4　漏洞的公布与0day响应5
第2章　二进制文件概述6
2.1　PE文件格式6
2.2　虚拟内存6
2.3　PE文件与虚拟内存之间的映射8
第3章　必备工具13
3.1　OllyDbg简介13
3.2　SoftICE简介14
3.3　WinDbg简介19
3.4　IDAPro简介22
3.5　二进制编辑器24
3.6　虚拟机简介26
3.7　Crack二进制文件27
第2篇　漏洞利用
第4章　栈溢出利用38
4.1　系统栈的工作原理38
4.1.1　内存的不同用途38
4.1.2　栈与系统栈40
4.1.3　函数调用时发生了什么41
4.1.4　寄存器与函数栈帧44
4.1.5　函数调用约定与相关指令45
4.2　修改邻接变量49
4.2.1　修改邻接变量的原理49
4.2.2　突破密码验证程序51
4.3　修改函数返回地址57
4.3.1　返回地址与程序流程57
4.3.2　控制程序的执行流程60
4.4　代码植入66
4.4.1　代码植入的原理66
4.4.2　向进程中植入代码67
第5章　开发shellcode的艺术78
第6章　堆溢出利用139
第7章　Windows异常处理机制深入浅出177
第8章　高级内存攻击技术196
第9章　揭秘Windows安全机制210
第10章　用MetaSploit开发Exploit219
第11章　其他漏洞利用技术248
第3篇　漏洞分析
第12章　漏洞分析技术概述268
第13章　MS06-040分析：系统入侵与蠕虫280
第14章　MS06-055分析：揭秘“网马”307
第15章　MS07-060分析：Word文档中的阴谋318
第4篇　漏洞挖掘与软件安全性测试
第16章　漏洞挖掘技术浅谈326
第17章　安全的软件生命周期346
参考文献
……
序言
关于“zero day attack”
0 day是网络安全技术中的一个术语，特指被攻击者掌握却未被软件厂商修复的系统漏洞。
0 day漏洞是攻击者入侵系统的终极武器，资深的黑客手里总会掌握几个功能强大的0 day漏洞。
0 day漏洞是木马、病毒、间谍软件入侵系统的最有效途径。
由于没有官方发布的安全补丁，攻击者可以利用0 day对目标主机为所欲为，甚至在Internet上散布蠕虫。因此，0 day漏洞的技术资料通常非常敏感，往往被视为商业机密。
对于软件厂商和用户来说，0 day攻击是危害最大的一类攻击。
针对0 day漏洞的缓冲区溢出攻击是对技术性要求最高的攻击方式。
世界安全技术峰会Black Hat上每年最热门的议题之一就是“zero day attack/defense”。微软等世界著名的软件公司为了在其产品中防范“zero day attack”，投入了大量的人力、物力。
全世界有无数的信息安全科研机构在不遗余力地研究与0 day安全相关的课题。
全世界也有无数技术精湛的攻击者在不遗余力地挖掘软件中的0 day漏洞。
后记
虽然溢出技术经常涉及汇编语言，但本书并不要求读者一定具备汇编语言的开发能力。所用到的指令和寄存器在相关的章节都有额外介绍，只要您有C语言基础就能消化本书的绝大部分内容。
我并不推荐在阅读本书之前先去系统的学习汇编知识和逆向知识，枯燥的寻址方式和指令介绍很容易让人失去学习的兴趣。本书将带您迅速跨过漏洞分析与利用技术的进入门槛。即使您并不懂汇编与二进制也能完成书中的调试实验，并获得一定的乐趣。当然，在您达到一定水平想进一步提高时，补习逆向知识和汇编语言将是绝对必要的。
本书适合的读者群体包括：
安全技术工作者　本书比较全面、系统地收录了Windows平台下缓冲区溢出攻击所涉及的各种方法，将会是一本不错的技术字典。信息安全理论研究者　本书中纰漏的许多漏洞利用、检测方法在学术上具有一定的前沿性，在一定程度上反映了目前国内外安全技术所关注的焦点问题。QA工程师、软件测试人员　本书第4篇中集中介绍了产品安全性测试方面的知识，这些方法可以指导QA人员审计软件中的安全漏洞，增强软件的安全性，提高软件质量。
软件开发人员　知道漏洞利用原理将有利于编写出安全的代码。高校信息安全专业的学生　本书将在一定程度上弥补高校教育与信息安全公司人才需求脱节的现象。用一套过硬的调试技术和逆向技术来武装自己可以让您在未来的求职道路上利于不败之地。精通exploit的人才可以轻松征服任何一家杀毒软件公司或安全资讯公司的求职门槛，获得高薪工作。 本科二年级以上计算机系学生　通过调试实验，你们将更加深入地了解计算机体系架构和操作系统。这些知识一样将成为您未来求职时过硬的敲门砖。
所有黑客技术爱好者　如果您厌倦了网络嗅探、端口扫描之类的扫盲读物，您将在本书中学到实施有效攻击所必备的知识和技巧。