工作目錄在 `~/Projects/frida`
1. 下載NDK [[25以後舊版](https://github.com/android/ndk/wiki/Unsupported-Downloads)],[[最新版](https://developer.android.com/ndk/downloads?hl=zh-tw)]
```bash
mkdir -p Android && cd Android
mkdir -p Ndk && cd Ndk
wget https://dl.google.com/android/repository/android-ndk-r25c-linux.zip
unzip android-ndk-r25c-linux.zip
rm android-ndk-r25c-linux.zip
#frida 只支援25版本)
```
2. 設定 ANDROID_NDK_ROOT
```bash
vim ~/.bashrc
#加入 export ANDROID_NDK_ROOT=$HOME/Android/Ndk/android-ndk-r25c
source ~/.bashrc
```
3. 安裝編譯套件
```bash
sudo apt-get install build-essential curl git lib32stdc++-9-dev \
libc6-dev-i386 nodejs npm python3-dev python3-pip
#sudo apt-get install npm
#sudo apt install python3-pip
#pip3 install colorama prompt-toolkit pygments
#sudo apt-get install gcc-multilib g++-multilib
#sudo -H pip3 install meson ninja
#sudo apt install gcc g++ #原fedora的
#meson通过pkg-config找到系统自带的libffi库的, 因此需要先安装pkg-config
#sudo apt install pkg-config
#让meson找到系统自带的libffi,而不是去编译/frida-home/frida/frida-gum/subprojects/libffi/
#sudo apt install libffi8 libffi-dev -y
4. 安装nodejs环境,由于这里使得 frida-gum默认编译gumjs,因此需要安装nodejs环境
```bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
source ~/.bashrc
```
5. 用nvm安装nodejs
```bash
nvm ls-remote
nvm install v18.18.2
nvm use v18.18.2
which node #/root/.nvm/versions/node/v14.17.1/bin/node
which npm #/root/.nvm/versions/node/v14.17.1/bin/npm
```
6. 抓程式碼
由於包含多項模組所以建議用git參數submodules全部抓取
```bash
git clone --recurse-submodules https://github.com/frida/frida.git
```
7. 編譯
```bash
make #查看編譯項目
# 編譯gum hook框架
make gum-android-arm # arm架構
make gum-android-arm64 # arm64架構
# 編譯主要程式 gum-graft、frida-server、frida-protal、frida-inject
make core-android-arm
make core-android-arm64
```
> 編譯結果預設都在./firda/build/frida-android-XXXX/bin 路徑下。(XXXX CPU架構)
- frida-gadget.so 路徑
./firda/build/frida-android-arm/lib/frida/32/frida-gadget.so
./firda/build/frida-android-arm64/lib/frida/64/frida-gadget.so