在 Ubuntu 上编译多个版本的 Frida,可以按照以下步骤进行操作(以下以编译 Frida 15.1.28 和 16.1.4 为例):
准备工作:
- 操作系统:Ubuntu 20(WSL)或其他版本。
安装依赖:
sudo apt-get install build-essential git lib32stdc++-9-dev libc6-dev-i386 -y
并安装 Node.js(例如版本 20.15.1),从官网下载对应的安装包并解压。
下载源码:
- 克隆 Frida 代码仓库:
git clone -b 15.1.28 --recurse-submodules https://github.com/frida/frida
- 进入 Frida 目录:
cd frida
对于不同版本的 Frida 编译,需要注意其对应的 NDK 版本要求。可以通过查看releng/setup-env.sh
文件中的相关内容来确定所需的 NDK 版本,然后从https://github.com/android/ndk/wiki/unsupported-downloads下载相应的 NDK 版本。
开始编译特定版本(以 Frida 15.1.28 为例):
为了避免污染全局环境,可以创建一个脚本(如env15.sh
)来设置相关环境变量,然后执行该脚本。例如:
export android_ndk_root=/home/kanade/android-ndk-r24 export node_home=/home/kanade/node-v20.15.1-linux-x64 export path=${node_home}/bin:$android_ndk_root:$path # 设置代理(如果需要,根据实际代理地址修改) exporthttps_proxy="http://192.168.31.25:7890" exporthttp_proxy="http://192.168.31.25:7890"
执行source env15.sh
后,开始编译:make core-android-arm64
,它会先下载 toolchain 和 sdk。如果编译过程中卡住且 CPU 占用率不高,通常是网络原因导致,可以参考上述设置代理的方法。
编译完成后,构建好的文件在build/frida-android-arm64/bin
目录下。如果想编译其他平台的版本,可以输入make
查看所有支持的平台,然后选择需要编译的平台进行编译。
编译其他版本(以 Frida 16.1.4 为例):
- 切换到指定版本:
git checkout 16.1.4
,并更新子模块:git submodule update
。 - 将 NDK 版本切换到对应版本(如 25)。
- 清理之前的编译:
make clean
。 - 按照之前的编译步骤重新编译:
make core-android-arm64
。
编译更低版本(如 14.2.2)的注意事项:
除了上述基本操作外,还需要创建一个build/frida-version.h
文件,并写入相应版本的信息,例如:
这样可以避免出现类似“未定义的版本”错误。为了避免不同版本之间的干扰,建议每个版本在一个独立的目录中进行编译,以防止每次编译都需要删除 toolchain 和 sdk 并重新下载。
此外,编译过程中可能会遇到一些其他问题,例如缺少依赖库或工具。如果遇到问题,可以根据具体的错误提示进行相应的解决,如安装缺失的依赖、调整环境变量等。同时,确保网络连接稳定,以便顺利下载所需的文件和工具。