新书速览|Frida Android SO逆向深入实践

从基础到深入,使用Frida揭示原生App的逆向、分析和破解之奥秘!

图片

本书简介

《Frida Android SO逆向深入实践》主要介绍使用Frida辅助分析SO进行逆向工程项目开发。首先从基础开始介绍NDK编译套件,开发编译包含SO的应用软件并进行动静态分析调试;接着介绍如何将算法移植到SO中保护App,并使用模拟执行框架加载SO运行算法,使用GDB、HyperPwn、Objection、Frida联合调试SO中的算法;此外,还将介绍ARM/ELF的文件格式和反编译工具IDA,Frida/Jnitrace Hook/Invoke JNI,JNI与反射及简单风控案例设计分析,onCreate的Native化,分析Android源码追踪JNI的绑定流程。最后介绍哈希和对称加解密算法的核心原理与实现细节,以及使用Frida辅助逆向分析的工作流程。

《Frida Android SO逆向深入实践》按照由易到难、由浅入深的方式进行讲解,适合Native层的初、中级读者阅读。

本书作者

陈佳林,看雪论坛版主,看雪讲师,在移动安全领域经验丰富,多次主持银行、电信、政府及行业部门培训并参与安全研究项目。在看雪安全开发者峰会、GeekPwn发表主题演讲。在看雪、安全客、Freebuf发表大量技术文章,目前就职于看雪科技,负责移动应用安全研究,看雪《安卓高级研修班》负责人,著有《安卓Frida逆向与抓包实战》、《安卓Frida逆向与协议分析》

编辑推荐

 1.对初学者而言,纯程序设计语言的学习有难度甚至枯燥,因此组织本书的写作秉承从零开始学的要旨,降低入门的难度和兼顾提高学习者的学习兴趣。

2.丰富的范例,理论和上机测试实践结合,兼顾自学和教学,提供课后习题解答和视频教学版。

本书目录

第1章  基本开发环境配置1

1.1  虚拟机环境搭建1

1.2  逆向环境搭建3

1.2.1  Android Studio安装NDK编译套件3

1.2.2  ADB的配置和使用5

1.2.3  Python版本管理6

1.2.4  移动设备环境准备7

1.2.5  Frida版本管理7

1.2.6  Objection的安装和使用8

1.3  Frida基本源码开发环境搭建10

1.4  初识NDK12

1.5  其他工具16

1.6  本章小结18

第2章  Android SO动态调试入门19

2.1  Android SO基本动态分析调试19

2.1.1  第一个NDK程序19

2.1.2  动态调试NDK程序20

2.1.3  交叉编译24

2.2  LLDB动态调试(三方)Android SO27

2.3  Capstone/Keystone/Unicorn(反)汇编器30

2.4  Frida动态调试Android Native部分32

2.5  Frida Instruction模块动态反汇编32

2.6  本章小结34

第3章  静态分析工具的安装和基本使用35

3.1  使用objdump反汇编目标文件命令显示二进制文件信息35

3.2  使用010 Editor解析SO文件显示二进制基本信息38

3.3  Ghidra/JEB/IDA高级反汇编器40

3.4  Binary Ninja新晋反汇编器47

3.5  本章小结51

第4章  C算法开发及模拟执行52

4.1  Native层密码学套件移植开发52

4.2  Frida Hook/主动调用执行算法62

4.3  使用AndroidNativeEmu模拟执行算法63

4.4  本章小结64

第5章  动态调试:GDB动态调试、Hyperpwn/(内存)断点/栈帧65

5.1  GDB C/S的调试架构65

5.2  将App编译成带调试符号的SO文件67

5.3  使用Android调试模式来启动App69

5.4  Hyperpwn调试入门73

5.5  Objection+Frida+Hyperpwn联合调试79

5.6  本章小结82

第6章  汇编开发:ARM汇编原理/流程/调用约定/动态调试83

6.1  Android和ARM处理器83

6.2  ARM原生程序的生成过程84

6.3  汇编语言简介87

6.3.1  汇编程序组成87

6.3.2  ARM处理器的工作模式与寻址方式91

6.4  ARM汇编指令及动态调试分析94

6.5  多功能CPU模拟器:Unicorn109

6.6  本章小结110

第7章  逆向分析:ELF文件结构、节/区/表/段/符号/链接器111

7.1  操作系统ELF文件动态加载的基础知识111

7.1.1  从几个问题入手111

7.1.2  操作系统的核心概念112

7.2  可执行文件的加载过程114

7.3  使用Unidbg模拟执行SO文件中的函数116

7.3.1  Unidbg框架的基本运作原理117

7.3.2  Unidbg各组件的基本功能119

7.3.3  追踪SO文件的加载与解析流程123

7.4  本章小结126

第8章  反编译工具IDA127

8.1  IDA入门127

8.1.1  IDA的安装与使用127

8.1.2  IDA插件的使用129

8.1.3  IDA反汇编介绍130

8.1.4  IDA分析与Frida Hook结合136

8.2  动静态SO算法还原与脱机137

8.2.1  IDA动态调试SO算法137

8.2.2  Keypatch原理/实战硬改算法逻辑149

8.3  本章小结150

第9章  JNI接口初识151

9.1  JNI及其工作原理151

9.1.1  NDK简介151

9.1.2  JNI——NDK具体的实现接口153

9.2  Frida手动追踪JNI接口163

9.3  jnitrace自动追踪JNI167

9.4  JNI接口大横评168

9.4.1  Frida Hook并主动调用169

9.4.2  jnitrace179

9.4.3  ExAndroidNativeEmu179

9.5  本章小结183

第10章  JNI的特性:Java/Native互相调用、反射/全局/局部引用184

10.1  反射“滥用”类和对象的基本属性184

10.1.1  反射的概念与相关的Java类184

10.1.2  实例:Xposed刷机和编译使用的插件186

10.1.3  反射设置/调用类和对象的域和方法190

10.1.4  来自Native层的反射调用追踪192

10.2  设计简单风控SDK并主动调用观察效果194

10.2.1  收集设备关键信息的常见方向和思路194

10.2.2  Native层使用反射调用Java层API获取设备信息195

10.3  本章小结208

第11章  onCreate进行Native化和引用209

11.1  将onCreate函数Native化209

11.2  Java内存管理220

11.2.1  C和Java内存管理的差异220

11.2.2  JNI的三种引用220

11.3  本章小结221

第12章  JNI动静态绑定和追踪222

12.1  Dalvik下动静态注册流程追踪222

12.2  ART下动静态注册流程追踪228

12.3  本章小结237

第13章  MD5算法分析和魔改238

13.1  MD5算法的描述240

13.2  MD5工程实现246

13.3  哈希算法逆向分析248

13.3.1  Findcrypt/Signsrch源码剖析248

13.3.2  算法识别插件的核心原理与改进方向254

13.3.3  使用findhash插件检测哈希算法255

13.3.4  SHA1算法逆向分析实战258

13.4  哈希算法的扩展延伸264

13.4.1  哈希算法的特征264

13.4 2  大厂最爱:HMAC-MD5/SHA1详解266

13.5  Frida MemoryAccessMonitor的使用场景270

13.6  本章小结277

第14章  对称加密算法逆向分析278

14.1  DES详解278

14.1.1  分组密码的填充与工作模式286

14.1.2  三重DES287

14.2  AES289

14.2.1  AES初识289

14.2.2  深入了解AES296

14.2.3  Unicorn辅助分析302

14.2.4  AES的工作模式305

14.3  本章小结312

第15章  读懂DEX并了解DexDump解析过程313

15.1  环境及开发工具313

15.2  认识DEX文件结构314

15.2.1  DEX文件格式概貌314

15.2.2  DEX文件格式项目搭建315

15.2.3  DEX文件详细分析316

15.3  DexDump解析330

15.3.1  ULEB128格式讲解330

15.3.2  DexDump解析过程333

15.4  本章小结338

第16章  ELF文件格式解读及其生成过程339

16.1  ELF文件头339

16.1.1  分析环境搭建340

16.1.2  elf_header341

16.1.3  program_header_table344

16.1.4  section_header_table344

16.2  ELF可执行文件的生成过程与执行视图352

16.2.1  ARM可执行文件的生成过程352

16.2.2  执行视图357

16.2.3  GOT和PLT359

16.3  本章小结365

第17章  高版本Android函数地址索引彻底解决方案366

17.1  不同版本对于动态链接库的调用对比366

17.2  高版本加载SO文件367

17.2.1  自定义库查看库函数的偏移367

17.2.2  自定义库实现的背景368

17.2.3  自定义库findsym的实现370

17.3  SO符号地址寻找372

17.3.1  通过节头获取符号地址372

17.3.2  模仿Android通过哈希寻找符号374

17.4  本章小结377

第18章  从findExportByName源码分析到anti-frida新思路378

18.1  两种模式下anti-frida的演示378

18.1.1  Frida attach模式下的anti-frida378

18.1.2  Frida spawn模式下的anti-frida380

18.2  源码分析383

18.2.1  Frida编译384

18.2.2  源码追踪分析385

18.3  本章小结388

第19章  PLT和GOT的Hook389

19.1  GOT的Hook389

19.1.1  根据节头实现Hook392

19.1.2  根据程序头来实现Hook395

19.2  PLT的Hook397

19.2.1  根据节头来实现Hook397

19.2.2  根据程序头来实现Hook403

19.3  从GOT和PLT的Hook到xHook原理剖析406

19.3.1  xHook的优点406

19.3.2  源码赏析406

19.4  本章小结407

第20章  番外篇——另类方法寻找SO文件首地址408

20.1  项目搭建408

20.2  封装成库413

20.3  通过soinfo的映射表遍历符号415

20.4  dlopen和dlsym获取符号地址417

20.5  本章小结418

第21章  Java Hook的原理419

21.1  Java函数源码追踪419

21.1.1  什么是Java Hook419

21.1.2  源码追踪420

21.2  Java Hook实践424

21.3  Frida中Java Hook的实现429

21.3.1  Frida perform源码追踪429

21.3.2  Frida implementation源码追踪435

21.4  本章小结437

第22章  inline Hook中用到的汇编指令438

22.1  两种Hook方式的介绍438

22.2  定向跳转441

22.3  寄存器保存445

22.3.1  寄存器选择445

22.3.2  3种寄存器赋值的方案446

22.4  本章小结449

第23章  基于Capstone处理特殊指令450

23.1  编译Capstone并配置测试环境450

23.2  Capstone官方测试案例演示453

23.3  自定义汇编翻译函数456

23.4  基于Capstone修正指令459

23.4.1  指令修复的目的459

23.4.2  修复指令的原理460

23.4.3  指令修复的种类460

23.5  本章小结461

第24章  inline Hook框架集成462

24.1  inline Hook框架测试462

24.2  结合Capstone框架467

24.3  本章小结469

第25章  通杀的检测型框架r0Invoke470

25.1  r0Invoke牛刀小试脱壳fulao2471

25.1.1  APK静态分析471

25.1.2  使用r0Invoke脱壳471

25.1.3  脱壳操作472

25.2  r0Invoke进阶:跟踪所有运行在ART下的Java函数477

25.3  r0Invoke主动调用Native函数并且修改参数479

25.4  r0Invoke Trace高度混淆OLLVM482

25.5  本章小结484

第26章  SO文件加载流程分析与注入实战485

26.1  SO文件的加载方式485

26.2  SO文件加载流程487

26.3  Frida Hook dlopen和android_dlopen_ext491

26.4  编译AOSP注入SO496

26.4.1  直接加载sdcard中的SO文件497

26.4.2  加载私有目录的SO文件498

26.4.3  编译AOSP注入SO文件500

26.5  注入优化502

26.6  本章小结504

本文摘自《Frida Android SO逆向深入实践》,获出版社和作者授权发布。

Frida Android SO逆向深入实践——京东

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-30 07:46:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-30 07:46:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-30 07:46:03       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-30 07:46:03       20 阅读

热门阅读

  1. 一台服务器上如何安装2个版本的达梦数据库

    2024-01-30 07:46:03       43 阅读
  2. Aspose.Words简单介绍

    2024-01-30 07:46:03       32 阅读
  3. linux 脚本 正则表达式

    2024-01-30 07:46:03       36 阅读
  4. opencv-python 视频读取: VideoCapture.get()参数详解

    2024-01-30 07:46:03       31 阅读
  5. Linux下Mysql的小版本升级

    2024-01-30 07:46:03       38 阅读
  6. TrimLeft()和TrimRight()详解

    2024-01-30 07:46:03       31 阅读