文章目录

  • 前言
  • 一、编译最新版本
    • 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相关推荐

  1. linux编译ffmpeg成so,「ffmpeg」一 mac 环境下编译ffmpeg,生成so库文件

    1.下载ffmpeg源码,官网,我这里直接采用git 方式下载: 下载ffmpeg.png 终端输入git命令: 静静等待~ 最后下载的版本为3.4.6 . image.png 这里注意一下,刚开始我 ...

  2. 9切换中文mac_超详细的Mac重装系统教程!让重装系统变得简单起来!

    mac电脑该怎么重装系统?苹果电脑在长时间使用后,系统可能会变得比较慢,另外各种缓存垃圾也会越堆越多,影响电脑的反应速度.mac OS系统是苹果电脑独有的操作系统,重装mac系统过程和Win系统完全不 ...

  3. Mac环境下配置Java开发环境(jdk+maven+tomcat+idea)

    记录下在Mac环境下配置java开发环境,包括jdk,maven,tomcat和idea 下载及安装jdk 首先到官网下载jdk,这里就用目前官网最新的9.0.4 无脑双击安装就可以: 配置jdk 进 ...

  4. mac环境下node.js和phonegap/cordova创建ios和android应用

    mac环境下node.js和phonegap/cordova创建ios和android应用 一介布衣  2015-01-12   nodejs  6888 分享到:QQ空间新浪微博腾讯微博人人网微信 ...

  5. mac 设置php时区,mac环境下PHP系统时区设置

    前言 由于PHP5.0对date()函数进行了重写,因此,目前的日期时间系统时间少了8个小时.在PHP语言中默认设置的是格林威治标准时间,所以要获取本地当前的时间必须更改PHP语言中的时区设置. 设置 ...

  6. UBUNTU环境下编译的openwrt

    UBUNTU环境下编译的openwrt 请执行这个命令以安装编译依赖包:sudo apt-get update 然后再输这个: sudo apt-get install gcc g++ binutil ...

  7. macbook重装系统 选择方案_超详细的mac重装系统教程

    最新的macOS系统具有稳定,安全,长时间使用不卡顿等等很多的优点.而Windows电脑重装系统则是非常常见的事情.不过就算再稳定的系统也难免有需要重装的时候.mac重装系统相对来说还是比较简单的,不 ...

  8. hp ux安装mysql5.1.56_详细讲解Linux环境下MySQL5.1安装步骤

    1.下载MySQL免安装版/二进制版软件(不用编译) 文件格式:MYSQL-VERSION-OS.tar.gz 2.创建MySQL组,建立MySQL用户并加入到mysql组中 (不同版本的Unix中, ...

  9. Mac环境下Android一键自动打包发布到蒲公英平台

    由于项目提测需要编译出apk然后发布到蒲公英平台供测试人员下载,在之前是需要手动编译出apk文件然后打开蒲公英网站再手动上传发布到平台,这样如果要上传几个不同的版本和渠道包就比较麻烦,于是,一个能一键 ...

最新文章

  1. matlab命令fvtool,FVTool: a finite volume toolbox for Matlab
  2. 分享自己针对Automation做的两个成熟的框架(QTP 和Selenium)
  3. tensorflow 启动Session(tf.Session(),tf.InteractivesSession(),tf.train.Supervisor().managed_session() )
  4. 情感分析算法从原理到PaddlePaddle实战全解
  5. 利用阈值分割原理,对给定图像编程实现二值、反二值、截断、反截断、大津阈值、自适应阈值等类型阈值图像分割,给出实现源码和结果图像。
  6. 钉钉宣布品牌全新升级 首次明确回答了自身和生态的关系
  7. 多线程的那点儿事(之嵌套锁)
  8. EDLines: A real-time line segment detector with a false detection control
  9. mysql基础语法之(全文索引)
  10. android自定义广播实现app完全退出
  11. linux下C语言获取微秒级时间
  12. CnOpenData中国上市公司公告数据简介
  13. java开发中推荐的防御sql注入方法_Java防止SQL注入
  14. c语言利用二维数组制作地图,用程序实现RPG背景地图二维数组构建
  15. Android应会的网络基本知识
  16. ora-01017错误处理
  17. mac 终端 计算机名,mac 修改机器名
  18. 大数据Hadoop这些年的发展回顾:致敬那些浪潮之巅的英雄
  19. 双高斯拟合,差距啊,继续努力吧!
  20. 【烟花代码】,情人节,情侣生日礼物代码适用

热门文章

  1. ubuntu下nginx配置静态网页
  2. 【技术】电脑管家的ARP防火墙提示安装驱动装不上问题
  3. Pandas学习——时序数据
  4. Thingsboard入门教程:本地环境搭建和源码编译安装,献给thingsboard编译失败的同学,教程不断完善中,文章最后是thingsboard常见编译失败的问题总结
  5. 虚拟机与主机之间复制粘贴问题解决【亲测有效】
  6. 在win32下编译openssl
  7. 基于微信小程序的火锅店点餐系统小程序
  8. SPI Flash数据移位
  9. 操作系统发展史_有史以来最好的操作系统的可怕的用户界面
  10. pyinstaller打包报错 Failed to execute script ‘xxx‘ due to unhandled exception:input():lost sys.stdin