注重体验与质量的电子书资源下载网站
分类于: 互联网 其它
简介
目录
第1章 x86与x64 1
1.1 寄存器组与数据类型 1
1.2 指令集 3
1.2.1 语法 3
1.2.2 数据移动 4
1.3 练习 9
1.3.1 算术运算 9
1.3.2 栈操作与函数调用 11
1.4 练习 14
1.5 系统机制 21
1.5.1 地址转换 21
1.5.2 中断与异常 23
1.6 综合练习 23
1.7 练习 29
1.8 x64 30
1.8.1 寄存器组与数据类型 30
1.8.2 数据移动 31
1.8.3 规范地址 31
1.8.4 函数调用 31
1.9 练习 32
第2章 ARM 33
2.1 基本特性 34
2.2 数据类型与寄存器 35
2.3 系统级控制与设置 37
2.4 指令集介绍 38
2.5 数据加载与存储 39
2.5.1 LDR与STR 39
2.5.2 LDR的其他用途 42
2.5.3 LDM与STM 43
2.5.4 PUSH与POP 46
2.6 函数与函数调用 48
2.7 算术运算 50
2.8 分支跳转与条件执行 51
2.8.1 Thumb状态 54
2.8.2 switch-case 55
2.9 杂项 56
2.9.1 JIT与SMC 56
2.9.2 同步原语 57
2.9.3 系统服务与机制 57
2.9.4 指令 59
2.10 综合练习 59
2.11 下一步 65
2.12 练习 65
第3章 Windows内核 73
3.1 Windows基础 73
3.1.1 内存布局 73
3.1.2 处理器初始化 74
3.1.3 系统调用 77
3.1.4 中断请求级 88
3.1.5 内存池 89
3.1.6 MDL 90
3.1.7 进程与线程 90
3.1.8 执行上下文 92
3.1.9 内核同步原语 93
3.2 列表 94
3.2.1 实现细节 94
3.2.2 综合练习 100
3.2.3 练习 104
3.3 异步与乱序执行 108
3.3.1 系统线程 108
3.3.2 work item 109
3.3.3 APC 111
3.3.4 DPC 114
3.3.5 定时器 118
3.3.6 进程与线程回调 120
3.3.7 完成例程 120
3.4 I/O请求包 122
3.5 驱动程序结构 123
3.5.1 入口点 124
3.5.2 驱动程序与设备对象 125
3.5.3 IRP 处理 126
3.5.4 用户内核通信常用机制 127
3.5.5 系统机制杂项 128
3.6 综合练习 130
3.6.1 x86后门程序实例 131
3.6.2 x64后门程序实例 145
3.7 下一步 151
3.8 练习 151
3.8.1 建立自信,巩固知识 152
3.8.2 探索与知识扩展 153
3.8.3 驱动分析实战 155
第4章 调试与自动化 156
4.1 调试工具与基本命令 156
4.1.1 设置符号路径 157
4.1.2 调试器窗口 158
4.1.3 表达式求值 158
4.1.4 流程控制与Debug 事件 162
4.1.5 寄存器、内存与符号 165
4.1.6 断点 173
4.1.7 查看进程与模块 175
4.1.8 杂项命令 178
4.2 编写调试工具脚本 179
4.2.1 伪寄存器 180
4.2.2 别名 182
4.2.3 语言 187
4.2.4 脚本文件 198
4.2.5 像使用函数一样使用脚本 201
4.2.6 调试脚本示例 206
4.3 使用SDK 212
4.3.1 概念 213
4.3.2 编写调试工具扩展 216
4.4 有用的扩展、工具和资源 218
第5章 代码混淆 220
5.1 混淆技术概览 221
5.1.1 混淆的本质:一个热身例子 221
5.1.2 基于数据的混淆技术 224
5.1.3 基于控制的混淆技术 227
5.1.4 同时使用控制流与数据流混淆技术 232
5.1.5 通过代码模糊获得安全性 235
5.2 解混淆技术概述 236
5.2.1 解混淆的本质:逆变换 236
5.2.2 解混淆工具 240
5.2.3 解混淆实践 254
5.3 案例研究 267
5.3.1 第一印象 267
5.3.2 分析处理函数语义 269
5.3.3 符号执行 271
5.3.4 完成挑战 272
5.3.5 最后的想法 274
5.4 练习 274
5.5 参考文献 274
附录 实例名称与相应的SHA1散列值 278
1.1 寄存器组与数据类型 1
1.2 指令集 3
1.2.1 语法 3
1.2.2 数据移动 4
1.3 练习 9
1.3.1 算术运算 9
1.3.2 栈操作与函数调用 11
1.4 练习 14
1.5 系统机制 21
1.5.1 地址转换 21
1.5.2 中断与异常 23
1.6 综合练习 23
1.7 练习 29
1.8 x64 30
1.8.1 寄存器组与数据类型 30
1.8.2 数据移动 31
1.8.3 规范地址 31
1.8.4 函数调用 31
1.9 练习 32
第2章 ARM 33
2.1 基本特性 34
2.2 数据类型与寄存器 35
2.3 系统级控制与设置 37
2.4 指令集介绍 38
2.5 数据加载与存储 39
2.5.1 LDR与STR 39
2.5.2 LDR的其他用途 42
2.5.3 LDM与STM 43
2.5.4 PUSH与POP 46
2.6 函数与函数调用 48
2.7 算术运算 50
2.8 分支跳转与条件执行 51
2.8.1 Thumb状态 54
2.8.2 switch-case 55
2.9 杂项 56
2.9.1 JIT与SMC 56
2.9.2 同步原语 57
2.9.3 系统服务与机制 57
2.9.4 指令 59
2.10 综合练习 59
2.11 下一步 65
2.12 练习 65
第3章 Windows内核 73
3.1 Windows基础 73
3.1.1 内存布局 73
3.1.2 处理器初始化 74
3.1.3 系统调用 77
3.1.4 中断请求级 88
3.1.5 内存池 89
3.1.6 MDL 90
3.1.7 进程与线程 90
3.1.8 执行上下文 92
3.1.9 内核同步原语 93
3.2 列表 94
3.2.1 实现细节 94
3.2.2 综合练习 100
3.2.3 练习 104
3.3 异步与乱序执行 108
3.3.1 系统线程 108
3.3.2 work item 109
3.3.3 APC 111
3.3.4 DPC 114
3.3.5 定时器 118
3.3.6 进程与线程回调 120
3.3.7 完成例程 120
3.4 I/O请求包 122
3.5 驱动程序结构 123
3.5.1 入口点 124
3.5.2 驱动程序与设备对象 125
3.5.3 IRP 处理 126
3.5.4 用户内核通信常用机制 127
3.5.5 系统机制杂项 128
3.6 综合练习 130
3.6.1 x86后门程序实例 131
3.6.2 x64后门程序实例 145
3.7 下一步 151
3.8 练习 151
3.8.1 建立自信,巩固知识 152
3.8.2 探索与知识扩展 153
3.8.3 驱动分析实战 155
第4章 调试与自动化 156
4.1 调试工具与基本命令 156
4.1.1 设置符号路径 157
4.1.2 调试器窗口 158
4.1.3 表达式求值 158
4.1.4 流程控制与Debug 事件 162
4.1.5 寄存器、内存与符号 165
4.1.6 断点 173
4.1.7 查看进程与模块 175
4.1.8 杂项命令 178
4.2 编写调试工具脚本 179
4.2.1 伪寄存器 180
4.2.2 别名 182
4.2.3 语言 187
4.2.4 脚本文件 198
4.2.5 像使用函数一样使用脚本 201
4.2.6 调试脚本示例 206
4.3 使用SDK 212
4.3.1 概念 213
4.3.2 编写调试工具扩展 216
4.4 有用的扩展、工具和资源 218
第5章 代码混淆 220
5.1 混淆技术概览 221
5.1.1 混淆的本质:一个热身例子 221
5.1.2 基于数据的混淆技术 224
5.1.3 基于控制的混淆技术 227
5.1.4 同时使用控制流与数据流混淆技术 232
5.1.5 通过代码模糊获得安全性 235
5.2 解混淆技术概述 236
5.2.1 解混淆的本质:逆变换 236
5.2.2 解混淆工具 240
5.2.3 解混淆实践 254
5.3 案例研究 267
5.3.1 第一印象 267
5.3.2 分析处理函数语义 269
5.3.3 符号执行 271
5.3.4 完成挑战 272
5.3.5 最后的想法 274
5.4 练习 274
5.5 参考文献 274
附录 实例名称与相应的SHA1散列值 278