国内首部关于黑客免杀技术的专著,旨在为反病毒工程师剖析各种恶意软件和应对各种安全威胁提供全面指导。不仅从攻击者(黑客)的视角全方位揭示了黑客免杀技术的常用方法、常用技术和思想原理,而且还从防御者(反病毒工程师)的视角深入讲解了遏制免杀技术的具体方法策略。从纯技术的角度讲,本书不仅详细讲解了免杀技术的各种细节和方法,而且还详细讲解了PE文件、逆向工程、C++壳的编写、免杀壳的打造、脱壳技术、Rootkit等安全技术的细节。
全书共20章,分为三大部分:基础篇(1~6章)详细介绍了黑客免杀技术的初级技巧,包括查找(修改)特征码、常见特征码绕过技巧、壳在免杀中的应用、花指令和其他免杀基础知识;高级篇(7~)深入讲解了PE文件、逆向工程、C++壳的编写、免杀壳的打造、脱壳技术、Rootkit等黑客免杀技术常用的安全技术的原理和细节,以及黑客免杀技术是如何应用它们的,为反病毒工程师应对各种恶意软件提供了原理性指导;扩展篇(17~20章)为遏制黑客免杀技术提供了思路和具体的方案。
封面图
目录
- 前言
- 基础篇初级免杀技术
- 第1章变脸2
- 1.1为何变脸2
- 1.2何为变脸3
- 1.3免杀的发展史3
- 1.4免杀技术的简单原理4
- 1.5免杀与其他技术的区别5
- 1.5.1免杀不是Rootkit技术5
- 1.5.2免杀不是加密解密技术5
- 1.6小结6
- 第2章免杀基础知识7
- 2.1如何开始免杀7
- 2.2反病毒软件原理与反病毒技术介绍8
- 2.2.1反病毒软件的工作原理8
- 2.2.2基于文件扫描的反病毒技术9
- 2.2.3基于内存扫描的反病毒技术12
- 2.2.4基于行为监控的反病毒技术12
- 2.2.5基于新兴技术的反病毒技术12
- 2.2.6反病毒技术前沿14
- 2.2.7反病毒技术展望14
- 2.3了解PE文件15
- 2.3.1什么是PE文件15
- 2.3.2PE文件的结构16
- 2.4免杀原理17
- 2.4.1文件免杀原理17
- 2.4.2内存免杀原理20
- 2.4.3行为免杀原理21
- 2.5工具脱壳技巧21
- 2.5.1壳的分类22
- 2.5.2免杀与脱壳是什么关系23
- 2.5.3使用专用脱壳工具脱壳24
- 2.5.4使用通用脱壳工具脱壳25
- 2.6小结26
- 第3章免杀与特征码27
- 3.1特征码免杀技术27
- 3.1.1理想状态下的免杀27
- 3.1.2由脚本木马免杀理解特征码28
- 3.2特征码定位原理29
- 3.2.1特征码逐块填充定位原理29
- 3.2.2特征码逐块暴露定位原理31
- 3.2.3特征码混合定位原理34
- 3.3脚本木马定位特征码35
- 3.4MyCCL查找文件特征码39
- 3.4.1MyCCL的典型应用39
- 3.4.2针对MyCCL的一点思考41
- 3.5MyCCL查找内存特征码43
- 3.6特征码修改方法44
- 3.6.1简单的特征码修改44
- 3.6.2特征码修改进阶45
- 3.7小结50
- 第4章其他免杀技术51
- 4.1修改入口点免杀51
- 4.2使用VMProtect加密54
- 4.3Overlay附加数据的处理及应用54
- 4.4驱动程序免杀修改技巧55
- 4.4.1驱动程序的常见免杀方法55
- 4.4.2驱动程序的手工免杀思路56
- 4.5补丁在免杀中的应用57
- 4.6PE文件进阶介绍59
- 4.6.1PE文件格式60
- 4.6.2虚拟内存的简单介绍62
- 4.6.3PE文件的内存映射63
- 4.7网页木马的免杀66
- 4.7.1脚本木马免杀66
- 4.7.2网页挂马的免杀77
- 4.8小结78
- 第5章花指令与免杀80
- 5.1什么是花指令80
- 5.2脚本木马的花指令应用81
- 5.3花指令的根基—汇编语言83
- 5.3.1认识汇编83
- 5.3.2通过反汇编添加任意功能85
- 5.4花指令入门88
- 5.5花指令在免杀领域的应用91
- 5.5.1花指令的应用技巧91
- 5.5.2花指令的修改技巧简介91
- 5.5.3空白区域寻找与加空白区段92
- 5.6花指令的高级应用94
- 5.6.1花指令的提取与快速应用94
- 5.6.2SEH异常的应用96
- 5.7小结97
- 第6章壳在免杀中的应用98
- 6.1壳的基础知识98
- 6.2壳在免杀领域的应用99
- 6.2.1加壳的免杀原理100
- 6.2.2FreeRes多重加壳100
- 6.3壳的修改技巧101
- 6.3.1壳的初级修改101
- 6.3.2制作通用补丁102
- 6.4小结107
- 高级篇免杀技术进阶
- 第7章PE文件格式详解110
- 7.1MS-DOS头111
- 7.1.1重要字段112
- 7.1.2其他字段112
- 7.2PE文件头113
- 7.2.1Signature字段113
- 7.2.2IMAGE_FILE_HEADER结构113
- 7.2.3IMAGE_OPTIONAL_HEADER结构(x86/x64)115
- 7.2.4数据目录表118
- 7.3区段表119
- 7.3.1IMAGE_SECTION_HEADER结构119
- 7.3.2区段名功能约定121
- 7.3.3区段对齐详解122
- 7.3.4地址转换123
- 7.4导出表123
- 7.4.1IMAGE_EXPORT_DIRECTORY结构123
- 7.4.2识别导出表124
- 7.5导入表127
- 7.5.1IMAGE_IMPORT_DESCRIPTOR结构128
- 7.5.2识别导入表130
- 7.6资源132
- 7.6.1资源结构132
- 7.6.2识别资源135
- 7.7异常137
- 7.8安全139
- 7.8.1安全目录结构139
- 7.8.2识别安全结构140
- 7.9基址重定位141
- 7.9.1基址重定位表结构141
- 7.9.2识别基址重定位表143
- 7.10调试146
- 7.11特殊结构数据(版权)147
- 7.12全局指针147
- 7.13TLS148
- 7.13.1TLS的回调函数149
- 7.13.2TLS的结构(x86/x64)151
- 7.13.3识别TLS152
- 7.14载入配置(x86/x64)153
- 7.15绑定导入表155
- 7.15.1绑定导入表结构155
- 7.15.2识别绑定导入表156
- 7.16导入地址表157
- 7.17延迟加载表157
- 7.17.1延迟加载表结构158
- 7.17.2识别延迟加载表159
- 7.18COM描述符159
- 7.19小结159
- 第8章PE文件知识在免杀中的应用161
- 8.1PE文件与免杀思路161
- 8.1.1移动PE文件头位置免杀161
- 8.1.2导入表移动免杀163
- 8.1.3导出表移动免杀165
- 8.2PE文件与反启发式扫描165
- 8.2.1最后一个区段为代码段165
- 8.2.2可疑的区段头部属性166
- 8.2.3可疑的PE选项头的有效尺寸值166
- 8.2.4可疑的代码节名称166
- 8.2.5多个PE头部166
- 8.2.6导入表项存在可疑导入167
- 8.3一个稍显复杂的例子—隐藏导入表167
- 8.3.1操作原理与先决条件167
- 8.3.2修改PE文件168
- 8.3.3构造我们的反汇编代码168
- 8.4小结169
- 第9章软件逆向工程170
- 9.1准备工作170
- 9.1.1要准备的工具及基础知识171
- 9.1.2程序是从哪里开始运行的171
- 9.2一个简单的小例子177
- 9.3函数识别初探179
- 9.4if-else分支185
- 9.4.1以常量为判断条件的简单if-else分支185
- 9.4.2以变量为判断条件的简单if-else分支186
- 9.4.3以常量为判断条件的复杂if-else分支188
- 9.4.4以变量为判断条件的复杂if-else分支189
- 9.4.5识别三目运算符190
- 9.5循环分支194
- 9.5.1do-while循环194
- 9.5.2while循环196
- 9.5.3for循环199
- 9.5.4循环体的语句外提优化202
- 9.6switch-case分支203
- 9.6.1简单switch-case分支识别技巧203
- 9.6.2复杂分支的switch-case识别208
- 9.6.3switch-case分支结构与稀疏矩阵210
- 9.6.4switch-case分支结构与平衡二叉树215
- 9.7加法与减法的识别与优化原理220
- 9.7.1加法的识别与优化221
- 9.7.2减法的识别与优化223
- 9.8乘法与除法的识别与优化原理224
- 9.8.1乘法的位移优化224
- 9.8.2乘法的lea指令优化225
- 9.8.3除法与倒数相乘228
- 9.8.4倒数相乘与定点运算的配合229
- 9.8.5除法运算的识别与优化230
- 9.8.6取模运算的识别与优化236
- 9.9指针与数组238
- 9.9.1指针与数组的渊源238
- 9.9.2数组的不同表达方式242
- 9.10数组、结构体与对象243
- 9.10.1数组与结构体243
- 9.10.2结构体与类245
- 9.11变量作用域的识别245
- 9.12识别构造与析构函数247
- 9.12.1快速识别出类248
- 9.12.2识别构造函数252
- 9.12.3识别析构函数253
- 9.13虚函数与纯虚函数的识别254
- 9.13.1识别简单的虚函数254
- 9.13.2识别较复杂的虚函数260
- 9.14 正确识别类的继承关系275
- 9.15最后一役290
- 9.15.1MFC逆向初探291
- 9.15.2分析BypassUAC.exe292
- 9.16小结301
- 第10章源码级免杀302
- 10.1怎样定位产生特征的源代码302
- 10.1.1定位文件特征302
- 10.1.2定位行为特征304
- 10.2基于源码的特征修改304
- 10.2.1变换编译器与编译选项304
- 10.2.2添加垃圾代码305
- 10.2.3语法变换306
- 10.2.4添加汇编花指令306
- 10.3小结307
- 第11章详解C++壳的编写308
- 11.1了解壳的运行流程308
- 11.2设计一个纯C++编写的壳309
- 11.2.1用C++编写的壳应该是什么样的310
- 11.2.2编写过程中会遇到的问题310
- 11.3用C++写一个简单的壳311
- 11.3.1配置工程312
- 11.3.2编写Stub部分314
- 11.3.3编写加壳部分318
- 11.3.4编写界面部分325
- 11.4设计一个由C++编写的专业壳326
- 11.4.1为问题找到答案326
- 11.4.2设计专业壳的框架329
- 11.4.3如何设计Stub部分330
- 11.4.4如何设计加壳部分331
- 11.4.5需要注意的细节问题334
- 11.5怎样调试由C++编写的Stub部分334
- 11.6小结335
- 第12章黑客是怎样打造免杀壳的336
- 12.1免杀壳与加密壳的异同336
- 12.2导入表加密337
- 12.3代码混淆与代码乱序337
- 12.4附加驱动338
- 12.5小结339
- 第13章脱壳技术340
- 13.1寻找OEP340
- 13.1.1利用内存断点340
- 13.1.2利用堆栈平衡342
- 13.1.3利用编译语言特点343
- 13.1.4利用跨区段跳转345
- 13.2转储内存映像346
- 13.3重建导入表346
- 13.3.1导入表重建原理347
- 13.3.2使用ImportREC重建导入表347
- 13.4小结348
- 第14章Rootkit基础349
- 14.1构建一个Rootkit基础环境349
- 14.1.1构建开发环境349
- 14.1.2构建基于Visual Studio 2012的调试环境350
- 14.1.3构建基于WinDbg的调试环境354
- 14.1.4将Rootkit加载到系统356
- 14.1.5创建一个简单的驱动并调试357
- 14.2何为Ring0层360
- 14.3关键表361
- 14.4内存分页362
- 14.4.1地址转译363
- 14.4.2内存访问检查367
- 14.4.3Windows对重要表的保护368
- 14.5内存描述符表369
- 14.6中断描述符表(IDT)369
- 14.7系统服务调度表371
- 14.8控制寄存器371
- 14.8.1利用CR0禁用内存保护机制371
- 14.8.2其他控制寄存器372
- 14.9小结372
- 第15章Rootkit在免杀中的应用373
- 15.1用户模式Rootkit373
- 15.1.1DLL远程注入技巧373
- 15.1.2内联钩子375
- 15.1.3导入地址表钩子375
- 15.1.4一个保护文件不被删除的例子376
- 15.2内核编程基础377
- 15.2.1内核编程环境与用户层编程环境的异同377
- 15.2.2如何选择Windows驱动开发模型378
- 15.2.3驱动设备与请求处理378
- 15.2.4内核编程中的数据类型386
- 15.2.5函数调用387
- 15.2.6Windows内核编程的特点389
- 15.3内核模式Rootkit390
- 15.3.1SYSENTER钩子390
- 15.3.2SSDT钩子394
- 15.3.3内联钩子399
- 15.3.4IRP钩子401
- 15.3.5LADDR钩子406
- 15.3.6IDT钩子411
- 15.3.7IOAPIC钩子413
- 15.4小结417
- 第16章免杀技术前沿418
- 16.1免杀技术的发展趋势418
- 16.2免杀前沿之突破主动防御419
- 16.2.1“移花接木”之屏幕截图突破主动防御419
- 16.2.2“暗渡陈仓”之利用可信进程突破主动防御419
- 16.2.3“釜底抽薪”之利用系统进程突破主动防御420
- 16.2.4“顺手牵羊”之利用逻辑漏洞突破主动防御420
- 16.2.5“浑水摸鱼”之利用变形复制突破主动防御420
- 16.2.6“金蝉脱壳”之利用异同逃逸虚拟机420
- 16.2.7“借尸还魂”之利用替换文件突破主动防御421
- 16.2.8“借刀杀人”之利用调试接口突破主动防御421
- 16.3黑客免杀技术的展望421
- 16.4小结422
- 扩展篇遏制免杀技术初探
- 第17章浅谈部分免杀技巧的遏制424
- 17.1盯紧PE文件424
- 17.2盯紧程序行为425
- 17.3小结425
- 第18章反特征码定位426
- 18.1释放干扰码426
- 18.2定位行为的判定426
- 18.3设定“靶特征码”427
- 18.4小结427
- 第19章遏制免杀与Anti Rootkit428
- 19.1适当的监控428
- 19.2基本检测逻辑428
- 19.3Rootkit检测方法初探429
- 19.4小结430
- 第20章浅谈反病毒产品的改进431
- 20.1云查杀与本地查杀紧密结合431
- 20.2注重感染型病毒木马的清除工作431
- 20.3精进启发式扫描解决效率问题432
- 20.4小结432
- 附录A80x86汇编基础知识433