日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

超详细的mac环境下编译魔改frida-server

發布時間:2024/3/26 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 超详细的mac环境下编译魔改frida-server 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、編譯最新版本
    • 1.搭建環境
    • 2.代碼下載
    • 3.編譯
  • 二、魔改再編譯
    • 1.切換到指定tag:15.1.12
    • 2.打hluda patch
    • 3.編譯


前言

對于frida的編譯和魔改想必大家都已經不陌生了,看雪上一搜一大堆,但是大神們基本都是基于ubuntu環境搞的,今天就記錄下我在mac環境下編譯的詳細步驟,其實大體上一致,區別就在于編譯環境搭建和負責去特征的anti-anti-frida.py腳本有些差異


一、編譯最新版本

frida官網對于編譯環境和編譯步驟已經做了描述,如下圖:

好了,下面就開始咔咔一頓操作吧。。。

1.搭建環境

  • xcode命令行工具
mac電腦基本都自帶xcode工具,沒有的話AppStore搜索安裝就可
  • python 環境
要求3.10, 但是我3.7.0也可以
  • Node.js
這個就老老實實整最新版本v19.0.1,因為我用老版本編譯失敗了 官網(https://nodejs.org/en/download/current/)下載安裝包或者brew install node都可 安裝完終端測試下node -v 和 npm -v 命令沒問題就ok

2.代碼下載

git clone --recurse-submodules https://github.com/frida/frida.git #包括了所有子模塊 這里多說一嘴吧: 1.如果clone時忘了下子模塊或者clone所有子模塊時有失敗時候該怎么辦 : 執行 git submodule update --init 直到沒有出錯信息 2.最后檢查各子模塊狀態是否正常:git submodule status

3.編譯

(1)首先想要編譯Android平臺的肯定是要依賴NDK,在frida源碼目錄下releng/setup-env.sh搜索ndk_required就可看到需要的版本;這里記住一定要在NDK下載地址中選擇darwin版本下載安裝,否則編譯時在ndk目錄下找不到darwin目錄下的靜態庫哦!別怪我沒提醒你~

(2)終于可以開始編譯了,執行make命令可以顯示編譯架構信息。設置臨時ndk環境變量開始編譯即可,這里我就用arm64舉例了

export ANDROID_NDK_ROOT=/Users/xxx/program/ndk/android-ndk-r24-darwin && make core-android-arm64

順利的話,上個廁所的功夫就編譯完成了。將build/frida-android-arm64/bin/frida-server push到手機里就測試下沒問題就完活

二、魔改再編譯

1.切換到指定tag:15.1.12

clone下來的代碼最新的是16.0.2, 因為常用15.1.12版本,所以先切換下本地代碼

git checkout 15.1.12 #切換tag git submodule update --recursive #其他子模塊也跟著一起更新下

2.打hluda patch

git clone https://github.com/hluwa/Patchs.git cd frida/frida-core git am Patchs/strongR-frida/frida-core/*.patch

3.編譯

(1)切換到老tag編譯應該都會遇到下面這個問題,因為frida已將默認分支從master切換到main

報錯: make[1]: *** No rule to make target '.git/refs/heads/master', needed by 'build/frida-version.h'. Stop.解決辦法就是將下面這次commit的改動直接恢復就行了 https://github.com/frida/frida/commit/e4c6a1e646666284ea77c36d61f20558504847b5 就兩個文件releng/frida-deps.vcxproj和releng/frida.mk,別猶豫,直接把master替換成main就完事

(2)編譯(命令同上)

export ANDROID_NDK_ROOT=/Users/xxx/program/ndk/android-ndk-r24-darwin && make core-android-arm64

(3)編譯之后strings查看frida-server文件字符串,發現frida-core/src/anti-anti-frida.py腳本的sed貌似沒有生效,這里我修改了下,可以再對frida-server執行一下,代碼我貼到下面:

import lief import sys import random import osdef execute_command(command):result = os.popen(command).read()return resultdef hex_str(input_str):return "".join(execute_command('echo %s | hexdump |head -n 1'%(input_str)).split(' ')[1:len(input_str) + 1]).upper()def replace_hex_file(source, target, input_file):tmp_file = os.path.join(os.path.dirname(os.path.abspath(input_file)), "tmpfile")# hexdump -ve '1/1 "%.2X"' file1 | sed 's/420224/121224/g' | xxd -r -p > new_updatedexecute_command("hexdump -ve '1/1 %s' %s | sed 's/%s/%s/g' | xxd -r -p > %s"%('"%.2X"', input_file, source, target, tmp_file))execute_command("mv %s %s"%(tmp_file, input_file))if __name__ == "__main__":input_file = sys.argv[1]random_name = "".join(random.sample("ABCDEFGHIJKLMNO", 5))print(f"[*] Patch file [{input_file}] `frida` to `{random_name}`")binary = lief.parse(input_file)for symbol in binary.symbols:if symbol.name == "frida_agent_main":symbol.name = "main"if "frida" in symbol.name:print(f"frida in {symbol.name}")symbol.name = symbol.name.replace("frida", random_name)if "FRIDA" in symbol.name:print(f"FRIDA in {symbol.name}")symbol.name = symbol.name.replace("FRIDA", random_name)binary.write(input_file)# gum-js-loop threadt_feature1 = "gum-js-loop"hex_feature = hex_str(t_feature1)random_name = "".join(random.sample("abcdefghijklmn", len(t_feature1)))print(f"[*] Patch `gum-js-loop` to `{random_name}`")#os.system(f"sed -b -i s/gum-js-loop/{random_name}/g {input_file}")hex_random_name = hex_str(random_name)replace_hex_file(hex_feature, hex_random_name, input_file)# gmain threadt_feature2 = "gmain"hex_feature = hex_str(t_feature2)random_name = "".join(random.sample("abcdefghijklmn", len(t_feature2)))print(f"[*] Patch `gmain` to `{random_name}`")#os.system(f"sed -b -i s/gmain/{random_name}/g {input_file}")hex_random_name = hex_str(random_name)replace_hex_file(hex_feature, hex_random_name, input_file)

到這里對于frida線程名/文件名特征的修改就結束了,拿著魔改的frida-server試試去吧


總結

以上是生活随笔為你收集整理的超详细的mac环境下编译魔改frida-server的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。