Frida 编译(去特征)

news2024/11/24 3:44:03

Frida 编译(去特征)

  • 编译最新版server
  • 编译往期版server
  • 更改特征
  • 使用定制库 hluwa
  • 本文引用:

本文环境: kali-linux-xfce

编译最新版server

第一步: 下载frida

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

 --recurse-submodules    同时下载子项目

关于 --recurse-submodules 详情:点击前往

第二步: 指定NDK目录

  • 查看当前frida 版本对于NDK的依赖:
vim ~/frida/releng/setup-env.sh

// 24 就是NDK android-ndk-r24  

ndk下载网址:https://developer.android.com/ndk/downloads?hl=zh-cn
在这里插入图片描述

  • 设置NDK
export ANDROID_NDK_ROOT='~/android-ndk-r24'    
// 你下载NDK 的目录
  • 安装nodejs
    • 通过脚本安装nvm
    • 通过nvm 安装nodejs

安装nvm

cat <<"EOF" | bash                              
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
export PATH=$PATH:$HOME/.nvm/nvm.sh
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 --help
EOF

安装nodejs

nvm install node

第三步: 编译frida (按需求选择)

cd frida  // frida 根目录下执行
make core-android-arm    	// 编译arm版本
make core-android-arm64     // 编译arm64版本
make core-android-x86		 // 编译x86	版本
make core-android-x86_64 	// 编译x86_64版本

完成后 会在build/frida-android-arm/bin/
在这里插入图片描述

编译往期版server

第一步: 下载frida

git clone --recurse-submodules https://github.com/frida/frida.git
cd frida
git checkout 15.2.2  # 切换版本

# 当checkout的时候,仅frida这个仓库回滚到15.2.2,其中的submodule 依然是最新的,要让所有submodule也是15.2.2时的版本才行:
git submodule update --recursive  # 或 git submodule update --init --recursive

第二步: 设置NDK (同上, 略)

第三步: 编译 (同上, 略)

更改特征

server.vala 文件,修改 DEFAULT_DIRECTORY

修改前:
	private const string DEFAULT_DIRECTORY = "re.frida.server";
        
修改后: 
    private const string DEFAULT_DIRECTORY = "mytest";

linux-host-session.vala 文件, 修改 HAVE_EMBEDDED_ASSETS 块内容:

#if HAVE_EMBEDDED_ASSETS
    var blob32 = Frida.Data.Agent.get_frida_agent_32_so_blob ();
    var blob64 = Frida.Data.Agent.get_frida_agent_64_so_blob ();
    var emulated_arm = Frida.Data.Agent.get_frida_agent_arm_so_blob ();
    var emulated_arm64 = Frida.Data.Agent.get_frida_agent_arm64_so_blob ();
    agent = new AgentDescriptor (PathTemplate ("frida-agent-<arch>.so"),
				new Bytes.static (blob32.data),
				new Bytes.static (blob64.data),
				new AgentResource[] {
					new AgentResource ("frida-agent-arm.so", new Bytes.static (emulated_arm.data), tempdir),
					new AgentResource ("frida-agent-arm64.so", new Bytes.static (emulated_arm64.data), tempdir),
				},
				AgentMode.INSTANCED,
				tempdir);
#endif
  • 修改 frida-agent-<arch>.so 为 test-<arch>.so
  • 修改 frida-agent-arm.so 和 frida-agent-arm64.so 为 test-arm.so 和 test-arm64.so

system.vala文件 , 修改get_system_tmp 函数:

原代码:
	private extern static string get_system_tmp ();

修改后:
	private  static string get_system_tmp (){
    	return "/data/mytest/";
	}
  • 注意:修改后 extern static 变为 static

运行并查看注入情况:

ps -A |grep com.xunmeng

cat /proc/21584/maps |grep /data/mytest

在这里插入图片描述

使用定制库 hluwa

第一步: 下载hluwa代码:
在frida跟目录下,clone hluwa代码

cd frdia

git clone https://github.com/hluwa/Patchs.git

由于hluwa目前的版本只适配到了frida 15.0.4版本,所以需要将frida代码切换到15.0.4分支

git checkout 15.0.4
git submodule update --recursive

进入frida-core目录,执行合并命令:

git am ../../Patchs/strongR-frida/frida-core/*.patch

合并完成,回到frida目录,需要修改 build/frida_version.h 文件(如果没有则需要手动添加) , 将内容改为:

应用:strongR-frida: io_re_frida_server
#ifndef __FRIDA_VERSION_H__
#define __FRIDA_VERSION_H__

#define FRIDA_VERSION "15.0.4"

#define FRIDA_MAJOR_VERSION 15
#define FRIDA_MINOR_VERSION 0
#define FRIDA_MICRO_VERSION 4
#define FRIDA_NANO_VERSION 0

#endif

第二步: 安装依赖库 lief库

python3 -m pip install lief

第三步: 使用make编译(同上, 略)

注意:【编译问题】 如果遇到找不到Node

 Oops. It appears Node.js is not installed.
We need it for processing JavaScript code at build-time.
Check PATH or set NODE to the absolute path of your Node.js binary.

重新使用命令 nvm install node

运行hluwa的定制frida_server,观察注入情况,可以发现注入的so文件已经全都是随机数:

blueline:/ #  cat /proc/11203/maps|grep /data/local/tmp
922e5000-93107000 r-xp 00000000 fd:02 31011   /data/local/tmp/d3809a7c-7320-4a91-bb7a-d6cfc498aeb6/0555f0b7-52ea-4396-a454-fd500ed48249-32.so
93107000-9315f000 r--p 00e21000 fd:02 31011   /data/local/tmp/d3809a7c-7320-4a91-bb7a-d6cfc498aeb6/0555f0b7-52ea-4396-a454-fd500ed48249-32.so
9315f000-9316d000 rw-p 00e79000 fd:02 31011   /data/local/tmp/d3809a7c-7320-4a91-bb7a-d6cfc498aeb6/0555f0b7-52ea-4396-a454-fd500ed48249-32.so
941b0000-941b1000 r--p 00ecb000 fd:02 31011   /data/local/tmp/d3809a7c-7320-4a91-bb7a-d6cfc498aeb6/0555f0b7-52ea-4396-a454-fd500ed48249-32.so

本文引用:

  • https://bbs.kanxue.com/thread-269889.htm
  • https://juejin.cn/post/7189081333790933053

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/845667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis键值设计

1.1、优雅的key结构 Redis的Key虽然可以自定义&#xff0c;但最好遵循下面的几个最佳实践约定&#xff1a; 遵循基本格式&#xff1a;[业务名称]:[数据名]:[id]长度不超过44字节不包含特殊字符 例如&#xff1a;我们的登录业务&#xff0c;保存用户信息&#xff0c;其key可以…

模型训练技术指南

目录 引言 1. 模型训练的重要性 2. 数据预处理 3. 特征工程 4. 模型选择与评估 5. 参数调优 6. 模型集成 7. 过拟合与欠拟合 8. 模型保存与加载 9. 分布式训练与加速 10. 最佳实践与常见问题 引言 模型训练是机器学习领域中至关重要的一步&#xff0c;它决定了模型的…

处理该文件没有与之关联的应用来执行该操作,若已经安装应用,请在“默认应用设置”页面中创建关联

一、晚上在睡觉前接到一个删除了注册表导致的错误消息 二、解决方法一&#xff1a; 桌面新建 txt&#xff0c;把下面的代码复制粘贴到 txt 文件&#xff0c;然后重命名为1.bat&#xff0c;右键以管理员身份运行。 taskkill /f /im explorer.exe reg add "HKEY_LOCAL_MA…

【数据结构与算法】二叉排序树(BST)

二叉排序树&#xff08;BST&#xff09; 需求&#xff1a; 给你一个数列{7,3,10,12,5,1,9}&#xff0c;要求能够高效的完成对数据的查询和添加。 解决方案分析 使用数组 数组未排序&#xff0c;优点&#xff1a;直接在数组尾添加&#xff0c;速度快。缺点&#xff1a;查找速…

了解华为(H3C)网络设备和OSI模型基本概念

目录 一&#xff0c;认识华为 1.华为发展史 2.华为网络设备介绍 3.VRP概述 二&#xff0c;OSI七层模型 1.七层模型详细表格 2.各层的作用 3.数据在各层之间的传递过程 4.OSI四层网络模型 一&#xff0c;认识华为 官网&#xff1a;https://www.huawei.com/cn/ 1.华为发…

记录一个CMD命令异常 文件名、目录名或卷标语法不正确。

由git clone下来导致缺少符号 使用文档格式转换-转为windows-CR LF即可。 当前测试的命令内容 >cs 文件名、目录名或卷标语法不正确。 ho 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 系统默认的nodepad好像不能转换&#xff0c;直接新建一个文件&am…

【GTest学习】

1. GTest简介&#xff1a; GTest 就是 Google Test, 它是一个免费开源的测试框架, 用于编写测试用 C语言编写的程序(C 程序也能用, 但是需要用 C编译器编译)。gtest的官方网站是&#xff1a;http://code.google.com/p/googletest/ 2.GTest下载与环境搭建&#xff1a; GTest 下…

【雕爷学编程】Arduino动手做(195)---HT16k33 矩阵 8*8点阵屏模块4

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

MFC计算分贝

分贝的一种定义是&#xff0c;表示功率量之比的一种单位&#xff0c;等于功率强度之比的常用对数的10倍&#xff1b; 主要用于度量声音强度&#xff0c;常用dB表示&#xff1b; 其计算&#xff0c;摘录网上一段资料&#xff1b; 声音的分贝值可以通过以下公式计算&#xff1…

python爬虫(七)_urllib2:urlerror和httperror

python爬虫(七)_urllib2&#xff1a;urlerror和httperror urllib2的异常错误处理 在我们用urlopen或opener.open方法发出一个请求时&#xff0c;如果urlopen或opener.open不能处理这个response&#xff0c;就产生错误。 这里主要说的是URLError和HTTPError,以及对它们的错误…

Vue Router 的query和params的区别?

区别一&#xff1a; &#xff08;1&#xff09;query相当于get请求&#xff0c;页面跳转的时候可以在地址栏看到请求参数 &#xff08;2&#xff09;params相当于post请求&#xff0c;参数不会在地址栏中显示&#xff0c;所以用params传值相对安全 &#xff08;简记&#xff1…

架构训练营学习笔记:5-1 计算架构模式之多级缓存架构

序 本节主要是计算架构。 多级缓存架构 缓存与缓冲&#xff1a;通常场景是读缓存&#xff0c;写缓冲。 缓存技术的本质&#xff1a;空间换时间&#xff0c;因此缓存架构属于高性能计算 架构。 缓存设计框架 主要考虑存什么&#xff1f;存多久&#xff1f;存哪里&#xff1f;如…

数字图像处理 --- 相机的内参与外参(CV学习笔记)

Pinhole Camera Model&#xff08;针孔相机模型&#xff09; 针孔相机是一种没有镜头、只有一个小光圈的简单相机。 光线穿过光圈并在相机的另一侧呈现倒立的图像。为了建模方便&#xff0c;我们可以把物理成像平面(image plane)上的图像移到实际场景(3D object)和焦点(focal p…

leetcode357周赛

2810. 故障键盘 核心思想&#xff1a;自己想的笨办法&#xff0c;枚举s&#xff0c;然后遇到i就翻转。比较好的方法就是双端队列&#xff0c;遇到i字母原本往后加的就往前加&#xff0c;然后读的时候反过来读&#xff0c;往前加的就往后加&#xff0c;读的话就从前往后&#x…

Java并发系列之八:ThreadPoolExecutor

线程池的意义 在讲解线程池之前&#xff0c;有些读者可能存在这样的疑惑&#xff1a;为什么需要线程池&#xff0c;线程池有什么优越性&#xff1f; 关于这个问题&#xff0c;主要从两个角度来进行解答: 减少开销 在大部分JVM上&#xff0c;用户线程与操作系统内核线程是1:1…

【论文阅读】对抗溯源图主机入侵检测系统的模仿攻击(NDSS-2023)

作者&#xff1a;伊利诺伊大学芝加哥分校-Akul Goyal、Gang Wang、Adam Bates&#xff1b;维克森林大学-Xueyuan Han、 引用&#xff1a;Goyal A, Han X, Wang G, et al. Sometimes, You Aren’t What You Do: Mimicry Attacks against Provenance Graph Host Intrusion Detect…

第一百二十三天学习记录:C++提高:STL-vector容器(下)(黑马教学视频)

vector插入和删除 功能描述&#xff1a; 对vector容器进行插入、删除操作 函数原型&#xff1a; push_back(ele); //尾部插入元素ele pop_back(); //删除最后一个元素 insert(const_iterator pos, ele); //迭代器指向位置pos插入元素ele insert(const_iterator pos, int cou…

Arduino 项目笔记 | Arduino LED Memory Game 颜色记忆游戏机

成果展示 颜色记忆游戏机 &#xff5c; Arduino DIY 1. 线路链连接 1.1 原理图 1.2 PCB 免费PCB打样 Arduino LED Memory Game 颜色记忆机资料下载 1.3 烧录 Bootloader 第二部分&#xff1a;Burn bootloader 2. 程序实现 #define NOTE_B0 31 #define NOTE_C1 33 #define NOT…

在Linux上进行项目部署--手动和自动

在Linux上进行项目部署–手动和自动 文章目录 在Linux上进行项目部署--手动和自动1、手动部署项目2、通过Shell脚本自动部署项目 1、手动部署项目 1、在IDEA中开发SpringBoot项目并打成jar包 在idea中的Maven中的package&#xff08;基于Springboot项目&#xff09; 2、将jar包…

React Native连接Zebra斑马打印机通过发送CPCL指令打印(Android 和 iOS通用)

自 2015 年发布以来&#xff0c;React Native 已成为用于构建数千个移动应用程序的流行跨平台移动开发框架之一。通常&#xff0c;我们有开发人员询问如何将 Link-OS SDK 与 React Native 应用程序集成&#xff0c;以便在 Zebra 打印机上打印标签。在本教程中&#xff0c;我们将…