基本情况
Frida 是一款开源的动态代码检测工具,可以用于分析和修改移动应用程序的行为。它跨平台兼容,可以在 Android、iOS 以及桌面应用程序上使用。
Frida Hook 原理
- 动态代码注入:
Frida 使用动态代码注入技术将自己的代码注入到目标进程中。在 Android 和 iOS 上,Frida 会使用 ptrace 系统调用将自己的代码附加到目标进程。在 Windows 上,Frida 使用 CreateRemoteThread 函数在目标进程中创建一个新线程并执行其代码。 - 函数钩子:
Frida 使用函数钩子技术来拦截目标函数的执行。在 Java 环境中,Frida 会使用 Java.use 和 Java.implementation 来替换目标类和方法的实现。在原生环境中,Frida 会使用 Interceptor.attach 来拦截目标函数的执行,并提供 onEnter 和 onLeave 回调函数。 - 内存操作:
Frida 可以读取和修改目标进程的内存,这可以用于修改函数参数、返回值和执行流程。在 Java 环境中,Frida 提供了 Java.cast 和 Java.array 等 API 来操作对象和数组。在原生环境中,Frida 提供了诸如 Memory.readPointer 和 Memory.writePointer 等 API 来读写内存。 - 跨平台兼容:
Frida 是一个跨平台的工具,可以运行在 Android、iOS、macOS、Windows 和 Linux 等多种操作系统上。为了实现跨平台兼容,Frida 在每个平台上使用不同的底层机制来实现动态代码注入和函数钩子。
Frida 安装
在电脑上安装客户端
pip install frida -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install frida-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/
建议使用python 3.8
在手机上安装服务端
下载服务端程序,地址:https://github.com/frida/frida/releases
使用以下命令查看手机CPU版本,下载对应的程序。
adb shell getprop ro.product.cpu.abi
我的手机是用的frida-server-16.5.7-android-arm64版本
使用以下命令将程序传输到手机,并更改权限
adb push C:\Users\ropha\Downloads\frida-server /data/local/tmp
adb shell chmod 755 /data/local/tmp/frida-server
cd /data/local/tmp
./frida-server 运行起来了
在客户端输入以下命令,查看手机端正在运行的进程
frida-ps -U