首页>参考读物>计算机科学与技术>安全

C++反汇编与逆向分析技术揭秘(第2版)
作者 : 钱林松,张延清 著
出版日期 : 2021-08-30
ISBN : 978-7-111-68991-1
定价 : 139.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 612
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

内容简介
这是一部系统讲解反汇编与逆向分析技术原理、流程、方法和实用技巧的著作。
本书第1版出版于2011年,10年来畅销不衰,成为反汇编与逆向工程领域的标志性著作,被数十万安全工程师和C++工程师奉为瑰宝。在全球学术界和企业界都享有盛誉,故第2版得到了全球15位安全技术专家的倾力推荐。第2版在技术、工具和案例等方面做了大量的更新和补充。
通过本书,你将掌握以下知识或技能:
?逆向分析技术的工具和原理;
?逆向分析技术的流程和方法;
?逆向分析技术的精髓和实用技巧;
?软件调试的技术原理,以及代码运行时的内存表现;
?C++语法的实现机制和反汇编表现形式;

全书共18章,分为三个部分:
第1部分 准备工作 (第1章)
简单地介绍了编译器、调试器和反汇编静态分析工具的使用方法以及反汇编引擎的工作原理;
第二部分C++反汇编揭秘(第2~13章)
以多种编译器为例解析了每个C/C++知识点的汇编表现形式,通过整理反汇编代码梳理流程和脉络,讲解了调试和识别各种C/C++语句的方法,并且深入剖析各知识点的底层机制;
第三部分 逆向分析技术应用(第14~18章)
通过对PEiD、调试器 OllyDbg、木马、勒索病毒等实际应用的逆向分析,带领读者领路逆向分析技术的魔力,并加深对所学理论知识的理解。

图书特色

全面且系统地讲解了反汇编与逆向分析技术,同时深刻揭示了C++的内部工作机制

图书前言

为什么要写这本书
“时下的IDE很多都是极其优秀的,拜其所赐,职场上的程序员多出十几倍,但是又有多少人能理解程序内部的机制呢?”
—侯捷

随着软件技术的发展及其在各个领域的广泛应用,对软件进行逆向分析,通过阅读其反汇编代码推断数据结构、体系结构和程序设计思路的需求越来越多。逆向分析技术能帮助我们更好地研究和学习先进的软件技术,特别是当我们非常想知道某个软件的某些功能是如何实现的而手头又没有合适的资料时。
如果能够利用逆向技术去研究一些一流软件的设计思想和实现方法,那么我们的软件技术水平将会得到极大的提升。目前,国内关于逆向分析技术的资料实在不多,大中专院校的计算机相关专业对此技术也没有足够的重视。
有很多人认为研究程序的内部原理会破坏“黑盒子”的封装性,但是如果我们只是在别人搭建好的平台上做开发,那么始终只能使用别人提供的未开源的SDK,会一直受牵制。如果我们能够充分掌握逆向分析方法,就可以洞悉各种SDK的实现原理,学习各种一流软件采用的先进技术,取长补短,为我所用。若能如此,实为我国软件产业之幸。
我当初学习逆向技术时完全靠自学,且不说这方面的书籍,就连相关的文档和资料也极度匮乏。在这种条件下,虽然很努力地钻研,但学习进度非常缓慢,花费几天几夜分析一个软件的关键算法是常有的事。如果当初能有一本全面讲解反汇编与逆向分析技术的书,我不仅能节省很多时间和精力,还能少走很多弯路。因为有了这段经历,我斗胆争先,决定将自己多年来在反汇编与逆向分析技术领域的经验和心得整理出来与大家分享,希望更多的开发人员在掌握这项技术后能更好地将其应用到软件开发实践中,从而提高我国软件行业的整体水平。
读者对象
无论大家从事哪个行业,在开始阅读本书之前,都需要具备以下几个方面的基础知识。
数据结构的基础知识,如栈结构存取元素的特点等。
汇编的基础知识,如寻址方式和指令的使用等。
C/C++语言的基础知识,如指针、虚函数和继承的概念等。
熟悉Visual Studio 2019的常用功能,如观察某变量的地址、单步跟踪等。
具备了上面这些基础知识,就可以根据自己的实际需求学习本书的内容。
如果你是一位软件研发人员,你将通过本书更深入地了解C++语法的实现机制,对产品知其然更知其所以然。在精读反汇编代码后,你的调试水平也会得到质的提升。
如果你是一位反病毒分析人员或者电子证据司法取证分析人员,通过逆向分析恶意软件样本,你可以进行取证分析处理,例如,分析开发者的编写习惯、推断开发者的编程水平,甚至可以进一步判定某病毒样本是否与其他病毒出自同一人之手。
如果你是一位高等院校计算机相关专业的学生(本科或本科以上),你可以通过学习书中的软件逆向分析技术来拓展思路,为未来进军软件研发行业打下基础。
第2版的更新内容
重新设计了所有的示例。
所有的反汇编代码均使用最新的Visual Studio 2019编译器编译。
增加最新的Clang编译器反汇编代码讲解。
增加最新的GCC编译器反汇编代码讲解。
增加所有主流编译器64位程序反汇编代码讲解。
随书文件增加所有示例单独的源码和所有编译器编译后的可执行程序。
根据最新编译器删除了一些过时的内容,增加了一些新的内容。
增加和更新了病毒分析示例。
本书特色
我结合自己的学习经历和对C++反汇编与逆向分析技术的了解将全书划分为三个部分。
第一部分 准备工作(第1章)
在软件开发过程中,程序员会使用一些调试工具,以便高效地找出软件中存在的错误。在逆向分析领域,分析者也要利用相关工具分析软件行为,验证分析结果。本书第一部分简单介绍了几款常用的逆向分析辅助工具和软件。
第二部分 C++反汇编揭秘(第2~13章)
评估一位软件开发者的能力,一是看设计能力,二是看调试水平。一般来说,大师级的程序员对软件逆向分析技术都有深入的理解,他们在编写高级语言代码的同时,心里还会浮现对应的汇编代码,在写程序的时候就已经非常了解最终产品的模样,达到了人机合一的境界,所以在调试Bug的时候游刃有余。逆向分析技术重在代码的调试和分析,如果你本来就是一位技术不错的程序员,学习这部分内容就是对你“内功”的锻炼,这部分内容可以帮助你彻底掌握C/C++各种特性的底层机制,不仅能做到知其然,还能知其所以然。这部分以C/C++语法为导向,以各编译器为例,解析每个C/C++知识点的汇编表现形式,通过整理其反汇编代码梳理流程和脉络。这部分内容重在讲方法,授人以渔,不重剑招,但重剑意。
第三部分 逆向分析技术应用(第14~18章)
这是本书的最后一部分,以理论与实践相结合的方式,通过对具体程序的分析来加深大家对前面所学理论知识的理解,从而快速积累实战经验。第14章分析了PE文件分析工具PEiD的工作原理,第15章分析了调试器OllyDbg的工作原理,第16章对大灰狼远控木马进行了逆向分析,第17章对WannaCry勒索病毒进行了逆向分析,第18章讲解了反汇编代码的重建与编译。通过这部分内容的学习,大家可以领略逆向分析技术的魔力。
如何阅读本书
逆向分析技术具有很强的综合性和实践性,要掌握这项技术需要耐心和毅力。建议大家从最简单的程序入手,按照本书安排的顺序逐章阅读,一边看书,一边积极地思考和总结。对于一些理论知识,如果你兴趣不大,在初学阶段可以跳过,待以后需要提高时再回过头来阅读。可以暂时跳过的知识我都在书中做了说明。
随着时间的推移,你会逐渐形成一套分析代码的个人风格和习惯。这样一来,任何软件在你眼中都没有了神秘感。
勘误和支持
由于个人能力有限,书中的疏漏在所难免,还请各位同行和读者多多批评指正。本书的讨论和勘误放在看雪论坛(http://bbs.pediy.com/)的图书项目版块中,我们会在这里发布本书的勘误和其他对大家有用的增值服务。大家也可以在这里发表对本书的意见和建议,更重要的是,大家还能在这里结交到一些志同道合的朋友。同时,也欢迎大家通过QQ(159262378)或E-mail(ollydbg@foxmail.com)联系我。由于平时上网较少,如果回复不及时,还请谅解。
致谢
在本书写作的过程中,我得到过很多同行的指点和帮助,在此表示感谢,感谢唐培、田青、王金龙、吴超、秦颂浩、李常坤、薛晓昊、黄震、何锡宁、刘帅等人(排名不分先后)。还有很多朋友在我写作本书的过程中给予了帮助,在这里一并表示感谢。
特别感谢本书的编辑杨福川、罗词亮和韩蕊,他们花费了许多时间和精力校正本书的各类错误。正是他们的敬业和努力,才使得本书能在保证质量的前提下顺利出版。

钱林松
2021年3月于武汉

专家评论

本书独特的章节布局、循序渐进的内容呈现,非常适合软件工程与技术的爱好者。能够受到广大读者欢迎进行再版印发,既是因为著者构思精巧,更是得益于钱林松先生长期以来对软件技术的浓厚兴趣、坚持不懈的钻研和在信息安全与教育培训行业的丰富实践经验。
——邹德清 华中科技大学教授、博士生导师/网络空间安全学院常务副院长

无论是进行恶意代码分析、检测、溯源还是安全漏洞挖掘与复现,甚至是对于当下火热的基于智能化的软件安全研究来说,逆向分析能力都极为关键。本书为每一位软件安全研究人员赋能,让我们从冷冰的二进制代码中感受到人与人之间对抗博弈的精彩与激情。感谢钱林松老师对技术的毫无保留与无私奉献。
——彭国军 武汉大学国家网络安全学院教授

当前软件正向编程和开发的图书已经相当丰富了,而逆向分析的优秀著作却屈指可数。本书是作者多年来在逆向分析领域深入探索的经验总结,细品本书的章节脉络,能感受到钱林松是如何在当初缺乏参考资料的情况下,慢慢撬开逆向分析学习的大门,再深入领悟逆向分析的精髓,里面每一个学习案例都凝聚了作者的心血。
——陈伟 南京邮电大学信息安全系主任、教授

本书作者钱林松老师基于对编译器技术、反汇编技术的深刻理解和实践经验,携手弟子张延清老师再版《C++反汇编与逆向分析技术揭秘》一书,不仅更新了VS目前最新的2019版,还增加了对Clang、GCC以及64bit指令集的示例和讲解。
——崔竞松 武汉大学国家网络安全学院副教授

“知其然,知其所以然”是我们每个技术人员都应该追求的目标。本书作者以自身多年实践经验为基础,为读者提供了一条快速成长的捷径。本书既有理论,也有实践,还配合讲解了5个逆向分析案例,进一步帮助读者理解逆向技术在真实环境中的应用。
——周凯 《云安全:安全即服务》作者

在网络安全知识体系的众多分支中,系统底层安全问题是最难以发现和利用的一环。本书以理论与实践相结合,由浅入深,全面系统化的讲解了反汇编与逆向分析技术,对读者深入理解和掌握相关知识有很大帮助,非常值得广大网络安全人员学习和借鉴。
——吴涛 中国电信股份有限公司研究院网络安全研究员/
《Python安全攻防:渗透测试实战指南》作者

对于逆向分析技术,不仅要知其然,更要知其所以然。本书以常用工具为切入点,深入剖析C/C++的内部原理,对其汇编代码形式进行详细解析,对于新手可以帮助其理解逆向技术,对于老手能够起到温故知新作用。强烈力荐!
——谢兆国(谢公子) 深信服深蓝攻防实验室攻防渗透专家

上架指导

计算机\程序设计

封底文字

本书从基础的工作环境搭建、调试器原理,到C++语法知识点的汇编表现形式,再到病毒实例的逆向分析,深入浅出地把逆向工程所需的各类知识贯穿起来,是学习系统内核编程或者进入网络安全行业必备的入门书。
—— 姚辉 金山毒霸CEO
不论你做逆向工程、漏洞挖掘,还是软件开发,这本书都是你应该读的。本书并没有抽象地去讲晦涩难懂的编译原理,而是基于汇编语言和大量反汇编实例,直观明了、简单易懂。
——田阗 360政企安全集团副总裁
想了解软件的功能和算法实现,再现软件的设计过程,逆向工程是非常有效的手段。本书由浅入深,向读者介绍了软件调试的技术原理,以及代码运行时的内存表现。掌握这些知识,可以提升自己的编码水平,深入了解软件架构和运行机制。
——董志强 腾讯安全云鼎实验室负责人
逆向工程是一项很难掌握的技能,这本书剖析了逆向分析技术的原理,能帮助读者成为更好、更熟练的逆向工程师。
—— Daniel Cuthbert 桑坦德集团全球安全研究主管
软件逆向工程是根据已有程序的二进制文件,通过分析来推导出其具体实现方式。本书从软件逆向技术的基础开始讲解,逐步深入,在注重逆向技术理论阐述的同时,结合生动的实例分析,深入浅出地展示了软件逆向技术的精髓和实用技巧,能够帮助读者快速深入逆向技术的核心领域,获得宝贵的知识和经验。
——段钢 看雪学院创始人

作者简介

钱林松,张延清 著:作者简介
钱林松
资深安全技术专家、软件开发工程师和架构师。从事计算机安全和软件开发工作近20年,实践经验丰富,尤其精通软件逆向分析技术,对C/C++技术和Windows的底层机制也有非常深入的研究。
武汉科锐软件技术有限公司(国内知名的安全教育机构)创始人,教学经验丰富,多年来,为国内计算机安全领域培养和输送了大量的人才。活跃于看雪论坛,有较高的知名度和影响力。
张延清
软件逆向教育专家,看雪论坛技术专家。2004年从事数控机床加工编程,2006年进入游戏编程及C/C++开发与逆向分析领域,2011年就职于武汉科锐软件技术有限公司,任技术总监兼授课老师。创立国内首家Android软件逆向分析教育课程体系,该课程体系被多家培训教育机构采用。
科锐·安全实训领军者
科锐(www.51asm.com)创办自2007年,一直专注于逆向分析人才培养,毕业学员逾千人,广泛就业于各安全企业,从事技术与技术管理工作。科锐通过一套严格的科学考核体系,确保学员对每一个知识点的掌握,从而保证教学质量,使每一个毕业学员都能符合企业的用人需求。真正实现以实践为主的实训理念,是我们最终的实训目标。

图书目录

赞誉
序一
序二
序三
前言
第一部分 准备工作
第1章 熟悉工作环境和相关工具2
1.1 安装Visual Studio 20192
1.2 安装GCC6
1.3 调试工具OllyDbg12
1.4 调试工具x64dbg14
1.5 调试工具WinDbg15
1.6 反汇编静态分析工具IDA17
1.7 反汇编引擎的工作原理22
1.8 本章小结27
第二部分 C++反汇编揭秘
第2章 基本数据类型的表现形式30
2.1 整数类型30
2.1.1 无符号整数30
2.1.2 有符号整数31
2.2 浮点数类型32
2.2.1 浮点数的编码方式33
2.2.2 基本的浮点数指令35
2.3 字符和字符串43
2.3.1 字符的编码43
2.3.2 字符串的存储方式44
2.4 布尔类型45
2.5 地址、指针和引用46
2.5.1 指针和地址的区别46
2.5.2 各类型指针的工作方式47
2.5.3 引用56
2.6 常量60
2.6.1 常量的定义60
2.6.2 #define和const的区别62
2.7 本章小结65
第3章 认识启动函数,找到用户入口66
3.1 程序的真正入口66
3.2 了解VS2019的启动函数66
3.3 main函数的识别70
3.4 本章小结71
第4章 观察各种表达式的求值过程72
4.1 算术运算和赋值72
4.1.1 各种算术运算的工作形式72
4.1.2 算术结果溢出130
4.1.3 自增和自减131
4.2 关系运算和逻辑运算136
4.2.1 关系运算和条件跳转的对应136
4.2.2 表达式短路137
4.2.3 条件表达式141
4.3 位运算149
4.4 编译器使用的优化技巧152
4.4.1 流水线优化规则155
4.4.2 分支优化规则158
4.4.3 高速缓存优化规则159
4.5 一次算法逆向之旅159
4.6 本章小结164
第5章 流程控制语句的识别165
5.1 if语句165
5.2 if…else…语句168
5.3 用if构成的多分支流程174
5.4 switch的真相180
5.5 难以构成跳转表的switch196
5.6 降低判定树的高度201
5.7 do、while、for的比较206
5.8 编译器对循环结构的优化214
5.9 本章小结220
第6章 函数的工作原理221
6.1 栈帧的形成和关闭221
6.2 各种调用方式的考察222
6.3 使用ebp或esp寻址226
6.4 函数的参数230
6.5 函数的返回值232
6.6 x64调用约定235
6.7 本章小结238
第7章 变量在内存中的位置和访问方式239
7.1 全局变量和局部变量的区别239
7.2 局部静态变量的工作方式247
7.3 堆变量252
7.4 本章小结256
第8章 数组和指针的寻址257
8.1 数组在函数内257
8.2 数组作为参数266
8.3 数组作为返回值270
8.4 下标寻址和指针寻址276
8.5 多维数组282
8.6 存放指针类型数据的数组288
8.7 指向数组的指针变量290
8.8 函数指针296
8.9 本章小结299
第9章 结构体和类300
9.1 对象的内存布局300
9.2 this指针305
9.3 静态数据成员311
9.4 对象作为函数参数314
9.5 对象作为返回值322
9.6 本章小结329
第10章 构造函数和析构函数331
10.1 构造函数的出现时机331
10.2 每个对象是否都有默认的构造函数353
10.3 析构函数的出现时机355
10.4 本章小结375
第11章 虚函数377
11.1 虚函数的机制377
11.2 虚函数的识别383
11.3 本章小结389
第12章 从内存角度看继承和多重继承391
12.1 识别类和类之间的关系392
12.2 多重继承418
12.3 抽象类426
12.4 虚继承428
12.5 本章小结443
第13章 异常处理445
13.1 异常处理的相关知识445
13.2 异常类型为基本数据类型的处理流程451
13.3 异常类型为对象的处理流程459
13.4 识别异常处理464
13.5 x64异常处理475
13.5.1 RUNTIME_FUNCTION结构476
13.5.2 UNWIND_INFO结构476
13.5.3 UNWIND_CODE结构478
13.5.4 特定于语言的处理程序478
13.5.5 x64 FuncInfo的变化479
13.5.6 还原x64的try…catch481
13.6 本章小结484
第三部分 逆向分析技术应用
第14章 PEiD的工作原理分析486
14.1 开发环境的识别486
14.2 开发环境的伪造494
14.3 本章小结497
第15章 调试器OllyDbg的工作原理分析498
15.1 INT3断点498
15.2 内存断点503
15.3 硬件断点507
15.4 异常处理机制513
15.5 加载调试程序519
15.6 本章小结522
第16章 大灰狼远控木马逆向分析523
16.1 调试环境配置523
16.2 病毒程序初步分析524
16.3 启动过程分析525
16.4 通信协议分析532
16.5 远控功能分析536
16.6 本章小结551
第17章 WannaCry勒索病毒逆向分析552
17.1 tasksche.exe勒索程序逆向分析552
17.1.1 病毒初始化552
17.1.2 加载病毒核心代码558
17.1.3 病毒核心代码562
17.2 mssecsvc.exe蠕虫程序逆向分析569
17.2.1 蠕虫病毒代码初始化569
17.2.2 发送漏洞攻击代码573
17.3 永恒之蓝MS17-010漏洞原理分析577
17.3.1 漏洞1利用分析577
17.3.2 漏洞2利用分析583
17.3.3 漏洞3利用分析584
17.4 本章小结586
第18章 反汇编代码的重建与编译587
18.1 重建反汇编代码587
18.2 编译重建后的反汇编代码590
18.3 本章小结591
参考文献592

教学资源推荐
作者: 林璟锵 郑昉昱 王伟 刘哲 王琼霄 著
作者: 马洪连,刘旸,韩瑜,孙亮
作者: 何炎祥 刘陶 著
参考读物推荐
作者: (美)Christopher C. Elisan 著
作者: [美]布兰德·佩里( Brandon Perry )著
作者: 大学霸IT达人 编著
作者: [美] 拉杰尼什·古普塔(Rajneesh Gupta) 著