前言:
Frida 是一个强大的动态代码插桩工具,主要用于在运行时对应用程序进行调试、分析和修改。它支持多种平台(如 Android、iOS、Windows、macOS、Linux 等),并且可以用于多种编程语言(如 JavaScript、Python、C 等)。Frida 的核心思想是通过注入代码到目标进程中,动态地监控和修改其行为。使用 JavaScript 编写脚本,快速实现动态分析功能。使用 JavaScript 编写脚本,快速实现动态分析功能。
常用于逆向分析,动态调试和脱壳场景
安装步奏:
获取手机系统架构
getprop ro.product.cpu.abi
windows平台安装Frida
pip install firda
pip install frida-tools
下载frida-server-16.7.0-android-arm64.xz
https://github.com/frida/frida/releases/tag/16.7.0
将下载的frida-server放到手机中,并且修改其为可执行权限并执行:
adb push frida-server-16.7.0-android-arm64 /data/local/tmp/frida-server
adb shell
su
cd /data/local/tmp
chmod 777 /data/local/tmp/frida-server
./data/local/tmp/frida-server
手机端查看下firda对应端口号
这里看到端口号为27042,如果使用无线调试则需要端口转发到window本地的27042端口:
adb forward tcp:27042 tcp:27042
windows端使用frida-ps测试连接
frida-ps -R
常用命令如下:
# 列出所有设备
frida-ls-devices
# 列出usb设备的进程
frida-ps -U
# 列出正在跑的应用
frida-ps -Ua
# 列出所有安装的应用
frida-ps -Uai
# 连接指定的设备,设备id可以从第一条命令获得
frida-ps -D xxxxx
# 启动应用并注入脚本
frida -U -l exploit.js -f com.xxx.yyy
# 应用已经在运行,注入脚本
frida -U -l exploit.js "XXXX"
# 动态跟踪函数调用
frida-trace -U -i "open" com.example.app
frida-trace -U -i "open" -i "read" com.example.app
报错修复:
当运行的时候出现spawn报错,比如如下报错的时候
Failed to spawn: the connection is closed
当出现如此报错,需要排查如下几个
1.设备或系统限制
设备可能启用了某些安全机制(如 SELinux),阻止 Frida 启动目标应用程序。需要关闭SELinux
adb shell getenforce
如果 SELinux 处于 Enforcing
模式,尝试将其设置为 Permissive
模式:
adb shell setenforce 0
2. Frida 客户端与服务器版本不匹配
检查本地 Frida 客户端版本:
frida --version
adb shell /data/local/tmp/frida-server --version
3. Frida 脚本问题
编写个测试脚本test.js
console.log("Frida is working!");
frida -H 127.0.0.1:27042 -f com.oneplus.camera -l test.js
脱壳工具使用:
frida-dexdump
https://github.com/hluwa/frida-dexdump
pip3 install frida-dexdump
frida-dexdump -H 127.0.0.1:27042 -f com.oneplus.camera
frida_dump
https://github.com/lasting-yang/frida_dump
frida -H 127.0.0.1:27042 -f com.oneplus.camera -l dump_dex.js
frida-unpack
https://github.com/dstmath/frida-unpack
frida -H 127.0.0.1:27042 -f com.oneplus.camera -l OpenMemory.js
三个运行完成后都会生成多个dex文件,下面就是要在生成的大量dex文件中分辨哪些是公共库文件,哪些是程序本身的dex文件
总结
Frida作为一个非常优秀的动态代码插桩工具,灵活性很高,我们可以根据自己的理解去hook任意的函数,进而可以对任意值的获取和修改,在脱壳和函数分析如key分析非常的方便,脚本编写简单使用js代码,但是需要我们对系统和原理有很深的理解,不然再好的工具也不行