恶意代码分析实战

安全技术大系程序员

恶意代码分析实战(最权威的恶意代码分析指南,理论实践分析并重,业内人手一册的宝典算法

【美】Michael Sikorski(迈克尔.斯科尔斯基), Andrew Honig(安德鲁.哈尼克)著   shell

诸葛建伟 姜辉 张光凯 译编程

ISBN 978-7-121-22468-3数组

2014年4月出版浏览器

订价:128.00元 安全

732服务器

16网络

编辑推荐数据结构

无论你是否有恶意代码分析的背景和经验,《恶意代码分析实战》极其丰富的内容都将使你获益匪浅。

《恶意代码分析实战》教你如何、以及什么时候使用恶意代码分析技术,深刻掌握恶意代码分析工具的核心功能,从而达到准确诊断、及时突破、快速响应的效果。

《恶意代码分析实战》一经问世,便赢来业内好评如潮,被业内人士一致推荐为入门、晋级的权威读本。

权威,详尽,经典——每一位认真学习过《恶意代码分析实战》的读者,必将在恶意代码分析的专业技能上得到巨大的提高。

内容提要

《恶意代码分析实战》是一本内容全面的恶意代码分析技术指南,其内容兼顾理论,重在实践,从不一样方面为读者讲解恶意代码分析的实用技术方法。

《恶意代码分析实战》分为21章,覆盖恶意代码行为、恶意代码静态分析方法、恶意代码动态分析方法、恶意代码对抗与反对抗方法等,并包含了shellcode分析,C++恶意代码分析,以及64位恶意代码分析方法的介绍。本书多个章节后面都配有实验并配有实验的详细讲解与分析。经过每章的介绍及章后的实验,本书一步一个台阶地帮助初学者从零开始创建起恶意代码分析的基本技能。

《恶意代码分析实战》得到业界的一致好评,IDA Pro的做者Ilfak Guilfanov这样评价本书:“一本恶意代码分析的实践入门指南,我把这本书推荐给全部但愿解剖Windows恶意代码的读者”。

《恶意代码分析实战》的读者群主要是网络与系统安全领域的技术爱好者与学生及恶意代码分析研究方面的安全从业人员。

目录

第0章  恶意代码分析技术入门    1

0.1  恶意代码分析目标   1

0.2  恶意代码分析技术   2

0.2.1  静态分析基础技术 2

0.2.2  动态分析基础技术 2

0.2.3  静态分析高级技术 2

0.2.4  动态分析高级技术 2

0.3  恶意代码类型   3

0.4  恶意代码分析通用规则   4

第 1篇  静态分析

第1章  静态分析基础技术    6

1.1  反病毒引擎扫描:实用的第一步   6

1.2  哈希值:恶意代码的指纹 7

1.3  查找字符串 7

1.4  加壳与混淆恶意代码 9

1.4.1  文件加壳 10

1.4.2  使用PEiD检测加壳    10

1.5  PE文件格式 11

1.6  连接库与函数   12

1.6.1  静态连接、运行时连接与动态连接   12

1.6.2  使用Dependency Walker工具探索动态连接函数   13

1.6.3  导入函数 14

1.6.4  导出函数 15

1.7  静态分析技术实践   15

1.7.1  PotentialKeylogger.exe:一个未加壳的可执行文件   15

1.7.2  PackedProgram.exe:穷途末路  18

1.8  PE文件头与分节 18

1.8.1  使用PEview来分析PE文件 19

1.8.2  使用Resource Hacker工具来查看资源节 22

1.8.3  使用其余的PE文件工具    23

1.8.4  PE文件头概述 23

1.9  小结   24

1.10 实验   24

第2章  在虚拟机中分析恶意代码  27

2.1  虚拟机的结构   27

2.2  建立恶意代码分析机 28

2.2.1  配置VMware   29

2.2.2  断开网络 30

2.2.3  建立主机模式网络 30

2.2.4  使用多个虚拟机   30

2.3  使用恶意代码分析机 31

2.3.1  让恶意代码链接互联网 31

2.3.2  链接和断开外围设备   32

2.3.3  拍摄快照 32

2.3.4  从虚拟机传输文件 33

2.4  使用VMware进行恶意代码分析的风险  34

2.5  记录/重放:重复计算机运行轨迹  34

2.6  小结   35

第3章  动态分析基础技术    36

3.1  沙箱:简便但粗糙的方法 36

3.1.1  使用恶意代码沙箱 36

3.1.2  沙箱的缺点   37

3.2  运行恶意代码   38

3.3  进程监视器 39

3.3.1  进程监视器的显示 40

3.3.2  进程监视器中的过滤   41

3.4  使用进程浏览器(Process Explorer)来查看进程   43

3.4.1  进程浏览器的显示 43

3.4.2  使用验证选项 44

3.4.3  比较字符串   45

3.4.4  使用依赖遍历器(Dependency Walker)  45

3.4.5  分析恶意文档 46

3.5  使用Regshot来比较注册表快照   46

3.6  模拟网络   47

3.6.1  使用ApateDNS 47

3.6.2  使用Netcat进行监视  48

3.7  使用Wireshark进行数据包监听   49

3.8  使用INetSim    51

3.9  基础动态分析工具实践   52

3.10  小结  55

3.11  实验  56

第 2篇  静态分析高级技术篇

第4章  x86反汇编速成班 60

4.1  抽象层次   60

4.2  逆向工程   62

4.3  x86体系结构    62

4.3.1  内存 63

4.3.2  指令 64

4.3.3  操做码和字节序   64

4.3.4  操做数   65

4.3.5  寄存器   65

4.3.6  简单指令 67

4.3.7  栈   70

4.3.8  条件指令 73

4.3.9  分支指令 73

4.3.10  重复指令    74

4.3.11  C语言主函数和偏移   76

4.3.12  更多信息:Intel x86 Architecture Manual 77

4.4  小结   78

第5章  IDA Pro 79

5.1  加载一个可执行文件 79

5.2  IDA Pro接口    81

5.2.1  反汇编窗口模式   81

5.2.2  对分析有用的窗口 83

5.2.3  返回到默认视图   83

5.2.4  导航IDA Pro  83

5.2.5  搜索 85

5.3  使用交叉引用   86

5.3.1  代码交叉引用 87

5.3.2  数据交叉引用 88

5.4  分析函数   88

5.5  使用图形选项   89

5.6  加强反汇编 91

5.6.1  重命名位置   91

5.6.2  注释 92

5.6.3  格式化操做数 92

5.6.4  使用命名的常量   93

5.6.5  从新定义代码和数据   94

5.7  用插件扩展IDA  95

5.7.1  使用IDC脚本 96

5.7.2  使用IDAPython    97

5.7.3  使用商业插件 97

5.8  小结   98

5.9  实验   98

第6章  识别汇编中的C代码结构  100

6.1  全局与局部变量 101

6.2  反汇编算术操做 102

6.3  识别if语句    104

6.3.1  用IDA Pro图形化分析函数 105

6.3.2  识别嵌套的if语句    106

6.4  识别循环   107

6.4.1  找到for循环 107

6.4.2  找到while循环   109

6.5  理解函数调用约定   110

6.5.1  cdecl    110

6.5.2  stdcall  111

6.5.3  fastcall 111

6.5.4  压栈与移动   111

6.6  分析switch语句    112

6.6.1  If样式   112

6.6.2  跳转表   114

6.7  反汇编数组 118

6.8  识别结构体 119

6.9  分析链表遍历   121

6.10  小结  123

6.11  实验  123

第7章  分析恶意Windows程序 126

7.1  Windows API    126

7.1.1  类型和匈牙利表达法   126

7.1.2  句柄 127

7.1.3  文件系统函数 127

7.1.4  特殊文件 128

7.2  Windows注册表  129

7.2.1  注册表根键   130

7.2.2  Regedit  131

7.2.3  自启动程序   131

7.2.4  经常使用注册表函数   131

7.2.5  练习分析注册表操做代码   132

7.2.6  使用.reg文件的注册表脚本 133

7.3  网络API    133

7.3.1  伯克利兼容套接字 134

7.3.2  网络的服务器和客户端 134

7.3.3  WinINet API  135

7.4  跟踪恶意代码的运行 136

7.4.1  DLL  136

7.4.2  进程 137

7.4.3  线程 139

7.4.4  使用互斥量的进程间协做   142

7.4.5  服务 143

7.4.6  组件对象模型 145

7.4.7  异常:当事情出错时   147

7.5  内核与用户模式 148

7.6  原生API    149

7.7  小结   151

7.8  实验   151

第 3篇  动态分析高级技术篇

第8章  动态调试    154

8.1  源代码级与汇编级的调试器   154

8.2  内核模式与用户模式调试 155

8.3  使用调试器 155

8.3.1  单步调试 155

8.3.2  单步跳过(Stepping-Over)和单步跳入(Stepping-Into) 156

8.3.3  用断点暂停执行   157

8.4  异常   161

8.4.1  首次和二次异常处理   162

8.4.2  常见异常 162

8.5  使用调试器修改可执行文件   163

8.6  修改可执行程序的实践   163

8.7  小结   164

第9章  OllyDbg 165

9.1  加载恶意代码   165

9.1.1  打开一个可执行文件   165

9.1.2  附加调试器到一个运行程序 166

9.2  OllyDbg的接口  167

9.3  内存映射   168

9.3.1  基地址重定位 169

9.4  查看线程和堆栈 170

9.5  执行代码   171

9.6  断点   172

9.6.1  软件断点 173

9.6.2  条件断点 174

9.6.3  硬件断点 175

9.6.4  内存断点 175

9.7  加载DLL    176

9.8  跟踪   177

9.8.1  标准回溯跟踪 177

9.8.2  堆栈调用跟踪 178

9.8.3  运行跟踪 178

9.8.4  跟踪Poison Ivy   178

9.9  异常处理   179

9.10  修补  180

9.11  分析shellcode 181

9.12  协助功能  182

9.13  插件  182

9.13.1  OllyDump    183

9.13.2  调试器隐藏插件  183

9.13.3  命令行  184

9.13.4  书签    185

9.14  脚本调试  185

9.15  小结  186

9.16  实验  187

第10章  使用WinDbg调试内核 189

10.1  驱动与内核代码    189

10.2  安装内核调试  191

10.3  使用WinDbg    193

10.3.1  从内存中读取    194

10.3.2  使用算术操做符  194

10.3.3  设置断点    194

10.3.4  列举模块    195

10.4  微软符号表    195

10.4.1  搜索符号    195

10.4.2  查看结构信息    196

10.4.3  配置Windows符号表  198

10.5  内核调试实践  198

10.5.1  用户空间的代码  198

10.5.2  内核模式的代码  200

10.5.3  查找驱动对象    203

10.6  Rootkit   204

10.6.1  Rootkit分析实践 205

10.6.2  中断    208

10.7  加载驱动  209

10.8  Windows Vista、Windows 7 和x64版本的内核问题 209

10.9  小结  210

10.10 实验  210

第 4篇  恶意代码功能篇

第11章  恶意代码行为   214

11.1  下载器和启动器    214

11.2  后门(backdoor)  214

11.2.1  反向shell   215

11.2.2  远程控制工具    216

11.2.3  僵尸网络    216

11.2.4  远程控制工具与僵尸网络的比较    217

11.3  登陆凭证窃密器    217

11.3.1  GINA拦截    217

11.3.2  口令哈希转储    218

11.3.3  击键记录    221

11.4  存活机制  223

11.4.1  Windows注册表   223

11.4.2  特洛伊木马化(Trojanized)系统二进制文件    225

11.4.3  DLL加载顺序劫持 227

11.5  提权  228

11.5.1  使用SeDebugPrivilege    228

11.6  隐藏它的踪影——用户态的Rootkit   229

11.6.1  IAT Hook    230

11.6.2  Inline Hook 231

11.7  小结  232

11.8  实验  232

第12章  隐蔽的恶意代码启动 234

12.1  启动器(Launcher)    234

12.2  进程注入  234

12.2.1  DLL注入 235

12.2.2  直接注入    237

12.3  进程替换  238

12.4  钩子(Hook)注入  240

12.4.1  本地和远程钩子(Hook)  240

12.4.2  使用钩子的击键记录器    241

12.4.3  使用SetWindowsHookEx    241

12.4.4 目标线程    241

12.5  Detours   242

12.6  APC注入   243

12.6.1  用户模式下APC注入  244

12.6.2  内核模式的APC注入  245

12.7  小结  246

12.8  实验  246

第13章  数据加密   248

13.1  分析加密算法的目的    248

13.2  简单的加密算法    248

13.2.1  凯撒密码    249

13.2.2  XOR 249

13.2.3  其余一些简单的加密策略  254

13.2.4  Base64  255

13.3  常见的加密算法    258

13.3.1  识别字符串和导入    259

13.3.2  查找加密常量    259

13.3.3  查找高熵值内容  261

13.4  自定义加密    262

13.4.1  识别自定义加密  263

13.4.2  攻击者使用自定义加密的优点  265

13.5  解密  265

13.5.1  自解密  265

13.5.2  手动执行解密函数    266

13.5.3  使用通用的解密规范  267

13.6  小结  270

13.7  实验  271

第14章  恶意代码的网络特征 273

14.1  网络应对措施  273

14.1.1  在原始环境中观察恶意代码    273

14.1.2  恶意行为的痕迹  274

14.1.3  OPSEC=操做安全性    275

14.2  安全地调查在线攻击者  275

14.2.1  间接性策略  275

14.2.2  获取IP地址和域名信息   276

14.3  基于内容的网络应对措施    278

14.3.1  使用Snort进行入侵检测  278

14.3.2  深刻观察    279

14.4  结合动态和静态分析技术    282

14.4.1  过分分析的危险  283

14.4.2  在众目睽睽下隐藏    283

14.4.3  理解周边代码    286

14.4.4  寻找网络操做代码    287

14.4.5  了解网络内容的来源  288

14.4.6  硬编码数据 vs. 临时数据 289

14.4.7  肯定和利用编码步骤  289

14.4.8  建立特征    291

14.4.9  分析解析例程    292

14.4.10  针对多个元素   294

14.5  了解攻击者的意图  295

14.6  小结  296

14.7  实验  296

第 5篇  逆向工程

第15章  对抗反汇编 300

15.1  何谓对抗反汇编技术    300

15.2  挫败反汇编算法    301

15.2.1  线性反汇编  302

15.2.2  面向代码流的反汇编  303

15.3  对抗反汇编技术    306

15.3.1  相同目标的跳转指令  306

15.3.2  固定条件的跳转指令  307

15.3.3  无效的反汇编指令    308

15.3.4  用IDA Pro对指令进行NOP替换 311

15.4  混淆控制流图  312

15.4.1  函数指针问题    312

15.4.2  在IDA Pro中添加代码的交叉引用  313

15.4.3  滥用返回指针    313

15.4.4  滥用结构化异常处理  315

15.5  挫败栈帧分析  317

15.6  小结  320

15.7  实验  320

第16章  反调试技术 322

16.1  探测Windows调试器    322

16.1.1  使用Windows API 322

16.1.2  手动检测数据结构    324

16.1.3  系统痕迹检测    326

16.2  识别调试器的行为  327

16.2.1  INT扫描 327

16.2.2  执行代码校验和检查  328

16.2.3  时钟检测    328

16.3  干扰调试器的功能  330

16.3.1  使用TLS回调    330

16.3.2  使用异常    332

16.3.3  插入中断    333

16.4  调试器漏洞    334

16.4.1  PE头漏洞    334

16.4.2  OutputDebugString漏洞   336

16.5  小结  336

16.6  实验  336

第17章  反虚拟机技术   338

17.1  VMware 痕迹   338

17.1.1  绕过VMware痕迹的探测   340

17.1.2  探测内存痕迹    342

17.2  查找漏洞指令  342

17.2.1  使用Red Pill反虚拟机技术   343

17.2.2  使用No Pill技术    344

17.2.3  查询I/O通讯端口    344

17.2.4  使用str指令    345

17.2.5  反虚拟机的x86指令  346

17.2.6  在IDA Pro中高亮显示反虚拟机代码    347

17.2.7  使用ScoopyNG    347

17.3  调整设置  348

17.4  虚拟机逃逸    349

17.5  小结  349

17.6  实验  349

第18章  加壳与脱壳 352

18.1  剖析加壳  352

18.1.1  脱壳存根    353

18.1.2  加载可执行文件  353

18.1.3  解析导入函数表  353

18.1.4  尾部跳转    354

18.1.5  图示脱壳过程    354

18.2  识别加壳程序  355

18.2.1  加壳程序的标识  355

18.2.2  熵计算  356

18.3  脱壳选项  356

18.4  自动脱壳  356

18.5  手动脱壳  357

18.5.1  使用导入重构器重构导入表    358

18.5.2  查找OEP 359

18.5.3  手动修复导入表  363

18.6  常见壳的技巧与窍门    364

18.6.1  UPX 364

18.6.2  PECompact   365

18.6.3  ASPack  365

18.6.4  Petite  365

18.6.5  WinUpack    366

18.6.6  Themida 367

18.7  不彻底脱壳状况下的分析    368

18.8  加壳DLL   368

18.9  小结  369

18.10 实验  369

第 6篇  高级专题

第19章 shellcode分析  372

19.1  加载shellcode进行分析    372

19.2 位置无关代码  373

19.3 识别执行位置  373

19.3.1 使用call/pop指令   374

19.3.2 使用fnstenv指令    376

19.4  手动符号解析  377

19.4.1  在内存中找到kernel32.dll    378

19.4.2  解析PE文件导出数据 380

19.4.3  使用散列过的导出符号名  382

19.5  一个完整的Hello World例子    383

19.6  shellcode编码 385

19.7  空指令雪橇    387

19.8 找到shellcode 387

19.9  小结  388

19.10  实验 389

第20章 C++代码分析  391

20.1  面向对象的编程语言    391

20.1.1 this指针    392

20.1.2 重载与修饰  394

20.1.3 继承(Inheritance)和函数重写(Overriding) 395

20.2 虚函数和非虚函数  396

20.2.1 虚函数表的使用  398

20.2.2 识别虚函数表    399

20.3 建立和销毁对象    400

20.4 小结  401

20.5  实验  401

第21章  64位恶意代码   403

21.1 为何须要64位恶意代码   403

21.2 x64架构上的差异   404

21.2.1 x64调用约定和栈使用上的差异 406

21.2.2 64位异常处理    408

21.3 在Windows 64位上的Windows 32位  408

21.4 恶意代码功能上的64位提示 409

21.5 小结  410

21.6  实验  410

附录A  常见Windows函数列表 412

附录B  流行的恶意代码分析工具列表   424

附录C  实验做业参考解答 435

附录D 致青春,基础软件开发的中国故事   691

附录E  Syser操做入门   695

做者简介

迈克尔·斯科尔斯基(Michael Sikorski)是在Mandiant公司任职的计算机安全顾问。他对恶意代码进行逆向分析,支持公司安全事件响应调查,并为公司的联邦政府部门客户提供专业研究与开发的安全解决方案。迈克建立了一套恶意代码分析的系列课程,并对不一样的受众进行培训,包括联邦调查局和Black Hat黑客大会参会者。在加入Mandiant公司以前,他在麻省理工学院林肯实验室工做,在那里他对被动网络映射技术和渗透测试进行研究。迈克也是美国国家安全局为期三年的系统和网络跨学科研究生项目的毕业生。在美国国家安全局期间,他为逆向工程方面的研究作出了贡献,并得到在网络分析方面的多项发明奖项。

安德鲁·哈尼克(Andrew Honig)是美国国防部的一位信息保障专家。他在国家密码学院(National Cryptologic School)教授软件分析、逆向工程和Windows系统编程的课程,并是一位CISSP安全认证专家。安德鲁是VMware虚拟化产品几个零日漏洞的发现者,并开发了一些能够检测新型恶意代码(包括内核套件)的创新工具。做为一位精于恶意代码与良性软件分析技术的专家,他已经拥有超过10年的计算机安全业界分析师的经验。

 

媒体评论

一本优秀的恶意代码速成教程。

Dino Dai Zovi,自由安全咨询师

一本最为全面的恶意代码分析技术指南,覆盖了全部恶意代码分析所需的关键技术,帮助你理解最新恶意代码带来的技术挑战。

Chris Eagle,美国海军研究生院,计算机科学系高级讲师

一本恶意代码分析的实践入门指南,我把这本书推荐给全部但愿解剖Windows恶意代码的读者。

— Ilfak Guilfanov,IDA PRO创始人

一本恶意代码分析的优秀指南,全部章节都包含有详细的技术解释和动手实践案例教程,让你可以当即面对真实的恶意代码。

— Sebastian Porst,Google软件工程师

本书为各个技术层次上的读者带来逆向工程方法,提供了一大堆覆盖各类技术而且容易访问的实践案例,将带领你更加深刻地理解逆向工程的艺术与科学。我强烈推荐本书,不管是新手仍是领域专家。

— Danny Quist,博士,OFFENSIVE COMPUTING创始人

若是你只要读一本恶意代码的书籍,或是但愿进入到恶意代码分析师的世界,就来看这本书吧!

— Patrick Engbretson,达科他州立大学教授,The Basics of Hacking and Pen Testing一书的做者

为软件安全或入侵检测系统等研究生级别高级课程提供很好的课程资料,实践案例对学生学习逆向工程方法、恶意代码分析和理解等方面具备特殊的价值。

— Sal Stolfo,哥伦比亚大学教授

前言

电话铃声急促响起,网络管理员告诉你说公司网站被黑了,网站上的客户敏感信息被盗了。因而你立马开始调查分析,首先检查了日志记录,来肯定事件涉及的主机。你用杀毒软件对这些主机进行了扫描,检查是否感染了恶意代码。你的运气还算不错,杀毒软件检测到一个木马程序,名为TROJ.snapAK。你删除这个文件,并清理了现场,同时你还部署了一个入侵检测系统,来确认没有其余主机被感染。最后你修补了一个你认为是被攻击者利用来入侵主机的安全漏洞,来确保这种攻击事件不会再次发生。

不幸的是,几天以后网络管理员再次打电话过来,告诉你说敏感信息又被窃取了。这看起来彷佛是相同的攻击,但你殊不知道该作什么。很显然,你部署的入侵检测系统特征库失效了。由于更多的主机被感染了,而你的杀毒软件并无提供足够的保护来隔离攻击威胁。如今,公司高层管理人员要求你解释发生了什么,而你能够告诉他们的只是一个名为TROJ.snapAK的恶意代码。你没有针对最重要问题的答案,这让他们认为你是一位不称职的安全工程师。

你该如何肯定TROJ.snapAK恶意代码在作什么,从而可让你消除这个威胁?你如何才能写出一个更有效的网络检测特征?你怎样才能找出其余感染了这个恶意代码的主机呢?你该如何确保你删除了整个恶意代码程序包,而不仅是其中的一部分呢?你该如何回答管理层关于这个恶意代码干了些什么的问题呢?

若是你全部能作的,只是告诉你的老板,说你须要聘请昂贵的外部咨询顾问,由于你不能保护本身的网络,这真的不是确保工做饭碗的好办法。

幸运的是,你有着足够的智慧,立刻啃起了这本《恶意代码分析实战》,从这本书中你将学到的技能,能够教你如何来回答这些困难的问题,并为你展现保护网络免受恶意代码侵害的方法。

什么是恶意代码分析

恶意代码,也称为恶意软件,在大多数计算机入侵事件中都扮演了重要角色。任何以某种方式来对用户、计算机或网络形成破坏的软件,均可以被认为是恶意代码,包括计算机病毒、木马、蠕虫、内核套件、勒索软件、间谍软件,等等。尽管各类不一样的恶意代码类型会作一些彻底不一样的事情(你将会在本书中看到),做为恶意代码分析师,咱们拥有一组核心的工具和技术,用来解剖分析各式各样的恶意代码。

恶意代码分析是一种解剖恶意代码的艺术,了解恶意代码是如何工做的、如何识别它,以及如何打败或消除它。你并非须要成为一名超级黑客,才能进行恶意代码分析。

网络上天天有着数以百万计,甚至更多的恶意代码,恶意代码分析成为了任何一位从事计算机安全事件响应安全工程师的必需技能。此外,因为恶意代码分析专业人才的短缺,熟练的恶意代码分析师正处于强烈的人才需求之中。

这么说吧,这不是一本关于如何找到恶意代码的书籍。咱们的重点是在如何分析已经找到的恶意代码。咱们专一于Windows操做系统上发现的恶意代码——由于到目前为止,Windows操做系统仍是最为经常使用的操做系统。但你所学到的技能能够为你在任何操做系统上分析恶意代码提供支持。咱们还将专一在可执行文件上,由于它们是最多见的,也是你所遇到的最难以分析的一些文件。与此同时,咱们选择不讨论如恶意JavaScript脚本、Java程序等其余类型的恶意代码,相反的是,咱们选择对方法进行深刻讨论,用于分析更加高级的威胁,好比后门、隐蔽性恶意代码和内核套件。

先决条件

无论你是否有恶意代码分析的背景或经验,你都会从本书中受益。

第1~3章将讨论基础的恶意代码分析技术,即便你没有安全或编程经验,也能够用这些技术来进行恶意代码分析。第4~14章则覆盖中等级别的内容,可让你武装上一些用来分析大多数恶意程序的主流工具与技能。这些章节都须要一些关于编程语言的基本知识。第15~19章,则提供最早进的技术材料,即便对资深的恶意代码分析师来讲都是有用的,由于这部份内容涵盖了恶意代码分析的一些战术和技巧,在分析最为复杂的恶意代码样本时都用得上,好比那些应用了对抗反汇编、反调试技术或加壳技术的恶意代码。

本书将教你如何以及什么时候使用各类恶意代码分析技术。了解什么时候应该使用特定的技术与掌握技术自己同样重要,由于在某个特定情况下使用了错误的技术,可能会是在使人沮丧地浪费时间。咱们不会涵盖每个工具,由于工具会随时改变,而它的核心功能才是最重要的。此外,咱们将在整本书中使用切合实际的恶意代码样本(你能够从http://www.practicalmalwareanalysis.com/或http://www.nostarch. com/malware.htm下载),来为你揭示在分析真实世界中恶意代码时会遇到的各类情况。

实践动手学习

咱们有着逆向工程和恶意代码分析专业课程的丰富教学经验,这些经验已经告诉咱们,学生只有经过使用所学习的技能进行动手实践练习时,才能真正掌握和学到这些技能。咱们也发现了实验做业的质量与讲授的课程内容同等重要,若是没有一个实验做业部分,要学会如何分析恶意代码是几乎不可能的。

从始至终,本书中绝大多数章节最后都会给出一些实验做业,让你来练习这一章中所讲授的技术。这些实验做业为你提供了真实恶意代码样本的挑战,旨在展现你将在真实世界中遭遇到恶意代码中最为广泛的类型和行为。这些实验做业旨在增强每章中所介绍的基本概念,而不会用一些无关信息来让你无所适从。每一个实验都包括一个或多个恶意文件(能够从http://www.practicalmalware analysis.com/,或者http://www.nostarch.com/malware.htm下载),以及一些特地设计来引导你完成实验的问题,此外也给出了对这些问题的简短答案,以及对恶意代码样本的详细分析过程。

这些实验都模拟了真实的恶意代码分析场景。好比,它们都以通用化的文件名字进行命名,而不会提供任何可以洞察到恶意代码功能的信息。对于真正环境中的恶意代码,你也一样在开始分析时不会有任何信息,而你须要用你所学到的技能,来收集线索,并找出恶意代码在作些什么。

每一个实验所需的时间将取决于你的经验。你能够尝试本身来完成实验,或者沿着详细分析过程,来了解如何在实践中使用各类技术。

大多数章节都包含了三个实验做业。第一个实验一般是最简单的,绝大多数读者都应该可以完成它。第二个实验是中等难度的,大多数读者会须要解答中的一些援助来完成。而第三个实验是最困难的,若是没有从参考答案取得提示,只有最勤奋和技术大拿的读者们才可以完成它们。

本书内容预览

《恶意代码分析实战》以使用简单的方法,从相对而言不那么复杂的恶意代码中获取信息开始,而后逐步提高难度,讲解能够用来对抗最为先进恶意程序的复杂技术。如下是本书每章的内容预览:

第0章,“恶意代码分析技术入门”,创建起恶意代码分析的总体过程和基础方法学。

第1章,“静态分析基础技术”,传授无须执行就能从可执行文件获取信息的方法。

第2章,“在虚拟机中分析恶意代码”,带你一块儿设置虚拟机,用做运行恶意代码的安全环境。

第3章,“动态分析基础技术”,介绍一些经过执行恶意程序进行分析、易于使用但很是高效的技术方法。

第4章,“x86反汇编速成班”,是对x86汇编语言的一个简要介绍,这章为使用IDA Pro进行恶意代码深刻分析提供了基础。

第5章,“IDA Pro”,为你显示如何使用IDA Pro,一个最为重要的恶意代码分析工具。咱们将在全书的其他章节使用IDA Pro工具。

第6章,“识别汇编中的C代码结构”,提供了一些C语言代码的汇编语句案例,并教你如何理解汇编代码的高层功能结构。

第7章,“分析恶意Windows程序”,覆盖范围普遍的Windows程序特定概念,而这些是理解恶意Windows程序所必需的。

第8章,“动态调试”,解释调试的基本知识,以及恶意代码分析师该如何使用调试器。

第9章,“OllyDbg”,为你展现如何使用OllyDbg,恶意代码分析师中最流行的一款调试器。

第10章,“使用WinDbg调试内核”,包括了如何使用WinDbg来分析内核模式恶意代码和内核套件。

第11章,“恶意代码行为”,介绍了常见的恶意代码功能,并告诉你在分析恶意代码时该如何识别恶意功能。

第12章,“隐蔽的恶意代码启动”,讨论如何分析一类将本身的执行隐藏至另外一进程中的特殊恶意代码。

第13章,“数据加密”,演示了恶意代码如何加密数据,使其更难在网络流量或受害主机上被发现。

第14章,“恶意代码的网络特征”,教你如何经过恶意代码分析来建立网络检测特征,并演示这类特征要优于单独从捕获网络流量中提取的特征。

第15章,“对抗反汇编”,解释一些恶意代码编写者如何设计本身的恶意代码,使得它们难以被反汇编,并说明如何识别和击败这些技术。

第16章,“反调试技术”,描述恶意代码编写者可让他们的代码难以被调试的伎俩,以及克服这些障碍的方法。

第17章,“反虚拟机技术”,演示恶意代码所使用的反虚拟机技术,这些技术会让分析师在虚拟机中难以分析这些恶意代码,并介绍绕过这些技术的方法。

第18章,“加壳与脱壳”,告诉读者恶意代码是如何使用加壳来隐藏本身真正目的的,而后提供一步一步的脱壳的技术方法。

第19章,“shellcode分析”,解释了shellcode是什么,并展现分析恶意shellcode的一些技巧和窍门。

第20章,“C++代码分析”,为你指明C++代码在编译以后存在什么样的差别,并教授你如何对由C++编写的恶意代码进行分析。

第21章,“64位恶意代码”,讨论恶意代码编写者为什么使用64位恶意代码,以及你所须要了解的x86与x64之间的区别。

附录A,“常见Windows函数列表”,简要介绍了恶意代码中广泛使用的Windows函数。

附录B,“流行的恶意代码分析工具列表”,列出了对于恶意代码分析师们来讲最有用的工具。

附录C,“实验做业参考解答”,对全书每一个章节的实验给出了参考解答。

附录D,“致青春,基础软件开发的中国故事”,讲述中国程序员开发Windows内核调试器Syser的幕后故事。

附录E,“Syser操做入门”,提供Syser内核调试器的入门指南。

咱们整本书的目标就是为你武装可以击败各类类型恶意代码的分析技术。正如你看到的,咱们涵盖了大量的技术材料,以及可以增强这些技术材料的实验做业。当你读完本书时,应该学到了用来分析任何恶意代码的技能,包括快速分析常规恶意代码样本的基础技术,以及解剖那些甚至是“来自外星”的神秘恶意代码样本所需的高超技术。

那么,让咱们开始吧!

 

相关文章
相关标签/搜索