【Frida】【Android】01_手把手教你环境搭建

▒ 目录 ▒

    • 🛫 导读
      • 开发环境
    • 1️⃣ 环境搭建
      • 安装Android模拟器
      • 安装Frida CLI
      • 安装Frida Server
      • 端口重定向:`adb forward`
    • 2️⃣ 运行测试
      • `spwan`模式
      • `attach`模式
      • 直接加载脚本
    • 📖 参考资料

🛫 导读

开发环境

版本号描述
文章日期2024-03-24
操作系统Win11 - 22H222621.2715
node -vv20.10.0
npm -v10.2.3
python3.9.9
frida16.2.1
frida-tools12.3.0
objection1.11.0

1️⃣ 环境搭建

注意:我们首先确定使用的各种版本,参考上面的《开发环境》。

安装Android模拟器

为了方便后续学习,这里使用夜神模拟器7.0.5.8做为目标系统,安装Android9系统,如下图所示:
在这里插入图片描述

我们需要注意:

  • 为了避免使用中的各种问题,我们开启Android的root权限
  • nox_adb.exe是夜神自带的adb,我们复制一份,并命名为adb.exe
  • 保证全局只有一个adb.exe,多个版本adb会导致不同软件同时使用时,出现各种异常。
    在这里插入图片描述

安装Frida CLI

这里以常见的Python方式进行安装。

方式一:objection
objection是基于frida的三方工具,包含了很多方便的功能。
之前听说objection跟frida有版本冲突,但是直接安装objection,就可以顺便安装frida相关工具,避免冲突问题,所以我们直接执行pip install objection即可。版本列表如下图所示:
在这里插入图片描述

方式二:frida-tools
这种方式是官方提供的方式,直接执行pip install frida-tools,需要注意与objection版本的冲突问题。

ps: 除了python方式,我们还可以使用node方式,执行命令npm install -g frida-tools

安装Frida Server

由于上小节中,我们使用的frida版本是16.2.1,在开发机器上下载适用于Android设备的Frida Server版本,下载地址为:https://github.com/frida/frida/releases/tag/16.2.1。
下载前,我们需要先通过adb命令查看系统的架构。执行命令adb shell getprop ro.product.cpu.abi,可以看到,架构是x86_64
在这里插入图片描述
所以,我们需要下载frida-server-16.2.1-android-x86_64.xz
在这里插入图片描述

接着,我们需要连接Android设备到计算机,并使用adb将Frida Server推送到设备上:

# fs就是frida-server的缩写
adb push frida-server-16.2.1-android-x86_64 /data/local/tmp/fs

最后,在设备上通过adb shell,运行Frida Server:

adb shell
cd /data/local/tmp/
chmod +x fs
./frida-server &

端口重定向:adb forward

使用adb端口转发将本地端口与Android设备上运行的Frida Server端口连接起来:

adb forward tcp:27042 tcp:27042

2️⃣ 运行测试

Frida操作App的方式有两种。
第一种是spwan模式,简而言之就是将启动App的权利交由Frida来控制。采用这个模式时,即使目标App已经启动,在使用Frida注入程序时还是会重新启动App。在CLI模式中,Frida通过加上-f参数指定包名以spwan模式操作App。
第二种是attach模式,建立在目标App已经启动的情况下,Frida通过ptrace注入程序从而执行Hook的操作。在CLI模式中,Frida通过加上-N参数指定包名以attach模式注入App。

下面我们以系统自带的设置工具(包名为com.android.settings)为例,进行测试。

ps: 旧的frida版本,不添加任何参数,则默认会通过attach模式注入App。

spwan模式

spwan模式会自己启动目标软件com.android.settings,所以我们不必启动该软件,直接执行frida.exe -U -f com.android.settings即可。
运行后,我们执行js命令,打印[*] 开始执行 Hello World
在这里插入图片描述

Java.perform(function() {console.log("[*] 开始执行 Hello World");
});

attach模式

该模式不会启动目标进程,当进程不存在的时候,直接执行frida.exe -U -N com.android.settings会报下面的错误:
在这里插入图片描述

只有按照下面的步骤启动设置后,再执行frida.exe -U -N com.android.settings才能附加到进程上,然后进行交互。
在这里插入图片描述
在这里插入图片描述

直接加载脚本

通常,我们会编写脚本,然后直接加载脚本,方便测试。
frida.exe -U -l .\01_手把手教你环境搭建\index.js -N com.android.settings
效果如下:
在这里插入图片描述

📖 参考资料

  • frida 常见问题和报错https://crifan.github.io/reverse_debug_frida/website/summary_note/common_issue/
  • objection地址:https://github.com/sensepost/objection

ps: 文章中内容仅用于技术交流,请勿用于违规违法行为。

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

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

相关文章

C++按位运算

6.3 按位运算 6.3.1 位运算概述 符号描述运算规则实例&与两个位都为1时,结果才为1。0001&00011,0001&00000,0000&00000000|或两个位都为0时,结果才为0。0001^异或两个位相同为0,相异为1。0001∧00010000,0001∧00001,0000∧…

matlab空间曲线图形

说明:问题来自CSDN-问答板块,题主提问。 需求:如何用子图命令画出平面y2z,z2y与球面x^2y^2z^25相交的空间曲线图形。需要完整代码和结果的图片。 一、先看效果图 二、代码 % 创建figure figure% 创建二维网格,用于定…

element ui实践bug

文章目录 el-table的默认全部展开属性default-expand-all el-table的默认全部展开属性default-expand-all 该属性只有table 初始化时才会生效,后续动态更改无效。 如果想要动态修改default-expand-all 属性,则需要控制table 的重新渲染,可以…

day01_mysql数据类型和运算符_课后练习 - 参考答案

文章目录 day01_mysql_课后练习第1题第2题第3题第4题第5题 day01_mysql_课后练习 第1题 案例: 1、创建数据库day01_test01_library 2、创建表格books 字段名字段说明数据类型允许为空唯一b_id书编号int(11)否是b_name书名varchar(50)否否…

性能调优专题并发编程专题(持续更新)

一、性能调优专题 MySQL相关 一、深入理解MySQL索引底层数据结构与算法 索引概念:索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构: 1、二叉树 缺点:当索引字段有序的时候,不会自动平衡二叉树,数据…

JavaScript单元测试jasmine学习(一)

介绍: jasmine是用于测试JavaScript的一种测试框架,BDD(Behavior Driven Development)行为驱动开发。不依赖于任何其他JavaScript框架,也不需要DOM 准备工作: 1. 首先添加jasmine到自己的项目中 npm install --save-dev jasmine 2. 在项目…

【热门话题】ECMAScript vs JavaScript:理解两者间的联系与区别

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 ECMAScript vs JavaScript:理解两者间的联系与区别1. ECMAScript&am…

小目标检测常见解决策略总结

1. 引言 尽管目标检测算法取得了长足的发展,例如 Faster RCNN、YOLO、SSD、RetinaNet、EfficientDet 等。通常,这些模型是在 COCO数据集上训练的。它是一个包含各种对象类别和标注的大规模数据集,因此在训练对象检测器方面很受欢迎。然而&am…

基础语法——字符串

字符串数组的常用操作 需引用头文件#include<cstring> #include<iostream> #include<cstring>using namespace std;int main(){char str[100];char a[10],b[10];strlen(str); //求字符串的长度&#xff0c;不包括\0 ,O(n)strcmp(a,b); //按字典序比较a,b的…

应急响应实战笔记04Windows实战篇(1)

第1篇&#xff1a;FTP暴力破解 0x00 前言 ​ FTP是一个文件传输协议&#xff0c;用户通过FTP可从客户机程序向远程主机上传或下载文件&#xff0c;常用于网站代码维护、日常源码备份等。如果攻击者通过FTP匿名访问或者弱口令获取FTP权限&#xff0c;可直接上传webshell&#…

RuoYi-Vue-Plus(基础知识点jackson、mybatisplus、redis)

一、JacksonConfig 全局序列化反序列化配置 1.1yml中配置 #时区 spring.jackson.time-zoneGMT8 #日期格式 spring.jackson.date-formatyyyy-MM-dd HH:mm:ss #默认转json的属性&#xff0c;这里设置为非空才转json spring.jackson.default-property-inclusionnon_null #设置属性…

直接插入排序(六大排序)

本期讲解排序与六大排序中的希尔排序 —————————————————————— 1.排序的概念及其运用 1.1排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。稳定性…

Android 锁屏界面启动流程

本文基于Android 7.1 在开机过程中&#xff0c;Systemserver 会启动 WindowManagerService,并调用其systemReady 方法。进而调用PhoneWindowManager的systemReady方法 Overridepublic void systemReady() {mKeyguardDelegate new KeyguardServiceDelegate(mContext,this::onK…

win10开启了hyper-v,docker 启动还是报错 docker desktop windows hypervisor is not present

问题 在安装了docker windows版本后启动 docker报错docker desktop windows hypervisor is not present 解决措施 首先确认windows功能是否打开Hyper-v 勾选后重启&#xff0c;再次启动 启动后仍报这个错误&#xff0c;是Hyper-v没有设置成功 使用cmd禁用再启用 一.禁用h…

Activiti7学习大纲及环境-Activiti7从入门到专家(2)

学习大纲 入门系列 开发环境及源码编译流程设计器核心API简单流程示例启动与结束事件边界事件中间事件用户任务手动任务接受任务服务任务脚本任务业务规则任务排他网关并行网关包容网关事件网关子流程调用活动泳池泳道执行监听器任务监听器全局监听器真实业务流程 进阶系列 …

基于react native的自定义轮播图

基于react native的自定义轮播图 效果示例图示例代码 效果示例图 示例代码 import React, {useEffect, useRef, useState} from react; import {Animated,PanResponder,StyleSheet,Text,View,Dimensions, } from react-native; import {pxToPd} from ../../common/js/device;c…

蓝桥集训之子矩阵

蓝桥集训之子矩阵 核心思想&#xff1a;二维单调队列 先求每一行中列长为B的区间的最值再在最值数组中求行长为A的区间的最值 –> 区间最值最后遍历所有最大最小值相乘的结果 #include <iostream>#include <cstring>#include <algorithm>using namespa…

序列化与反序列化介绍

文章目录 一、序列化与反序列化二、PHP反序列化漏洞成因三、JAVA反序列化 一、序列化与反序列化 在PHP语言开发层面上基本都是围绕着serialize()&#xff0c;unserialize()这两个函数。serialize()函数序列化对象后&#xff0c;可以很方便的将它传递给其他需要它的地方&#x…

java 设计模式 深入理解

在学习设计模式的时候&#xff0c;以前学习了下总以为理解了&#xff0c;但是在实际工作中基本上用不起来。在学习拆书后&#xff0c;想到用讲的方式去学习和思考的时候&#xff0c;要想讲清楚&#xff0c;就要深入理解其中的原理。在重新整理和写下来的过程中&#xff0c;感觉…

蓝桥杯刷题--python-28-并查集

528. 奶酪 - AcWing题库 T=int(input()) def union(p,i,j): p1=parent(p,i) p2=parent(p,j) p[p1]=p2 def parent(p,i): root=i while p[root]!=root: root=p[root] while p[i]!=i: x=i;i=p[i];p[x]=root return root class Node:…