Ubuntu上編譯多個版本的frida

Python成长路發表於2024-07-25

準備工作

Ubuntu20(WSL)

安裝依賴

sudo apt update
sudo apt-get install build-essential git lib32stdc++-9-dev libc6-dev-i386 -y

nodejs

官網[1]下載nodejs,版本的話我就選的20.15.1:

tar -xf node-v20.15.1-linux-x64.tar.xz

下載原始碼

git clone -b 15.1.28 --recurse-submodules https://github.com/frida/frida

cd frida

ndk

frida各個版本需要的ndk版本都不一樣,可以透過cat releng/setup-env.sh |grep ndk檢視

https://github.com/android/ndk/wiki/Unsupported-Downloads

開始編譯

為了方便先寫個env15.sh的指令碼,然後執行source env15.sh,這樣不會汙染全域性環境,如果你想編譯frida16的話,再寫個env16.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

開始編譯:make core-android-arm64,會先下載toolchain和sdk。

然後就一直卡在這裡,這種沒有佔用CPU的卡住一般都是網路原因

所以在env15.sh加個設定代理的命令:

export https_proxy="http://192.168.31.25:7890"
export http_proxy="http://192.168.31.25:7890"

重新編譯:make core-android-arm64,等待個兩三分鐘就編譯完成了:

構建好的檔案在build/frida-android-arm64/bin

想編譯其他平臺的話,可以輸入make先檢視所有的平臺,選擇需要編譯的平臺

測試

將frida-server推送到手機試試,執行沒問題就不測試指令碼了

編譯toolchain和sdk

這個一般不用操作,當你使用make編譯時,如果不存在預設會下載編譯好的,這裡就只是提一下。

編譯toolchain:proxychains make -f Makefile.toolchain.mk

解決方法[2]: sudo apt install m4 -y

編譯sdk:proxychains make -f Makefile.sdk.mk FRIDA_HOST=linux-x86_64

這個不顯示具體的錯誤,看Makefile.sdk.mk的282行也看不出什麼貓膩,但可以知道的是在構建gn的時間出錯的。所以可以看一下gn的構建日誌,先找一下日誌所在路徑,tree -NCfhl |grep build.log

檢視這個檔案發現是python命令沒找到,看了下確實沒有,因為現在Ubuntu自帶的是python3,之前從Makefile.sdk.mk裡看到執行的是deps/gn/build/gen.py這個python程式碼,開啟檔案確認下是支援python3的語法,所以做個軟連結應該就可以: sudo ln -s /usr/bin/python3 /usr/bin/python

執行sudo releng/setup-env.sh載入編譯好的toolchain和sdk

編譯其他版本

git checkout 16.1.4
git submodule update

然後將ndk版本切換到25,接著就可以開始編譯了。

make clean
make core-android-arm64

編譯低版本

編譯更低版本時(14.2.2),除了上面的操作,還需要建立一個build/frida-version.h檔案,寫入以下內容

#ifndef __FRIDA_VERSION_H__
#define __FRIDA_VERSION_H__

#define FRIDA_VERSION "14.2.2"

#define FRIDA_MAJOR_VERSION 14
#define FRIDA_MINOR_VERSION 2
#define FRIDA_MICRO_VERSION 2
#define FRIDA_NANO_VERSION 0

#endif

不然會出現下面的錯誤:

其實還是一個版本一個目錄檔案比較好,不然每次編譯都要刪除toolchain和sdk重新下載。

下一篇文章說一下怎麼魔改frida去特徵,不過現在很多APP和殼的檢測都比較嚴格了,去特徵的frida也可能過不了檢測,還得自己能會找監測點去過檢測。

引用連結

  • [1] https://nodejs.org/zh-cn/download/prebuilt-binaries
  • [2] https://github.com/conan-io/conan-center-index/issues/8639

參考連結

  • https://mp.weixin.qq.com/s/4MOTfYm-GMpZQFsLKOOHwQ

本文由部落格一文多發平臺 OpenWrite 釋出!

相關文章