图书前言

前    言

熟悉笔者的读者都知道,2021年出版的《安卓Frida逆向与抓包实战》和2022年出版的《安卓Frida逆向与协议分析》主要介绍了Frida框架在Android平台Java层的工作和作用,包括但不限于Hook、抓包、算法还原、协议分析等领域。Frida框架独特的自动化和规模化逆向功能大大提高了安全从业者的工作效率。它可以使用Python、JavaScript等语言搭建综合性应用安全审计和隐私监控框架。据笔者所知,老牌的安全工具MobSF和Inspackage都将其主要核心动态分析监控代码由Xposed转移到了Frida,足以说明Frida已经成为事实上Java层分析的第一工具。

与此同时,安卓移动端还有很多应用使用C/C++语言进行开发,将逻辑和算法打包进应用包中。这样做带来的好处是:

(1)运行效率和速度的显著提升。相比Java语言的虚拟机解释执行,C/C++语言编译生成的SO文件是直接运行在CPU上的,减少了解释执行的效率损耗,从而使运行速度得到质的提升。例如,我们常用的微信语音和视频功能都是由C/C++代码开发的,这样在较旧的手机上也能有不错的性能表现。

(2)更加安全。Java语言生成的Dex几乎没有安全性可言,一旦被反编译器反编译,其源码几乎等同于完全暴露。相比之下,C/C++语言反编译起来难度较大,即使生成的伪代码也晦涩难懂。此外,经过多年的发展,C/C++代码保护工具和技术更为成熟,例如花指令、强大的混淆、虚拟机等,将算法与逻辑实现放到C/C++代码中可以劝退大多数新手。

因此,安全工具和安全产品几乎全都是由C/C++代码开发的,先将代码编译成SO文件,再在应用中加载这个SO文件,以提供相应的安全功能。作为安全或逆向工程师,学习以C/C++为代表的本地Native开发和JNI(Java与C之间的转换层)开发,就成为必须掌握的技能栈之一。

由此衍生的反编译、动静态调试分析、算法开发、模拟执行、JNI开发、Frida Hook C/C++或JNI、汇编与ELF文件格式、Android源码中的JNI绑定、Native层算法开发及结合Frida的逆向分析技巧等技术,均在本书中有详细的介绍、原理阐述和案例的综合实战。

虽然对于大多数新手来说,SO中的ARM、JNI、算法等已经足够复杂,但这些实际上都还没有涉及更加深入的算法保护机制。在加入OLLVM、VMProtect等机制后的算法分析逆向还原才是真正的噩梦。此外,本书还介绍了忽略算法实现细节而直接调用算法获取结果的Frida RPC机制,帮助只需要结果而不需要细节的读者来翻越强混淆的大山。

Frida不仅在Java平台如鱼得水,而且在Native原生开发的ARM架构上也表现出色。实际上,Frida已经渗透到SO生命中的各个方面,包括进程、线程、指令集、链接器、数据结构、参数传递、内存布局、读写执行、块和执行流追踪等。Frida提供了独立而完善的API,学好Frida对掌握SO的逆向工程也会起到事半功倍的效果。

本书内容介绍

本书共26章,主要内容如下:

第1章介绍基本开发环境配置。

第2章介绍安卓SO动态调试入门。

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

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

第5章介绍动态调试:GDB动态调试、HyperPwn/(内存)断点/栈帧。

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

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

第8章介绍反编译工具IDA。

第9章介绍JNI接口初识。

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

第11章介绍onCreate进行Native化和引用。

第12章介绍JNI动静态绑定和追踪。

第13章介绍MD5算法分析和魔改。

第14章介绍对称加密算法逆向分析。

第15章介绍读懂Dex并了解DexDump解析过程。

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

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

第18章介绍从findExportByName源码分析到anti-frida的新思路。

第19章介绍PLT表和GOT表Hook。

第20章介绍番外篇—另类方法寻找首地址。

第21章介绍Java Hook原理。

第22章介绍inline Hook中用到的汇编指令。

第24章介绍基于capstone处理特殊指令。

第25章介绍通杀的检测型框架r0Invoke。

第26章介绍SO加载流程分析与注入实战。

本书按照由易到难、由浅入深的方式编写,定位于Native层的初、中级内容。希望能够抛砖引玉,对读者学习SO逆向工程有所帮助。

配书资源

为方便读者使用本书,本书还提供了代码源文件,读者需要用微信扫描下面的二维码获取。如果阅读中发现问题或疑问,请联系booksaga@126.com,邮件主题写“Frida Android SO逆向深入实践”。

         

读者对象

?Android应用安全工程师

?Android逆向分析工程师

?爬虫工程师

?大数据收集和分析工程师

书本是静止的,知识是流动的。在本书写作、编撰、排版的过程中,Frida已经升级到了15/16版本,Android也升级到了13版本。但本书中的代码都是可以在特定版本的Frida和Android中成功运行的。同时,Android逆向实践性极强,读者在动手实践的过程中难免会产生各式各样的疑问。为此,笔者特地准备了GitHub仓库更新和勘误,读者有疑问可以在仓库的issue页面提出,笔者会尽力解答和修正。

希望可以与读者一起学习和进步。

编  者  

2023年8月