经常使用Frida的朋友们可能会遇到Frida的各种问题需要自定义的,而这时候Frida的本地编译就显得很重要了。
最近一位朋友发现使用Frida14/15/16版的server只能连拉一定数量的设备,超过了frida-device-manager便不能连接设备。
实现没有办法,我只好去修改源码,然后自己搭建编译环境,然后就有了这次的编译Frida。
一、系统
OS: Ubuntu22.04LTS
二、相关资源
参考了别人编译的文章,也放一些相关资源链接在这里
1.frida源码
GitHub - frida/frida: Clone this repo to build Frida
2.frida官方文档
Frida • A world-class dynamic instrumentation toolkit | Observe and reprogram running programs on Windows, macOS, GNU/Linux, iOS, watchOS, tvOS, Android, FreeBSD, and QNX
3.frida编译篇
Building | Frida • A world-class dynamic instrumentation toolkit
三、系统应用安装
在编译环境部署前,系统也需要安装一些应用,比如git, curl, 也相当于是一些常用的应用,一般开发人员的电脑上,这些应用应该不会没有。
还有一点就是必要的时候,需要科学上网。
这里不再多讲,直接上重点吧。
四、源码和环境部署
1、拉取Frida源码
git clone --recurse-submodules https://github.com/frida/frida
或者
git clone --recurse-submodules https://github.com/frida/frida.git
注意: 这样拉取的是Frida当前最新版本的源码,如果需要编译的是历史版本,需要再用git同步到历史
git checkout 15.2.2 #切换tag
git submodule update --recursive #其他子模块也跟着一起更新下
或者使用commit 3ff85a5
比如Frida 15.2.2的commit为 3ff85a5
git checkout 3ff85a5
git submodule update --recursive
2、node/npm版本
虽然frida的作者推荐新版本的nodejs和npm,尤其是v20和更新版本,但每一个版本的frida release都会有固定版本的nodejs,如果想要不出错,还是建议使用release版本中的node版本
其中node版本和NODE_MODULE_VERSION对照表可以网上查询
而我本次编译,采用的是108对应的v18.12.0。
nodejs历史版本下载: Index of /download/release/
设置环境变量:
# set node
export NODE_HOME=/home/ubuntu/work/node-v18.12.0-linux-x64
export PATH=$PATH:${NODE_HOME}/bin
验证环境变量设置:
注意:设置环境变量的方便有三种,分别是设置 ~/.bashrc, /etc/profile, /etc/environment。第一种只适用于当前登录用户,第二种和第三种会保存给所有用户。
细节可以网上搜索,很多文章。
3、安卓NDK
关于安卓NDK的版本,不同的Frida也会有不同的要求,具体的版本在你的Frida源码目录:/frida/releng/setup-env.sh。
打开文件,即可以找到。
下载地址:https://developer.android.com/ndk/downloads?hl=zh-cn
然后设置NDK的环境变量
#set NDK env
export NDK_HOME=/home/ubuntu/work/android-ndk-r24
export PATH=$NDK_HOME:$PATH
验证NDK环境变量:
4、python环境
Frida要求python3环境,而Ubuntu一般会自带python3, 比如我的就是python3.10。而且Frida编译会自动使用"python3"来调用python3。
系统没有安装的,或者版本不对的,可以自行安装。
5、安卓SDK安装。
目前安装安卓SDK的方法还是用android-studio靠谱,也简单。
然后设置SDK的环境变量
#set sdk
export ANDROID_SDK_HOME=/home/ubuntu/Android/Sdk
export PATH=$PATH:${ANDROID_SDK_HOME}/tools
export PATH=$PATH:${ANDROID_SDK_HOME}/build-tools/29.0.0
export PATH=$PATH:${ANDROID_SDK_HOME}/platform-tools
验证SDK变量设置成功:
6、JDK环境
JDK使用1.8,相信只要做开发的人都会部署。
这里有一个问题就是很多人电脑上有多个java环境,怎么把jdk8变成首选的环境变量呢:
sudo update-alternatives --config java
五、toolchain和sdk下载
个人推荐使用Frida的自动下载。
自动下载:
运行
make -f Makefile.skd.mk FRIDA_HOST=android-arm64
frida会自动同步toolchain和sdk, 这一步可能会需要很久。
六、开始编译
输入命令
make -f Makefile.linux.mk
可以看到各个版本的编译命令:
然后输入命令:
make core-android-arm64