一、frida介绍
Frida是一款轻量级HOOK框架,可用于多平台上,例如android、windows、ios等。frida分为两部分,服务端运行在目标机上,通过注入进程的方式来实现劫持应用函数,另一部分运行在系统机器上。frida上层接口支持js、python、c等。
🔗 Frida官方github地址为:frida官方github地址
二、安装 frida-server
🔗 下载地址:https://github.com/frida/frida/releases
🔗 Android Tutorials地址:https://frida.re/docs/android/
查看cpu架构
adb shell getprop ro.product.cpu.abi
arm64-v8a
选择对应架构的server下载
三、启动 firida-server
-
操作步骤
解压上面下载的文件,然后 push 到手机 /data/local/tmp,接着启动 firda-server 服务
-
查看设备
adb devices -l
-
将文件传到手机
adb push frida-server-16.0.1-android-arm64 /data/local/tmp
-
进入shell
adb shell # 或者 adb content 192.xx.xx.xx:xx
-
切换root权限
su
-
进入到文件目录
cd /data/local/tmp
-
修改权限
chmod 777 /data/local/tmp/frida-server-16.0.1-android-arm64
-
启动服务
./frida-server-16.0.1-android-arm64
- 端口映射
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
- 查看进程
frida-ps -U
Hook的Python脚本
import frida #导入frida模块
import sys #导入sys模块
jscode = """ #从此处开始定义用来Hook的javascript代码
Java.perform(function(){
var MainActivity = Java.use('com.example.testfrida.MainActivity'); //获得MainActivity类
MainActivity.testFrida.implementation = function(){ //Hook testFrida函数,用js自己实现
send('Statr! Hook!'); //发送信息,用于回调python中的函数
return 'Change String!' //劫持返回值,修改为我们想要返回的字符串
}
});
"""
def on_message(message,data): #js中执行send函数后要回调的函数
print(message)
process = frida.get_remote_device().attach('com.example.testfrida') #得到设备并劫持进程com.example.testfrida(该开始用get_usb_device函数用来获取设备,但是一直报错找不到设备,改用get_remote_device函数即可解决这个问题)
script = process.create_script(jscode) #创建js脚本
script.on('message',on_message) #加载回调函数,也就是js中执行send函数规定要执行的python函数
script.load() #加载脚本
sys.stdin.read()
四、frida命令
# 通过USB将Frida连接到iPad并列出正在运行的进程
$ frida-ps -U
# 列出正在运行的应用程序
$ frida-ps -Ua
# 列出已安装的应用程序
$ frida-ps -Uai
# 将Frida连接到特定设备
$ frida-ps -D 0216027d1d6d3a03
五、gadget
适用于当无法获取root权限时可以将gadget.so植入目标apk中重打包,通过修改应用,使得server以应用的权限启动
评论区