2.4 本章小结_深入理解Android:卷2

新书速览|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

逆向环境搭建3

Android Studio安装NDK编译套件3

ADB的配置和使用5

Python版本管理6

移动设备环境准备7

Frida版本管理7

Objection的安装和使用8

Frida基本源码开发环境搭建

初识NDK12

其他工具

本章小结

第2章 Android SO动态调试入门

Android SO基本动态分析调试

第一个NDK程序

动态调试NDK程序

交叉编译

LLDB动态调试(三方)Android SO27

Capstone/Keystone/Unicorn(反)汇编器

Frida动态调试Android Native部分

Frida Instruction模块动态反汇编

本章小结

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

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

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

Ghidra/JEB/IDA高级反汇编器

Binary Ninja新晋反汇编器

本章小结

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

Native层密码学套件移植开发

Frida Hook/主动调用执行算法

使用AndroidNativeEmu模拟执行算法

本章小结

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

GDB C/S的调试架构

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

使用Android调试模式来启动App69

Hyperpwn调试入门

Objection+Frida+Hyperpwn联合调试

本章小结

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

Android和ARM处理器

ARM原生程序的生成过程

汇编语言简介

汇编程序组成

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

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

多功能CPU模拟器:Unicorn109

本章小结

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

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

从几个问题入手

操作系统的核心概念

可执行文件的加载过程

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

Unidbg框架的基本运作原理

Unidbg各组件的基本功能

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

本章小结

第8章 反编译工具IDA127

IDA入门

IDA的安装与使用

IDA插件的使用

IDA反汇编介绍

IDA分析与Frida Hook结合

动静态SO算法还原与脱机

IDA动态调试SO算法

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

本章小结

第9章 JNI接口初识

JNI及其工作原理

NDK简介

JNI——NDK具体的实现接口

Frida手动追踪JNI接口

jnitrace自动追踪JNI167

JNI接口大横评

Frida Hook并主动调用

jnitrace179

ExAndroidNativeEmu179

本章小结

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

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

反射的概念与相关的Java类

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

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

来自Native层的反射调用追踪

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

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

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

本章小结

第章 onCreate进行Native化和引用

将onCreate函数Native化

Java内存管理

C和Java内存管理的差异

JNI的三种引用

本章小结

第章 JNI动静态绑定和追踪

Dalvik下动静态注册流程追踪

ART下动静态注册流程追踪

本章小结

第章 MD5算法分析和魔改

MD5算法的描述

MD5工程实现

哈希算法逆向分析

Findcrypt/Signsrch源码剖析

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

使用findhash插件检测哈希算法

SHA1算法逆向分析实战

哈希算法的扩展延伸

哈希算法的特征

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

Frida MemoryAccessMonitor的使用场景

本章小结

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

DES详解

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

三重DES287

AES289

AES初识

深入了解AES296

Unicorn辅助分析

AES的工作模式

本章小结

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

环境及开发工具

认识DEX文件结构

DEX文件格式概貌

DEX文件格式项目搭建

DEX文件详细分析

DexDump解析

ULEB128格式讲解

DexDump解析过程

本章小结

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

ELF文件头

分析环境搭建

elf_header341

program_header_table344

section_header_table344

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

ARM可执行文件的生成过程

执行视图

GOT和PLT359

本章小结

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

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

高版本加载SO文件

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

自定义库实现的背景

自定义库findsym的实现

SO符号地址寻找

通过节头获取符号地址

模仿Android通过哈希寻找符号

本章小结

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

两种模式下anti-frida的演示

Frida attach模式下的anti-frida378

Frida spawn模式下的anti-frida380

源码分析

Frida编译

源码追踪分析

本章小结

第章 PLT和GOT的Hook389

GOT的Hook389

根据节头实现Hook392

根据程序头来实现Hook395

PLT的Hook397

根据节头来实现Hook397

根据程序头来实现Hook403

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

xHook的优点

源码赏析

本章小结

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

项目搭建

封装成库

通过soinfo的映射表遍历符号

dlopen和dlsym获取符号地址

本章小结

第章 Java Hook的原理

Java函数源码追踪

什么是Java Hook419

源码追踪

Java Hook实践

Frida中Java Hook的实现

Frida perform源码追踪

Frida implementation源码追踪

本章小结

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

两种Hook方式的介绍

定向跳转

寄存器保存

寄存器选择

种寄存器赋值的方案

本章小结

第章 基于Capstone处理特殊指令

编译Capstone并配置测试环境

Capstone官方测试案例演示

自定义汇编翻译函数

基于Capstone修正指令

指令修复的目的

修复指令的原理

指令修复的种类

本章小结

第章 inline Hook框架集成

inline Hook框架测试

结合Capstone框架

本章小结

第章 通杀的检测型框架r0Invoke470

r0Invoke牛刀小试脱壳fulao2471

APK静态分析

使用r0Invoke脱壳

脱壳操作

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

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

r0Invoke Trace高度混淆OLLVM482

本章小结

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

SO文件的加载方式

SO文件加载流程

Frida Hook dlopen和android_dlopen_ext491

编译AOSP注入SO496

直接加载sdcard中的SO文件

加载私有目录的SO文件

编译AOSP注入SO文件

注入优化

本章小结

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

原文链接:,转发请注明来源!