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,使用官方的安装命令:

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 要先安装 sdkmanagersdkmanager官网可以下载到安装包,使用如下命令:

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 许可协议。非商用转载请注明出处!严禁商业转载!

本文链接blog.d77.xyz/archives/7b...

相关推荐
万户猴8 分钟前
【Flow进阶篇一】SharedFlow 入门:冷流 vs. 热流的区别与基础用法
android·kotlin
李大圣的博客1 小时前
使用binlog2sql来恢复mysql误删除数据
android
奥顺2 小时前
PHP函数与类:面向对象编程实践指南
android·开发语言·mysql·开源·php
向上的车轮2 小时前
40岁开始学Java:Java中单例模式(Singleton Pattern),适用场景有哪些?
android·java·单例模式
人民的石头4 小时前
Android 系统 AMS(ActivityManagerService)
android
CYRUS_STUDIO8 小时前
unidbg 实现 JNI 与 Java 交互
android·安全·逆向
峥嵘life8 小时前
Android6到Android15版本新增的功能和api
android
Android小码家8 小时前
Android Framework startServices 流程
android·framework
清霜之辰8 小时前
2025年上海安卓发展机遇
android