macOS 平台编译最新版 Frida16.6.6 保姆级教程

大家好,今天给大家带来 macOS 平台的最新版 Frida 16.6.6 编译教程,先尝试编译原版的 Frida,原版编译完成后,大家就可以自行对 Frida 的源码进行魔改了。

环境准备

最新版本的 Frida 已经改用了meson 编译系统,之前的好多教程都失效了,而且 Frida 官方的编译教程使用的 Ubuntu,给的命令太简单了,好多依赖没有提到,为了能自己魔改 Frida,记录一下自己配置环境的过程。

编译设备

本次编译使用我自己的 MacBook Pro,macOS 15.3.1 版本,截止到目前最新的系统版本。

编译环境

准备一个干净的系统,如果你的系统安装过其他的软件,也没事,重复安装理论上来说不会影响,并且后面用到的软件都会用到版本管理工具,多个版本之间不会互相影响。不过这里要提示一句,由于每个人的系统环境不一样,某些设置可能会影响你现有的软件或者开发环境,建议在操作前进行备份。

网络环境

注意:以下安装流程请保证自己有一个良好的网络环境,否则可能会出现莫名其妙的的报错或者安装命令卡住不动的问题。

安装 homebrew

homebrew 简称 brew,是 macOS 上的包管理工具,和 Linux 发行版中的 aptyum 类似,用于安装需要的依赖包,并且自动解决依赖关系。因为后续依赖很多都需要使用 brew 来安装,所以首先需要安装 brew,使用官方的安装命令:

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

image-20250301074152645

输入你的账户密码,然后会输出 brew 默认的安装位置,如果不需要自定义的话,直接输出回车默认,我这里就默认了,输入回车。

image-20250301074334271

注意这里,它会自动下载安装 Command Line Tools for Xcode 工具,这是一个 macOS 系统上面的开发工具包,里面包括了编译、调试、代码管理和系统开发所需的核心工具和库,例如各种编译器、构建工具、调试工具、需要的脚本语言等。

image-20250301074809955

出现这个提示就是安装完成了,注意看最后几行,别忘了执行下面的几行命令,将 brew 添加到环境变量中,并且自动执行初始化脚本。

1
2
3
4
echo >> /Users/a/.zprofile
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/a/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
source /Users/a/.zprofile

依次执行上面的脚本,然后执行 brew 试试看能输出帮助内容就算是安装完成了。

image-20250301075014502

出现上面的提示就是安装完成了。

安装 Git

安装好 brew 后,安装 Git。命令:

1
brew install git

image-20250301203444767

到这里就安装好了。

安装 pyenv

接下来使用 brew 安装 pyenv,用于管理 Python 版本。

1
brew install pyenv

image-20250301203742248

到这里就安装好了。

安装 xz

这里要注意提前安装 xz,不然在使用 Python 编译的时候会报错 lzma 找不到。

1
brew install xz

image-20250301204030864

这样就安装好了,如果忘记安装 xz 也没关系,报错的时候可以安装好 xz 后重新安装 Python,它检测到 xz 后会自动将 lzma 支持编译进去。

image-20250301215732449

别忘了将 pyenv 的环境变量添加到 zsh 的配置文件,这样 pyenv 的设置才能生效。

安装 Python3

安装好 xz 以后,就可以使用 pyenv 来安装 Python3 了。

1
pyenv install 3.11.11

image-20250301204314013

image-20250301215828393

编译后将 Python3.11 设置为全局可用即可。

安装 nvm

安装 nvm 用来管理 nodejs 版本。

image-20250301220222316

安装好了以后,按照脚本的提示,将以下内容放到 .zprofile 文件中

1
2
3
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion

放好了应该是这样的:

image-20250301220121641

image-20250301220157898

然后 nvm 就可以使用了,接下来安装 nodejs 20.18.3 版本。

image-20250301220423979

安装好以后会自动将其设置为默认版本。

安装 sdkmanager

安装 ndk 要先安装 sdkmanagersdkmanager官网可以下载到安装包,使用如下命令:

1
2
curl https://dl.google.com/android/repository/commandlinetools-mac-11076708_latest.zip?hl=zh-cn -o commandlinetools.zip
unzip commandlinetools.zip # 解压

并且将解压后的文件都放到 /opt/sdkmanager/android-sdk/cmdline-tools/latest/ 这个目录下,目录不存在的话要新建一个目录。

image-20250301222450077

image-20250301222527664

image-20250301222707596

image-20250301222804899

操作 opt 目录要使用 root 权限,然后将所有的文件移动过去,并且添加环境变量。

发现还缺失 Java 环境,下面来安装 Java 环境。

安装 Java

直接使用 brew 安装:

1
brew install java

image-20250301231029832

安装好以后,别忘了将 jdk 的路径添加到环境变量中,然后 sdkmanager 应该就可以正常使用了。

安装 ndk

ndk 要安装 25 版本, 因为 Frida16 版本只支持这个,可以使用 sdkmanager 直接安装,先使用 --list 命令列出所有的可用安装项,再找到 ndk 的 25 版本,然后安装。sdkmanager 的安装命令比较特殊,要使用引号扩起来。

1
sdkmanager "ndk;25.2.9519653"

image-20250301233257784

如果需要同意协议,填写 y 同意,如果遇到权限问题,使用 root 权限即可解决,因为 sdkmanager 安装到了 opt 目录,所以权限可能不够,等待下载完成,ndk 比较大。

编译 Frida

ndk 安装完成后,环境准备工作基本上就结束了,现在开始下载 Frida 源码,然后更新所有 submodules 的源码。我这里使用了截止到当前最新的 Frida16.6.6。

1
2
3
4
git clone --recurse-submodules https://github.com/frida/frida.git
cd frida
git checkout 16.6.6
git submodule update --init --recursive # 更新 submodules

开始编译

现在开始编译,我们先使用默认配置,编译一下 Android 版本。在配置命令中,会自动下载 AndroidSDK 相关的依赖和工具链,这里稍等一下。

1
./configure --host=android-arm64

image-20250302004837217

添加 ndk 环境变量

下载完成后会提示要设置 ndk 的路径,这里根据提示配置一下。

image-20250302010833800

配置完别忘了 source 执行一下,然后重新执行 config 命令。

image-20250302010916037

已经生成了针对 Android arm64 的构建文件,接下来直接 make 编译即可。

编译完成

image-20250302011249727

image-20250302135022995

稍微等待一下即可编译完成,生成的 server 可执行文件在:frida/build/subprojects/frida-core/server/frida-server 这个路径中。

校验编译结果

先将原有的 Frida 停止, 将我们新编译好的 Frida 使用 adb 发送到手机上,并且给可执行权限,执行一下。命令如下:

1
2
3
4
5
6
7
8
9
10
adb push frida-server /sdcard/
adb shell
# 下面的命令在手机上执行
su
cd /sdcard/
mv frida-server /data/local/tmp
cd /data/local/tmp
chmod 777 frida-server
ps -ef |grep frida # 确保已经停止了原有的 frida
./frida-server -l 0.0.0.0 # 此时会卡住,因为 frida 在前台运行,可以开始测试了

image-20250302140958017

使用之前的 APP4 的 frida 脚本尝试一下能否过掉 SSL Pining。

1
frida -f com.goldze.mvvmhabit -l code.js -H 192.168.31.122:27042

image-20250302141908466

经过测试,可以正常过掉 SSL Pining,并且正确的执行了 hook 脚本。

总结

到此,就完成了 frida server 的完整编译流程,为后续的魔改 frida 做好了准备。

本文章首发于个人博客 LLLibra146’s blog

本文作者:LLLibra146

更多文章请关注公众号 (LLLibra146):LLLibra146

版权声明:本博客所有文章除特别声明外,均采用 © BY-NC-ND 许可协议。非商用转载请注明出处!严禁商业转载!

本文链接
https://blog.d77.xyz/archives/7b762c53.html