大家好,今天给大家带来 macOS 平台的最新版 Frida 16.6.6 编译教程,先尝试编译原版的 Frida,原版编译完成后,大家就可以自行对 Frida 的源码进行魔改了。
环境准备
最新版本的 Frida 已经改用了meson 编译系统,之前的好多教程都失效了,而且 Frida 官方的编译教程使用的 Ubuntu,给的命令太简单了,好多依赖没有提到,为了能自己魔改 Frida,记录一下自己配置环境的过程。
编译设备
本次编译使用我自己的 MacBook Pro,macOS 15.3.1 版本,截止到目前最新的系统版本。
编译环境
准备一个干净的系统,如果你的系统安装过其他的软件,也没事,重复安装理论上来说不会影响,并且后面用到的软件都会用到版本管理工具,多个版本之间不会互相影响。不过这里要提示一句,由于每个人的系统环境不一样,某些设置可能会影响你现有的软件或者开发环境,建议在操作前进行备份。
网络环境
注意:以下安装流程请保证自己有一个良好的网络环境,否则可能会出现莫名其妙的的报错或者安装命令卡住不动的问题。
安装 homebrew
homebrew 简称 brew
,是 macOS 上的包管理工具,和 Linux 发行版中的 apt
、yum
类似,用于安装需要的依赖包,并且自动解决依赖关系。因为后续依赖很多都需要使用 brew
来安装,所以首先需要安装 brew
,使用官方的安装命令:
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
输入你的账户密码,然后会输出 brew
默认的安装位置,如果不需要自定义的话,直接输出回车默认,我这里就默认了,输入回车。
注意这里,它会自动下载安装 Command Line Tools for Xcode 工具,这是一个 macOS 系统上面的开发工具包,里面包括了编译、调试、代码管理和系统开发所需的核心工具和库,例如各种编译器、构建工具、调试工具、需要的脚本语言等。
出现这个提示就是安装完成了,注意看最后几行,别忘了执行下面的几行命令,将 brew
添加到环境变量中,并且自动执行初始化脚本。
bash
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
试试看能输出帮助内容就算是安装完成了。
出现上面的提示就是安装完成了。
安装 Git
安装好 brew
后,安装 Git。命令:
bash
brew install git
到这里就安装好了。
安装 pyenv
接下来使用 brew
安装 pyenv
,用于管理 Python 版本。
bash
brew install pyenv
到这里就安装好了。
安装 xz
这里要注意提前安装 xz
,不然在使用 Python 编译的时候会报错 lzma
找不到。
bash
brew install xz
这样就安装好了,如果忘记安装 xz
也没关系,报错的时候可以安装好 xz
后重新安装 Python,它检测到 xz
后会自动将 lzma
支持编译进去。
别忘了将 pyenv
的环境变量添加到 zsh
的配置文件,这样 pyenv
的设置才能生效。
安装 Python3
安装好 xz
以后,就可以使用 pyenv
来安装 Python3 了。
bash
pyenv install 3.11.11
编译后将 Python3.11 设置为全局可用即可。
安装 nvm
安装 nvm
用来管理 nodejs
版本。
安装好了以后,按照脚本的提示,将以下内容放到 .zprofile
文件中
bash
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
放好了应该是这样的:
然后 nvm
就可以使用了,接下来安装 nodejs
20.18.3 版本。
安装好以后会自动将其设置为默认版本。
安装 sdkmanager
安装 ndk
要先安装 sdkmanager
,sdkmanager
从官网可以下载到安装包,使用如下命令:
bash
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/
这个目录下,目录不存在的话要新建一个目录。
操作 opt
目录要使用 root
权限,然后将所有的文件移动过去,并且添加环境变量。
发现还缺失 Java 环境,下面来安装 Java 环境。
安装 Java
直接使用 brew
安装:
bash
brew install java
安装好以后,别忘了将 jdk
的路径添加到环境变量中,然后 sdkmanager
应该就可以正常使用了。
安装 ndk
ndk
要安装 25 版本, 因为 Frida16 版本只支持这个,可以使用 sdkmanager
直接安装,先使用 --list
命令列出所有的可用安装项,再找到 ndk
的 25 版本,然后安装。sdkmanager
的安装命令比较特殊,要使用引号扩起来。
bash
sdkmanager "ndk;25.2.9519653"
如果需要同意协议,填写 y
同意,如果遇到权限问题,使用 root
权限即可解决,因为 sdkmanager
安装到了 opt
目录,所以权限可能不够,等待下载完成,ndk
比较大。
编译 Frida
ndk
安装完成后,环境准备工作基本上就结束了,现在开始下载 Frida 源码,然后更新所有 submodules
的源码。我这里使用了截止到当前最新的 Frida16.6.6。
bash
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 相关的依赖和工具链,这里稍等一下。
bash
./configure --host=android-arm64
添加 ndk 环境变量
下载完成后会提示要设置 ndk
的路径,这里根据提示配置一下。
配置完别忘了 source
执行一下,然后重新执行 config
命令。
已经生成了针对 Android arm64
的构建文件,接下来直接 make
编译即可。
编译完成
稍微等待一下即可编译完成,生成的 server
可执行文件在:frida/build/subprojects/frida-core/server/frida-server
这个路径中。
校验编译结果
先将原有的 Frida 停止, 将我们新编译好的 Frida 使用 adb
发送到手机上,并且给可执行权限,执行一下。命令如下:
bash
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 在前台运行,可以开始测试了
使用之前的 APP4 的 frida
脚本尝试一下能否过掉 SSL Pining。
bash
frida -f com.goldze.mvvmhabit -l code.js -H 192.168.31.122:27042
经过测试,可以正常过掉 SSL Pining,并且正确的执行了 hook
脚本。
总结
到此,就完成了 frida server
的完整编译流程,为后续的魔改 frida
做好了准备。
本文章首发于个人博客 LLLibra146's blog
本文作者:LLLibra146
更多文章请关注公众号 (LLLibra146)
版权声明 :本博客所有文章除特别声明外,均采用 © BY-NC-ND 许可协议。非商用转载请注明出处!严禁商业转载!