Blue Flower

恶意代码分析实战是业内公认的一本内容全面的恶意代码分析指南,由迈克尔.斯科尔斯基和安德鲁既编著。本书是一本教材,也是一本动手实践的指南,不仅教会你如何分析恶意代码(技术指导),而且还配备大量的实验练习、案例、答案以及详细的分析过程,同时还包含很多用作案例的恶意代码样本,分享了丰富、安全的学习环境,相信本书的技术内容、实验作业一定可以帮助你渐入佳境,欢迎免费下载收藏。
202209171910365044600000

内容介绍

《恶意代码分析实战》是一本内容全面的恶意代码分析技术指南,其内容兼顾理论,重在实践,从不同方面为读者讲解恶意代码分析的实用技术方法。全书共分为21章,覆盖恶意代码行为、恶意代码静态分析方法、恶意代码动态分析方法、恶意代码对抗与反对抗方法等,并包含了shellcode分析,C++恶意代码分析,以及64位恶意代码分析方法的介绍。本书多个章节后面都配有实验并配有实验的详细讲解与分析。通过每章的介绍及章后的实验,本书一步一个台阶地帮助初学者从零开始建立起恶意代码分析的基本技能。
202209171910368541640001

恶意代码分析实战章节目录

目 录第0章 恶意代码分析技术入门10.1 恶意代码分析目标10.2 恶意代码分析技术20.2.1 静态分析基础技术20.2.2 动态分析基础技术20.2.3 静态分析高级技术20.2.4 动态分析高级技术20.3 恶意代码类型30.4 恶意代码分析通用规则4第 1 篇 静态分析第1章 静态分析基础技术 61.1 反病毒引擎扫描:实用的第一步61.2 哈希值:恶意代码的指纹71.3 查找字符串71.4 加壳与混淆恶意代码91.4.1 文件加壳101.4.2 使用PEiD 检测加壳101.5 PE 文件格式111.6 链接库与函数121.6.1 静态链接、运行时链接与动态链接121.6.2 使用Dependency Walker 工具探索动态链接函数131.6.3 导入函数141.6.4 导出函数151.7 静态分析技术实践151.7.1 PotentialKeylogger.exe:一个未加壳的可执行文件151.7.2 PackedProgram.exe:穷途末路181.8 PE 文件头与分节181.8.1 使用PEview 来分析PE 文件191.8.2 使用Resource Hacker 工具来查看资源节221.8.3 使用其他的PE 文件工具231.8.4 PE 文件头概述231.9 小结241.10 实验24第2章 在虚拟机中分析恶意代码 272.1 虚拟机的结构272.2 创建恶意代码分析机282.2.1 配置VMware292.2.2 断开网络302.2.3 创建主机模式网络302.2.4 使用多个虚拟机302.3 使用恶意代码分析机312.3.1 让恶意代码连接互联网312.3.2 连接和断开外围设备322.3.3 拍摄快照322.3.4 从虚拟机传输文件332.4 使用VMware 进行恶意代码分析的风险342.5 记录/重放:重复计算机运行轨迹342.6 小结35第3章 动态分析基础技术 363.1 沙箱:简便但粗糙的方法363.1.1 使用恶意代码沙箱363.1.2 沙箱的缺点373.2 运行恶意代码383.3 进程监视器393.3.1 进程监视器的显示403.3.2 进程监视器中的过滤413.4 使用进程浏览器(Process Explorer)来查看进程433.4.1 进程浏览器的显示433.4.2 使用验证选项443.4.3 比较字符串453.4.4 使用依赖遍历器(Dependency Walker)453.4.5 分析恶意文档463.5 使用Regshot 来比较注册表快照463.6 模拟网络473.6.1 使用ApateDNS473.6.2 使用Netcat 进行监视483.7 使用Wireshark 进行数据包监听493.8 使用INetSim513.9 基础动态分析工具实践523.10 小结553.11 实验56第 2 篇 静态分析高级技术篇第4章 x86 反汇编速成班 604.1 抽象层次604.2 逆向工程624.3 x86 体系结构624.3.1 内存634.3.2 指令644.3.3 操作码和字节序644.3.4 操作数654.3.5 寄存器654.3.6 简单指令674.3.7 栈704.3.8 条件指令734.3.9 分支指令734.3.10 重复指令744.3.11 C 语言主函数和偏移764.3.12 更多信息:Intel x86 Architecture Manual774.4 小结78第5章 IDA Pro 795.1 加载一个可执行文件795.2 IDA Pro 接口815.2.1 反汇编窗口模式815.2.2 对分析有用的窗口835.2.3 返回到默认视图835.2.4 导航IDA Pro 835.2.5 搜索855.3 使用交叉引用865.3.1 代码交叉引用875.3.2 数据交叉引用885.4 分析函数885.5 使用图形选项895.6 增强反汇编915.6.1 重命名位置915.6.2 注释925.6.3 格式化操作数925.6.4 使用命名的常量935.6.5 重新定义代码和数据945.7 用插件扩展IDA955.7.1 使用IDC 脚本965.7.2 使用IDAPython975.7.3 使用商业插件975.8 小结985.9 实验98第6章 识别汇编中的C代码结构 1006.1 全局与局部变量1016.2 反汇编算术操作1026.3 识别if 语句1046.3.1 用IDA Pro 图形化分析函数1056.3.2 识别嵌套的if 语句1066.4 识别循环1076.4.1 找到for 循环1076.4.2 找到while 循环1096.5 理解函数调用约定1106.5.1 cdecl1106.5.2 stdcall 1116.5.3 fastcall 1116.5.4 压栈与移动 1116.6 分析switch 语句1126.6.1 If 样式1126.6.2 跳转表1146.7 反汇编数组1186.8 识别结构体1196.9 分析链表遍历1216.10 小结1236.11 实验123第7章 分析恶意Windows程序 1267.1 Windows API1267.1.1 类型和匈牙利表达法1267.1.2 句柄1277.1.3 文件系统函数1277.1.4 特殊文件1287.2 Windows 注册表1297.2.1 注册表根键1307.2.2 Regedit1317.2.3 自启动程序1317.2.4 常用注册表函数1317.2.5 练习分析注册表操作代码1327.2.6 使用.reg 文件的注册表脚本1337.3 网络API1337.3.1 伯克利兼容套接字1347.3.2 网络的服务器和客户端1347.3.3 WinINet API 1357.4 跟踪恶意代码的运行1367.4.1 DLL1367.4.2 进程1377.4.3 线程1397.4.4 使用互斥量的进程间协作1427.4.5 服务1437.4.6 组件对象模型1457.4.7 异常:当事情出错时1477.5 内核与用户模式1487.6 原生API1497.7 小结1517.8 实验151第 3 篇 动态分析高级技术篇第8章 动态调试 1548.1 源代码级与汇编级的调试器1548.2 内核模式与用户模式调试1558.3 使用调试器1558.3.1 单步调试1558.3.2 单步跳过(Stepping-Over)和单步跳入(Stepping-Into)1568.3.3 用断点暂停执行1578.4 异常1618.4.1 首次和二次异常处理1628.4.2 常见异常1628.5 使用调试器修改可执行文件1638.6 修改可执行程序的实践1638.7 小结164第9 章 OllyDbg 1659.1 加载恶意代码1659.1.1 打开一个可执行文件1659.1.2 附加调试器到一个运行程序1669.2 OllyDbg 的接口1679.3 内存映射1689.3.1 基地址重定位1699.4 查看线程和堆栈1709.5 执行代码1719.6 断点1729.6.1 软件断点1739.6.2 条件断点1749.6.3 硬件断点1759.6.4 内存断点1759.7 加载DLL1769.8 跟踪1779.8.1 标准回溯跟踪1779.8.2 堆栈调用跟踪1789.8.3 运行跟踪1789.8.4 跟踪Poison Ivy1789.9 异常处理1799.10 修补1809.11 分析shellcode1819.12 协助功能1829.13 插件1829.13.1 OllyDump1839.13.2 调试器隐藏插件1839.13.3 命令行1849.13.4 书签1859.14 脚本调试1859.15 小结1869.16 实验187第10章 使用WinDbg 调试内核 18910.1 驱动与内核代码18910.2 安装内核调试19110.3 使用WinDbg19310.3.1 从内存中读取19410.3.2 使用算术操作符19410.3.3 设置断点19410.3.4 列举模块19510.4 微软符号表19510.4.1 搜索符号19510.4.2 查看结构信息19610.4.3 配置Windows 符号表19810.5 内核调试实践19810.5.1 用户空间的代码19810.5.2 内核模式的代码20010.5.3 查找驱动对象20310.6 Rootkit20410.6.1 Rootkit 分析实践20510.6.2 中断20810.7 加载驱动20910.8 Windows Vista、Windows 7 和x64 版本的内核问题20910.9 小结21010.10 实验210第 4 篇 恶意代码功能篇第11章 恶意代码行为 21411.1 下载器和启动器21411.2 后门(backdoor)21411.2.1 反向shell21511.2.2 远程控制工具21611.2.3 僵尸网络21611.2.4 远程控制工具与僵尸网络的比较21711.3 登录凭证窃密器21711.3.1 GINA 拦截21711.3.2 口令哈希转储21811.3.3 击键记录22111.4 存活机制22311.4.1 Windows 注册表22311.4.2 特洛伊木马化(Trojanized)系统二进制文件22511.4.3 DLL 加载顺序劫持22711.5 提权22811.5.1 使用SeDebugPrivilege22811.6 隐藏它的踪迹――用户态的Rootkit22911.6.1 IAT Hook 23011.6.2 Inline Hook 23111.7 小结23211.8 实验232第12章 隐蔽的恶意代码启动 23412.1 启动器(Launcher)23412.2 进程注入23412.2.1 DLL 注入23512.2.2 直接注入23712.3 进程替换23812.4 钩子(Hook)注入24012.4.1 本地和远程钩子(Hook)24012.4.2 使用钩子的击键记录器24112.4.3 使用SetWindowsHookEx 24112.4.4 目标线程24112.5 Detours 24212.6 APC 注入24312.6.1 用户模式下APC 注入24412.6.2 内核模式的APC 注入24512.7 小结24612.8 实验246第13章 数据加密 24813.1 分析加密算法的目的24813.2 简单的加密算法24813.2.1 凯撒密码24913.2.2 XOR24913.2.3 其他一些简单的加密策略25413.2.4 Base6425513.3 常见的加密算法25813.3.1 识别字符串和导入25913.3.2 查找加密常量25913.3.3 查找高熵值内容26113.4 自定义加密26213.4.1 识别自定义加密26313.4.2 攻击者使用自定义加密的优势26513.5 解密26513.5.1 自解密26513.5.2 手动执行解密函数26613.5.3 使用通用的解密规范26713.6 小结27013.7 实验271第14章 恶意代码的网络特征27314.1 网络应对措施27314.1.1 在原始环境中观察恶意代码27314.1.2 恶意行为的痕迹27414.1.3 OPSEC=操作安全性27514.2 安全地调查在线攻击者27514.2.1 间接性策略27514.2.2 获取IP 地址和域名信息27614.3 基于内容的网络应对措施27814.3.1 使用Snort 进行入侵检测27814.3.2 深入观察27914.4 结合动态和静态分析技术28214.4.1 过度分析的危险28314.4.2 在众目睽睽下隐藏28314.4.3 理解周边代码28614.4.4 寻找网络操作代码28714.4.5 了解网络内容的来源28814.4.6 硬编码数据 vs. 临时数据28914.4.7 确定和利用编码步骤28914.4.8 创建特征29114.4.9 分析解析例程29214.4.10 针对多个元素29414.5 了解攻击者的意图29514.6 小结29614.7 实验296第 5 篇 逆向工程第15章 对抗反汇编 30015.1 何谓对抗反汇编技术30015.2 挫败反汇编算法30115.2.1 线性反汇编30215.2.2 面向代码流的反汇编30315.3 对抗反汇编技术30615.3.1 相同目标的跳转指令30615.3.2 固定条件的跳转指令30715.3.3 无效的反汇编指令30815.3.4 用IDA Pro 对指令进行NOP替换31115.4 混淆控制流图31215.4.1 函数指针问题31215.4.2 在IDA Pro 中添加代码的交叉引用31315.4.3 滥用返回指针31315.4.4 滥用结构化异常处理31515.5 挫败栈帧分析31715.6 小结32015.7 实验320第16章 反调试技术32216.1 探测Windows 调试器32216.1.1 使用Windows API32216.1.2 手动检测数据结构32416.1.3 系统痕迹检测32616.2 识别调试器的行为32716.2.1 INT 扫描32716.2.2 执行代码校验和检查32816.2.3 时钟检测32816.3 干扰调试器的功能33016.3.1 使用TLS回调33016.3.2 使用异常33216.3.3 插入中断33316.4 调试器漏洞33416.4.1 PE 头漏洞33416.4.2 OutputDebugString漏洞33616.5 小结33616.6 实验336第17章 反虚拟机技术 33817.1 VMware 痕迹33817.1.1 绕过VMware 痕迹的探测34017.1.2 探测内存痕迹34217.2 查找漏洞指令34217.2.1 使用Red Pill 反虚拟机技术34317.2.2 使用No Pill 技术34417.2.3 查询I/O 通信端口34417.2.4 使用str 指令34517.2.5 反虚拟机的x86 指令34617.2.6 在IDA Pro 中高亮显示反虚拟机代码34717.2.7 使用ScoopyNG34717.3 调整设置34817.4 虚拟机逃逸34917.5 小结34917.6 实验349第18章 加壳与脱壳 35218.1 剖析加壳35218.1.1 脱壳存根35318.1.2 加载可执行文件35318.1.3 解析导入函数表35318.1.4 尾部跳转35418.1.5 图示脱壳过程35418.2 识别加壳程序35518.2.1 加壳程序的标识35518.2.2 熵计算35618.3 脱壳选项35618.4 自动脱壳35618.5 手动脱壳35718.5.1 使用导入重构器重构导入表35818.5.2 查找OEP35918.5.3 手动修复导入表36318.6 常见壳的技巧与窍门36418.6.1 UPX 36418.6.2 PECompact 36518.6.3 ASPack36518.6.4 Petite 36518.6.5 WinUpack 36618.6.6 Themida36718.7 不完全脱壳情况下的分析36818.8 加壳DLL 36818.9 小结36918.10 实验369第 6 篇 高级专题第19章 shellcode 分析 37219.1 加载shellcode 进行分析37219.2 位置无关代码37319.3 识别执行位置37319.3.1 使用call/pop 指令37419.3.2 使用fnstenv 指令37619.4 手动符号解析37719.4.1 在内存中找到kernel32.dll37819.4.2 解析PE 文件导出数据38019.4.3 使用散列过的导出符号名38219.5 一个完整的Hello World 例子38319.6 shellcode 编码38519.7 空指令雪橇38719.8 找到shellcode38719.9 小结38819.10 实验389第20章 C++代码分析 39120.1 面向对象的编程语言39120.1.1 this 指针39220.1.2 重载与修饰39420.1.3 继承(Inheritance)和函数重写(Overriding)39520.2 虚函数和非虚函数39620.2.1 虚函数表的使用39820.2.2 识别虚函数表39920.3 创建和销毁对象40020.4 小结40120.5 实验401第21章 64 位恶意代码 40321.1 为什么需要64 位恶意代码40321.2 x64 架构上的差别40421.2.1 x64 调用约定和栈使用上的差别40621.2.2 64 位异常处理40821.3 在Windows 64 位上的Windows 32 位40821.4 恶意代码功能上的64位提示40921.5 小结41021.6 实验410附录A 常见Windows 函数列表 412附录B 流行的恶意代码分析工具列表424附录C 实验作业参考解答435附录D 致青春,基础软件开发的中国故事 691附录E Syser 操作入门 695

使用说明

1、下载并解压,得出pdf文件
2、如果打不开本文件,请务必下载pdf阅读器
3、安装后,在打开解压得出的pdf文件
4、双击进行阅读>

下载仅供下载体验和测试学习,不得商用和正当使用。

下载体验

请输入密码查看内容!

如何获取密码?

 

点击下载