وبلاگ بلیان

Frida Android SO逆向深入实践

معرفی کتاب «Frida Android SO逆向深入实践» نوشتهٔ 陈佳林، منتشرشده توسط نشر 清华大学出版社 در سال 2023. این کتاب در فرمت pdf، زبان zh ارائه شده است. «Frida Android SO逆向深入实践» در دستهٔ بدون دسته‌بندی قرار دارد.

《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层的初、中级读者阅读。 封面 扉页 内容简介 版权页 前言 目录 第1章 基本开发环境配置 1.1 虚拟机环境搭建 1.2 逆向环境搭建 1.2.1 Android Studio安装NDK编译套件 1.2.2 ADB的配置和使用 1.2.3 Python版本管理 1.2.4 移动设备环境准备 1.2.5 Frida版本管理 1.2.6 Objection的安装和使用 1.3 Frida基本源码开发环境搭建 1.4 初识NDK 1.5 其他工具 1.6 本章小结 第2章 Android SO动态调试入门 2.1 Android SO基本动态分析调试 2.1.1 第一个NDK程序 2.1.2 动态调试NDK程序 2.1.3 交叉编译 2.2 LLDB动态调试(三方)Android SO 2.3 Capstone/Keystone/Unicorn(反)汇编器 2.4 Frida动态调试Android Native部分 2.5 Frida Instruction模块动态反汇编 2.6 本章小结 第3章 静态分析工具的安装和基本使用 3.1 使用objdump反汇编目标文件命令显示二进制文件信息 3.2 使用010 Editor解析SO文件显示二进制基本信息 3.3 Ghidra/JEB/IDA高级反汇编器 3.4 Binary Ninja新晋反汇编器 3.5 本章小结 第4章 C算法开发及模拟执行 4.1 Native层密码学套件移植开发 4.2 Frida Hook/主动调用执行算法 4.3 使用AndroidNativeEmu模拟执行算法 4.4 本章小结 第5章 动态调试:GDB动态调试、Hyperpwn/(内存)断点/栈帧 5.1 GDB C/S的调试架构 5.2 将App编译成带调试符号的SO文件 5.3 使用Android调试模式来启动App 5.4 Hyperpwn调试入门 5.5 Objection Frida Hyperpwn联合调试 5.6 本章小结 第6章 汇编开发:ARM汇编原理/流程/调用约定/动态调试 6.1 Android和ARM处理器 6.2 ARM原生程序的生成过程 6.3 汇编语言简介 6.3.1 汇编程序组成 6.3.2 ARM处理器的工作模式与寻址方式 6.4 ARM汇编指令及动态调试分析 6.5 多功能CPU模拟器:Unicorn 6.6 本章小结 第7章 逆向分析:ELF文件结构、节/区/表/段/符号/链接器 7.1 操作系统ELF文件动态加载的基础知识 7.1.1 从几个问题入手 7.1.2 操作系统的核心概念 7.2 可执行文件的加载过程 7.3 使用Unidbg模拟执行SO文件中的函数 7.3.1 Unidbg框架的基本运作原理 7.3.2 Unidbg各组件的基本功能 7.3.3 追踪SO文件的加载与解析流程 7.4 本章小结 第8章 反编译工具IDA 8.1 IDA入门 8.1.1 IDA的安装与使用 8.1.2 IDA插件的使用 8.1.3 IDA反汇编介绍 8.1.4 IDA分析与Frida Hook结合 8.2 动静态SO算法还原与脱机 8.2.1 IDA动态调试SO算法 8.2.2 Keypatch原理/实战硬改算法逻辑 8.3 本章小结 第9章 JNI接口初识 9.1 JNI及其工作原理 9.1.1 NDK简介 9.1.2 JNI——NDK具体的实现接口 9.2 Frida手动追踪JNI接口 9.3 jnitrace自动追踪JNI 9.4 JNI接口大横评 9.4.1 Frida Hook并主动调用 9.4.2 jnitrace 9.4.3 ExAndroidNativeEmu 9.5 本章小结 第10章 JNI的性:Java/Native互相调用、反射/全局/局部引用 10.1 反射“滥用”类和对象的基本属性 10.1.1 反射的概念与相关的Java类 10.1.2 实例:Xposed刷机和编译使用的插件 10.1.3 反射设置/调用类和对象的域和方法 10.1.4 来自Native层的反射调用追踪 10.2 设计简单风控SDK并主动调用观察效果 10.2.1 收集设备关键信息的常见方向和思路 10.2.2 Native层使用反射调用Java层API获取设备信息 10.3 本章小结 第11章 onCreate进行Native化和引用 11.1 将onCreate函数Native化 11.2 Java内存管理 11.2.1 C和Java内存管理的差异 11.2.2 JNI的三种引用 11.3 本章小结 第12章 JNI动静态绑定和追踪 12.1 Dalvik下动静态注册流程追踪 12.2 ART下动静态注册流程追踪 12.3 本章小结 第13章 MD5算法分析和魔改 13.1 MD5算法的描述 13.2 MD5工程实现 13.3 哈希算法逆向分析 13.3.1 Findcrypt/Signsrch源码剖析 13.3.2 算法识别插件的核心原理与改进方向 13.3.3 使用findhash插件检测哈希算法 13.3.4 SHA1算法逆向分析实战 13.4 哈希算法的扩展延伸 13.4.1 哈希算法的征 13.4 2 大厂最爱:HMAC-MD5/SHA1详解 13.5 Frida MemoryAccessMonitor的使用场景 13.6 本章小结 第14章 对称加密算法逆向分析 14.1 DES详解 14.1.1 分组密码的填充与工作模式 14.1.2 三重DES 14.2 AES 14.2.1 AES初识 14.2.2 深入了解AES 14.2.3 Unicorn辅助分析 14.2.4 AES的工作模式 14.3 本章小结 第15章 读懂DEX并了解DexDump解析过程 15.1 环境及开发工具 15.2 认识DEX文件结构 15.2.1 DEX文件格式概貌 15.2.2 DEX文件格式项目搭建 15.2.3 DEX文件详细分析 15.3 DexDump解析 15.3.1 ULEB128格式讲解 15.3.2 DexDump解析过程 15.4 本章小结 第16章 ELF文件格式解读及其生成过程 16.1 ELF文件头 16.1.1 分析环境搭建 16.1.2 elf_header 16.1.3 program_header_table 16.1.4 section_header_table 16.2 ELF可执行文件的生成过程与执行视图 16.2.1 ARM可执行文件的生成过程 16.2.2 执行视图 16.2.3 GOT和PLT 16.3 本章小结 第17章 高版本Android函数地址索引彻底解决方案 17.1 不同版本对于动态链接库的调用对比 17.2 高版本加载SO文件 17.2.1 自定义库查看库函数的偏移 17.2.2 自定义库实现的背景 17.2.3 自定义库findsym的实现 17.3 SO符号地址寻找 17.3.1 通过节头获取符号地址 17.3.2 模仿Android通过哈希寻找符号 17.4 本章小结 第18章 从findExportByName源码分析到anti-frida新思路 18.1 两种模式下anti-frida的演示 18.1.1 Frida attach模式下的anti-frida 18.1.2 Frida spawn模式下的anti-frida 18.2 源码分析 18.2.1 Frida编译 18.2.2 源码追踪分析 18.3 本章小结 第19章 PLT和GOT的Hook 19.1 GOT的Hook 19.1.1 根据节头实现Hook 19.1.2 根据程序头来实现Hook 19.2 PLT的Hook 19.2.1 根据节头来实现Hook 19.2.2 根据程序头来实现Hook 19.3 从GOT和PLT的Hook到xHook原理剖析 19.3.1 xHook的优点 19.3.2 源码赏析 19.4 本章小结 第20章 番外篇——另类方法寻找SO文件首地址 20.1 项目搭建 20.2 封装成库 20.3 通过soinfo的映射表遍历符号 20.4 dlopen和dlsym获取符号地址 20.5 本章小结 第21章 Java Hook的原理 21.1 Java函数源码追踪 21.1.1 什么是Java Hook 21.1.2 源码追踪 21.2 Java Hook实践 21.3 Frida中Java Hook的实现 21.3.1 Frida perform源码追踪 21.3.2 Frida implementation源码追踪 21.4 本章小结 第22章 inline Hook中用到的汇编指令 22.1 两种Hook方式的介绍 22.2 定向跳转 22.3 寄存器保存 22.3.1 寄存器选择 22.3.2 3种寄存器赋值的方案 22.4 本章小结 第23章 基于Capstone处理殊指令 23.1 编译Capstone并配置测试环境 23.2 Capstone官方测试案例演示 23.3 自定义汇编翻译函数 23.4 基于Capstone修正指令 23.4.1 指令修复的目的 23.4.2 修复指令的原理 23.4.3 指令修复的种类 23.5 本章小结 第24章 inline Hook框架集成 24.1 inline Hook框架测试 24.2 结合Capstone框架 24.3 本章小结 第25章 通杀的检测型框架r0Invoke 25.1 r0Invoke牛刀小试脱壳fulao2 25.1.1 APK静态分析 25.1.2 使用r0Invoke脱壳 25.1.3 脱壳操作 25.2 r0Invoke进阶:跟踪所有运行在ART下的Java函数 25.3 r0Invoke主动调用Native函数并且修改参数 25.4 r0Invoke Trace高度混淆OLLVM 25.5 本章小结 第26章 SO文件加载流程分析与注入实战 26.1 SO文件的加载方式 26.2 SO文件加载流程 26.3 Frida Hook dlopen和android_dlopen_ext 26.4 编译AOSP注入SO 26.4.1 直接加载sdcard中的SO文件 26.4.2 加载私有目录的SO文件 26.4.3 编译AOSP注入SO文件 26.5 注入优化 26.6 本章小结 封面 扉页 内容简介 版权页 前言 目录 第1章 基本开发环境配置 1.1 虚拟机环境搭建 1.2 逆向环境搭建 1.3 Frida基本源码开发环境搭建 1.4 初识NDK 1.5 其他工具 1.6 本章小结 第2章 Android SO动态调试入门 2.1 Android SO基本动态分析调试 2.2 LLDB动态调试(三方)Android SO 2.3 Capstone/Keystone/Unicorn(反)汇编器 2.4 Frida动态调试Android Native部分 2.5 Frida Instruction模块动态反汇编 2.6 本章小结 第3章 静态分析工具的安装和基本使用 3.1 使用objdump反汇编目标文件命令显示二进制文件信息 3.2 使用010 Editor解析SO文件显示二进制基本信息 3.3 Ghidra/JEB/IDA高级反汇编器 3.4 Binary Ninja新晋反汇编器 3.5 本章小结 第4章 C算法开发及模拟执行 4.1 Native层密码学套件移植开发 4.2 Frida Hook/主动调用执行算法 4.3 使用Android Native Emu模拟执行算法 4.4 本章小结 第5章 动态调试:GDB动态调试、Hyperpwn/(内存)断点/栈帧 5.1 GDB C/S的调试架构 5.2 将App编译成带调试符号的SO文件 5.3 使用Android调试模式来启动App 5.4 Hyperpwn调试入门 5.5 Objection+Frida+Hyperpwn联合调试 5.6 本章小结 第6章 汇编开发:ARM汇编原理/流程/调用约定/动态调试 6.1 Android和ARM处理器 6.2 ARM原生程序的生成过程 6.3 汇编语言简介 6.4 ARM汇编指令及动态调试分析 6.5 多功能CPU模拟器:Unicorn 6.6 本章小结 第7章 逆向分析:ELF文件结构、节/区/表/段/符号/链接器 7.1 操作系统ELF文件动态加载的基础知识 7.2 可执行文件的加载过程 7.3 使用Unidbg模拟执行SO文件中的函数 7.4 本章小结 第8章 反编译工具IDA 8.1 IDA入门 8.2 动静态SO算法还原与脱机 8.3 本章小结 第9章 JNI接口初识 9.1 JNI及其工作原理 9.2 Frida手动追踪JNI接口 9.3 jnitrace自动追踪JNI 9.4 JNI接口大横评 9.5 本章小结 第10章 JNI的特性:Java/Native互相调用、反射/全局/局部引用 10.1 反射“滥用”类和对象的基本属性 10.2 设计简单风控SDK并主动调用观察效果 10.3 本章小结 第11章 onCreate进行Native化和引用 11.1 将onCreate函数Native化 11.2 Java内存管理 11.3 本章小结 第12章 JNI动静态绑定和追踪 12.1 Dalvik下动静态注册流程追踪 12.2 ART下动静态注册流程追踪 12.3 本章小结 第13章 MD5算法分析和魔改 13.1 MD5算法的描述 13.2 MD5工程实现 13.3 哈希算法逆向分析 13.4 哈希算法的扩展延伸 13.5 Frida Memory Access Monitor的使用场景 13.6 本章小结 第14章 对称加密算法逆向分析 14.1 DES详解 14.2 AES 14.3 本章小结 第15章 读懂DEX并了解Dex Dump解析过程 15.1 环境及开发工具 15.2 认识DEX文件结构 15.3 Dex Dump解析 15.4 本章小结 第16章 ELF文件格式解读及其生成过程 16.1 ELF文件头 16.2 ELF可执行文件的生成过程与执行视图 16.3 本章小结 第17章 高版本Android函数地址索引彻底解决方案 17.1 不同版本对于动态链接库的调用对比 17.2 高版本加载SO文件 17.3 SO符号地址寻找 17.4 本章小结 第18章 从find Export By Name源码分析到anti-frida新思路 18.1 两种模式下anti-frida的演示 18.2 源码分析 18.3 本章小结 第19章 PLT和GOT的Hook 19.1 GOT的Hook 19.2 PLT的Hook 19.3 从GOT和PLT的Hook到xHook原理剖析 19.4 本章小结 第20章 番外篇——另类方法寻找SO文件首地址 20.1 项目搭建 20.2 封装成库 20.3 通过soinfo的映射表遍历符号 20.4 dlopen和dlsym获取符号地址 20.5 本章小结 第21章 Java Hook的原理 21.1 Java函数源码追踪 21.2 Java Hook实践 21.3 Frida中Java Hook的实现 21.4 本章小结 第22章 inline Hook中用到的汇编指令 22.1 两种Hook方式的介绍 22.2 定向跳转 22.3 寄存器保存 22.4 本章小结 第23章 基于Capstone处理特殊指令 23.1 编译Capstone并配置测试环境 23.2 Capstone官方测试案例演示 23.3 自定义汇编翻译函数 23.4 基于Capstone修正指令 23.5 本章小结 第24章 inline Hook框架集成 24.1 inline Hook框架测试 24.2 结合Capstone框架 24.3 本章小结 第25章 通杀的检测型框架r0Invoke 25.1 r0Invoke牛刀小试脱壳fulao2 25.2 r0Invoke进阶:跟踪所有运行在ART下的Java函数 25.3 r0Invoke主动调用Native函数并且修改参数 25.4 r0Invoke Trace高度混淆OLLVM 25.5 本章小结 第26章 SO文件加载流程分析与注入实战 26.1 SO文件的加载方式 26.2 SO文件加载流程 26.3 Frida Hook dlopen和android_dlopen_ext 26.4 编译AOSP注入SO 26.5 注入优化 26.6 本章小结 正文结束 封底
دانلود کتاب Frida Android SO逆向深入实践