Frida脚本开发环境的搭建过程。
Pyenv
为了快速切换不同python环境,安装不同的frida环境,需要安装pyenv来实现python环境切换
依赖库
sudo apt-get install make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
安装
curl https://pyenv.run | bash
环境
#pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
使用pip安装Frida和Frida-tool,Frida和Frida-tool之间的版本需要对应上,对应关系在GitHub[https://github.com/frida/frida/releases]中,如下图所示,最新的frida15.0.16,对应的frida-tool是10.2.1.
pip install frida=12.8.0
pip install frida-tools==5.3.0
Root权限
frida运行需要root权限,下面使用twrp安装Magisk进行root。
Magisk
GitHub下载Magisk-v20.4.zip,刷进手机:
adb push Magisk-v20.4.zip /sdcard/
Twrp
下载
下载手机对应的twrp,例如我的pixel xl型号是marlin,到https://dl.twrp.me/marlin/下载对应的镜像:
进入twrp
下载platform tool,赋予platform tool文件夹权限,手机进入fastboot模式,然后到platform tool目录下输入:
sudo ./fastboot boot ~/frida/twrp-3.5.2_9-0-marlin.img
安装Magisk
上一步完成后,手机自动进入twrp,选择install,找到之前push到手机的Magisk-v20.4.zip,选择安装后重启手机。可以看到Magisk已经安装完毕。
Root
通过Magisk获取超级权限:
adb shell
su -
//手机中弹出提示,点击同意
Frida-server
下载
下载于frida对应的frida-server[https://github.com/frida/frida/releases/tag/12.8.0],解压后将其写入手机。
adb push frida-server-12.8.0-android-arm64.xz /data/local/tmp/
启动&连接
不指定端口启动
adb shell
su
cd /data/local/tmp
chmod 777 frida-server-12.8.0-android-arm64
./frida-server-12.8.0-android-arm64 //后台启动 ./frida-server-12.8.0-android-arm64 &
不指定端口连接
frida-ps -U //-U connect to USB device
指定端口启动
adb shell
cd /data/local/tmp
./frida-server-12.8.0-android-arm64 -l 0.0.0.0:8888//指定端口8888
指定端口连接
adb forward tcp:8888 tcp:8888 //端口映射。adb forward [1] [2]:将电脑[1]映射到手机[2]
frida-ps -H 127.0.0.1:8888 //-H 指定地址端口
//如果不使用USB adb,使用wifi adb,则不需要进行端口映射,直接-H [手机地址:端口]
开发&运行
frida-agent-example
git clone https://github.com/oleavr/frida-agent-example.git
cd frida-agent-example
npm install
#使用vscode在agent文件夹下进行开发
运行
//./frida-server-12.8.0-android-arm64 -l 0.0.0.0:8888
//adb forward tcp:8888 tcp:8888
./frida -H 127.0.0.1:8888 -f com.android.settings -l 0530.js --no-pause //-f:fork 开新的线程;-l:指定脚本;--no-pause:不暂停