unidbg逆向工程:原理与实践

unidbg逆向工程:原理与实践
作 者: 陈佳林
出版社: 机械工业出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 暂缺
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  陈佳林 (ID:r0ysue)资深安全技术专家,在逆向工程、移动安全领域积累了丰富的经验。曾为政府机关单位提供涉密项目研究开发,多次为银行和电信行业以及政府部门提供安全方面的培训服务。看雪论坛的版主和资深讲师,看雪“安卓高级研修班”负责人,在看雪安全开发者峰会、GeekPwn 发表主题演讲,在看雪论坛、安全客、Freebuf 等平台发表大量技术文章。著有《安卓 Frida 逆向与抓包实战》《安卓Frida 逆向与协议分析》《Frida 安卓 SO 逆向深入实践》等书籍。开源项目r0capture 在 Github 的 star 数量超过 5000 个。

内容简介

内容介绍这是一本从原理和实践角度讲解unidbg的著作,不仅深入解析了unidbg的使用方法、工作原理、实现细节,而且详细讲解了如何用unidbg解决生产环境中的各种逆向工程难题。它是作者多年安全工作经验的总结,得到了unidbg框架作者的高度评价和推荐。全书共31章,分为四个部分。第一部分(第1~3章) unidbg基础主要介绍了unidbg的基本使用和操作,包括工作环境的准备、so文件加载、简单补环境、Hook和Patch的方法等。第二部分(第4~15章) unidbg原理与实现通过源码分析的方式对unidbg的原理与实现进行了详细的剖析,首先分析了Unicorn模拟linker实现so的加载、链接、初始化的原理,然后深入分析了unidbg主要功能和模块的源码实现,包括AndroidEmulator、JNI交互流程追踪、DalvikVM、Memory、Hook等。第三部分(第16~26章) 补环境与模拟执行实战通过实战案例讲解了unidbg在生产环境中的使用,包括如I/O重定向、Debugger自吐,指针参数与Debugger、魔改Base64还原、使用unidbg动态分析内存中的数据、使用unidbg主动调用fork进程,并对补环境中的补环境入门、标识记录、设备风控、补环境加强等进行分析,指导读者编写实际的补环境代码,更好地将理论知识运用于实践中。第四部分(第27~31章) 反制与生产环境部署。介绍了环境变量检测、xHook框架检测、JNI层常见函数处理等,对常规检测进行了总结,并介绍了在检测之后如何把so部署到x86服务器上。这部分内容对批量生产与对抗、大数据风控非常有价值,对于打击黑灰产、遏制网络犯罪有着非常积极的意义。

图书目录

目  录?Contents

前 言

第一部分 进入unidbg的世界

第1章 unidbg环境准备与快速

上手 2

1.1 r0env环境介绍与集成 2

1.1.1 r0env各组件介绍 2

1.1.2 r0env下载及安装 5

1.2 IDEA安装及配置 6

1.3 第一个unidbg项目 7

1.3.1 unidbg介绍 7

1.3.2 unidbg下载与运行示例 8

1.3.3 unidbg示例讲解 9

1.4 本章小结 13

第2章 unidbg模拟执行初探 14

2.1 第一个NDK项目 14

2.1.1 使用Android Studio创建NDK项目 14

2.1.2 编写自己的so业务代码 16

2.2 unidbg的符号调用与地址调用 18

2.2.1 unidbg主动调用前置准备 18

2.2.2 unidbg主动调用so函数 19

2.2.3 unidbg部分API简单讲解 22

2.3 本章小结 24

第3章 unidbg补环境、Hook与

Patch 25

3.1 为so添加交互:使用JNI接口

编写md5方法 25

3.2 使用unidbg修补执行环境并

模拟执行 27

3.3 脱离编译器,使用命令行

编译so 34

3.4 unidbg的Hook 36

3.5 unidbg的Patch 39

3.6 本章小结 42

第二部分 unidbg原理

第4章 ELF文件执行视图解析 44

4.1 ELF文件结构 44

4.1.1 ELF头部结构 45

4.1.2 程序头部表 47

4.1.3 动态节区_DYNAMIC段 51

4.2 深入jelf代码细节,探究ELF

解析 54

4.2.1 分析原版jelf代码 54

4.2.2 分析unidbg版jelf代码 56

4.3 本章小结 60

第5章 Unicorn的初级使用与初探Linker 61

5.1 Unicorn的初级使用:模拟执行与Hook 61

5.1.1 使用Unicorn进行模拟

执行 61

5.1.2 Unicorn的Hook 64

5.1.3 Keystone与Capstone 70

5.2 初探Android系统源码 71

5.2.1 Java层代码追踪 73

5.2.2 Native层代码追踪 75

5.3 本章小结 78

第6章 深入Linker:so的加载、

链接、初始化 79

6.1 so的加载过程 79

6.2 so的链接过程 90

6.3 so的初始化操作 100

6.4 本章小结 102

第7章 使用Unicorn模拟Linker:so的加载过程 103

7.1 模拟Linker?:环境准备 103

7.2 模拟Linker?:so的加载 109

7.3 动态调试Linker,探究so的内存

布局图 118

7.4 本章小结 122

第8章 使用Unicorn模拟Linker:

so的链接过程 123

8.1 so的依赖库加载过程 123

8.2 so的动态链接 127

8.3 初尝试:使用unidbg模拟执行

简单so文件 131

8.4 探究unidbg的Linker代码

细节 133

8.4.1 unidbg加载so文件代码

入口 134

8.4.2 处理so信息并载入内存 135

8.4.3 对so的依赖库进行处理 137

8.4.4 重定位操作 138

8.4.5 处理so的初始化信息与生成module对象 140

8.4.6 执行初始化 141

8.5 本章小结 142

第9章 R0dbg实战与Unidbg_FindKey 143

9.1 模拟Linker?:so的初始化过程 143

9.2 指令追踪与排错 147

9.2.1 TLS线程局部存储环境

初始化 148

9.2.2 R0dbg对系统调用进行

处理 150

9.3 使用R0dbg模拟执行so 152

9.4 Unidbg_FindKey牛刀小试 154

9.5 本章小结 157

第10章 unidbg源码解析:AndroidEmulator 158

10.1 创建AndroidEmulator 158

10.2 创建FileSystem 165

10.3 创建Backend 168

10.4 创建SvcMemory 169

10.5 本章小结 172

第11章 unidbg源码解析:

DalvikVM 173

11.1 分析createDalvikVM() 173

11.2 Dvm相关类介绍 178

11.2.1 BaseVM解析 179

11.2.2 DalvikVM解析 184

11.2.3 DvmObject解析 185

11.2.4 DvmClass解析 187

11.3 本章小结 188

第12章 unidbg源码解析:模拟

执行流程追踪 189

12.1 编写含JNI交互的MD5算法并

模拟执行 189

12.1.1 编写含JNI交互的so 189

12.1.2 使用unidbg进行模拟

执行 190

12.2 模拟执行流程追踪:寻找

函数 192

12.3 模拟执行流程追踪:处理参数

并模拟执行 195

12.4 本章小结 202

第13章 unidbg源码解析:JNI

交互流程追踪 203

13.1 JNI注册 203

13.2 JNI指令执行 208

13.3 本章小结 217

第14章 unidbg源码解析:

Memory 218

14.1 Memory模块的创建 218

14.2 AndroidElfLoader的方法实现 219

14.2.1 内存相关方法实现 219

14.2.2 栈空间相关方法实现 226

14.2.3 用户常用方法解析 227

14.2.4 虚拟模块 230

14.3 加载so的loader功能 231

14.4 本章小结 237

第15章 unidbg源码解析:

Hook 238

1