Frida的使用
在 13.4 节和 13.5 节,我们了解了 Xposed 的基本用法,可以说只要找到位置,就能通过 Hook 拿到数据。然而 Xposed 是具有局限性的,例如它只能Hook Java 层的逻辑,不能 Hook Native 层的。另外,整个 Xposed 模块的逻辑需要使用 Java 语言实现,如果我们对 Java 不熟悉,那么实现起来会有一定难度。
什么是 Native 层的逻辑呢?简单理解这就是使用 C/C++ 编写的一些逻辑。假设某个 App 中的某些算法是用 C/C++ 实现的,它们最终会被编译到一个 so 格式的文件中,Java 层可以直接调用该 so 文件执行对应的加密算法,而无须知道文件内部的具体逻辑。Xposed 是用 Java 实现的,可以 Hook Java 层的逻辑,但对于 Hook Native 层的逻辑,就无能为力了。
本节我们就介绍另外—个简单好用的 Hook 神器——Frida! 如果要用几个词描述 Frida,那就是强大、方便、灵活。
Frida的简介
Frida 是一个基于 Python 和 JavaScript 的 Hook 与调试框架,是一款易用的跨平台 Hook 工具,无论 Java 层的逻辑,还是 Native 层的逻辑,它都可以 Hook。Frida 可以把代码插入原生 App 的内存空间,然后动态地监视和修改其行为,支持 Windows、Mac、Linux、Android、iOS 全平台。
Frida 是使用 Python 注入 JavaScript 脚本实现的,可以通过 JavaScript 脚本操作手机上的 Java 代码,Python 脚本和 JavaScript 脚本的编写跟执行是在电脑上进行的,而且无须在手机上额外安装 APP 和插件,所以整体实现起来更加灵活和轻量级,调试起来也更加方便。而 Xposed 需要使用 Java 实现一个模块,然后编译并安装到手机上,灵活性相对差一些,但如果要做持久化的 Hook,还是推荐使用 Xposed。
下面简单列一下 Xposed 和 Frida 的优缺点:
总结
本节我们使用 Frida Hook 了 Java 层和 Native 层的逻辑,通过这两个基本的案例,相信大家可以初步体会到 Frida 的基本操作和 API 的编写方法。当然,Frida 能做的远远不止这些,更多的 API 使用方法可以参考官方文档 https://frida.re/docs/home/ 。
本节内容的参考来源。
-
Frida 官方文档。
-
CSDN 网站上 “Android逆向之旅—Hook神器 Frida 使用详解” 文章。
最后,如果你想深入学习 Frida,这里推荐一本书——陈佳林(网名 r0ysue)的《安卓Frida逆向与抓包实战》,这本书讲述了利用 Frida 进行 Android App 逆向和抓包的相关知识,可以学习一下。