一,Frida 简介
Frida是一个基于Python和JavaScript的Hook与调试框架,无论Java层的逻辑,还是Native层的逻辑,它都可以Hook(区别Xposed只能Hook Java层的逻辑)。
什么是Native层的逻辑呢?简单理解就是使用C/C++编写的一些逻辑。假设某个App中的某些算法是用C/C++实现的,它们最终会被编译到一个so格式的文件中,Java层可以直接调用该so文件执行对应的加密算法,而无需知道文件内部的具体逻辑。
Frida可以把代码插入原生App的内存空间,然后动态地监视和修改其行为,支持Windows、Mac、Linux、Android、iOS全平台。
Frida是使用Python注入JavaScript脚本实现的,可以通过JavaScript脚本操作手机上的Java代码,Python脚本和JavaScript脚本的编写和执行是在电脑上进行的,而且无需在手机上额外安装App和插件,所以整体实现起来灵活轻量级,调试比较方便。而Xposed需要使用Java实现一个模块,然后编译并安装到手机上,灵活性相对差一些,但如果要做持久化Hook,还是推荐使用Xposed。

概念补充:
Frida注入的原理主要基于动态二进制插桩(DBI)技术,以下是详细的解释:
一、Frida的基本组成
Frida分为两部分:服务端和客户端。服务端运行在目标设备上(如手机或模拟器),通过注入进程的方式来实现劫持应用函数;客户端则运行在系统机器上(如PC),用于编写脚本与服务端进行通信。
二、Frida注入的实现过程
安装Frida-server:
在目标设备上安装Frida-server程序。这通常是一个二进制文件,需要根据目标设备的操作系统和架构进行选择。
启动Frida-server服务:
通过命令行或脚本启动目标设备上的Frida-server服务。同时,需要将目标设备的端口转发到PC端,以便PC端的客户端可以与Frida-server进行通信。
编写客户端脚本:
在PC端使用Python或Node.js编写脚本,脚本中需要hook的代码采用JavaScript语言编写。这是因为Frida提供了基于JavaScript的API,用于动态地修改目标进程的行为。
注入代码到目标进程:
当目标进程启动时或已经运行时,客户端脚本通过Frida提供的接口将JavaScript代码注入到目标进程中。这通常是通过ptrace系统调用(在Android和iOS上)或CreateRemoteThread函数(在Windows上)实现的。
执行注入的代码:
一旦代码被注入到目标进程中,它就可以开始执行。这包括读取和修改目标进程的内存、拦截和修改函数的执行流程等。在Java环境中,Frida提供了Java.use和Java.implementation等API来替换目标类和方法的实现;在原生环境中,Frida则使用Interceptor.attach来拦截目标函数的执行,并提供onEnter和onLeave回调函数供用户自定义行为。
三、Frida注入的应用场景
Frida注入技术被广泛应用于逆向工程、漏洞挖掘、安全测试等领域。通过注入代码到目标进程中,研究人员可以动态地分析程序的行为、发现潜在的漏洞或作弊行为等。
四、Frida注入的检测与防御
由于Frida注入技术的强大和灵活性,它也成为了许多恶意软件和作弊工具的首选手段之一。因此,对于应用程序开发者来说,了解和掌握Frida注入的检测与防御方法是非常重要的。这通常包括监控进程的异常行为、检测内存中的异常代码注入等。
综上所述,Frida注入的原理是基于动态二进制插桩技术实现的,通过注入代码到目标进程中并修改其行为来达到分析、测试或作弊的目的。了解并掌握这一技术对于安全测试和应用程序开发者来说都具有重要意义。
二,安装
2.1 安装frida-tools【PC】
在安装frida-tools时,也会安装对应版本的frida,因此不用单独安装frida:pip install frida==16.0.1
pip install frida-tools==12.0.1
2.2 安装 frida-server【手机端】
2.2.1. 查看CPU架构
借助adb查看(abd在安装Android Studio的时候就已经下载并添加到系统环境变量了)
启动adb:
adb start-server # 关闭 adb:adb kill-server
查看连接到adb的设备:手机需要用USB线连接电脑