【Frida】【Android】05_Objection实战

🛫 系列文章导航

  • 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950
  • 【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446
  • 【Frida】【Android】03_RPC https://blog.csdn.net/kinghzking/article/details/137050967
  • 【Frida】【Android】04_Objection安装和使用 https://blog.csdn.net/kinghzking/article/details/137071768
  • 【Frida】【Android】05_Objection实战 https://blog.csdn.net/kinghzking/article/details/137071826

▒ 目录 ▒

    • 🛫 系列文章导航
      • 开发环境
    • 1️⃣ 环境准备
      • 安装apk
      • 启动frida-server等
      • 启动Junior的计算器
    • 2️⃣ Objection实战
      • 启动objection
      • 获得计算器Activity类
      • Hook 目标CalculatorActivity类
      • Hook 目标CalculatorActivity类方法caculate
      • jadx查看`calculate`方法实现
      • Hook `Arith.add`方法
      • 关于修改参数和返回值的说明
      • 【失败】主动调用`Arith.add`方法
    • 🛬 文章小结
    • 📖 参考资料

开发环境

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

1️⃣ 环境准备

安装apk

下面以样例程序Junior.apk为例(样本来自于《Android Studio开发实战:从零基础到App上线(第2版)》一书中的Junior样例,源代码在https://github.com/aqi00/android2上)。
也可以通过https://download.csdn.net/download/kinghzking/89045465下载获得。
也可以在gitcode.com地址 https://gitcode.com/android8/AndroidFridaBeginnersBook中找到。

直接将apk拖拽到模拟器中,会提示安装失败。
通过命令adb install junior.apk安装会显示出报错信息:Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
这是因为,Android Studio 3.0之后,在打包生成debug apk时,在apk的manifest文件的application标签里自动添加 android:testOnly="true"属性。
可以通过增加-t方式安装:adb install -t junior.apk

启动frida-server等

REM # 开启logcat
start cmd /k "adb logcat && PAUSE"REM # 端口映射
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043REM # 重启frida-server
start cmd /k adb shell pkill -9 fs64
ping 127.0.0.1 -n 2
start cmd /k adb shell /data/local/tmp/fs64 -l 0.0.0.0:27042

启动Junior的计算器

本小节将根据Junior应用重点计算器界面进行讲解。

  • 打开junior:
    在这里插入图片描述
  • 如上图,打开“简单计算器”:
    在这里插入图片描述

2️⃣ Objection实战

启动objection

经过第一小节的步骤,我们直接执行下面命令即可启动objection:
objection -g com.example.junior explore
在这里插入图片描述

获得计算器Activity类

  • 方案一:adb shell dumpsys window | findstr mCurrentFocus
    在这里插入图片描述
  • 方案二:adb shell dumpsys activity activities | findstr ActivityRecord
    显示的比较多,根据这些类猜测一个。
    在这里插入图片描述
  • 方案三:android hooking list activities
    在这里插入图片描述

上面三种方案,可以依此尝试,最终,我们可以确定目标类为:com.example.junior.CalculatorActivity

Hook 目标CalculatorActivity类

执行命令:
android hooking watch class com.example.junior.CalculatorActivity
在这里插入图片描述

在界面上输入1+1=
在这里插入图片描述

将打印如下内容:
在这里插入图片描述
不难看出,等号最终调用了caculate方法。

Hook 目标CalculatorActivity类方法caculate

为了查看更多的信息,我们Hookcaculate方法,打印参数、返回值、堆栈。
android hooking watch class_method com.example.junior.CalculatorActivity.caculate --dump-args --dump-backtrace --dump-return

在界面上输入1+1=,将打印如下内容:
在这里插入图片描述
从中可以看出,的确是onclick调用了calculate方法。

jadx查看calculate方法实现

通过jadx查看calculate方法实现,如下图:
在这里插入图片描述
我们可以看出,最终调用了Arith.add方法。

Hook Arith.add方法

执行下面命令,Hook Arith.add方法:
android hooking watch class_method com.example.junior.util.Arith.add --dump-args --dump-backtrace --dump-return

在界面上输入1+1=,将打印如下内容:
在这里插入图片描述

关于修改参数和返回值的说明

Objection只有一个android hooking set return_value命令可以修改返回值,而且只能将返回值改为true或者false。
在这里插入图片描述

所以,想修改参数和返回值,请使用frida命令!!!

【失败】主动调用Arith.add方法

由于com.example.junior.util.Arith.add是静态(static)方法,无法使用objection调用。
目前只知道通过heap获取实例对象,然后通过android heap 命令执行非静态方法。
如有其它objection命令或者插件可以实现,欢迎留言。

这里记录下frida的方式吧。

    Java.perform(function(){var Arith = Java.use('com.example.junior.util.Arith')var JavaString = Java.use('java.lang.String')var result  = Arith.sub(JavaString.$new("123"),JavaString.$new("111"))console.log("123 - 111 =",result)})

🛬 文章小结

本节通过实例演示objection的使用,算是对上一节《【Frida】【Android】04_Objection安装和使用 https://blog.csdn.net/kinghzking/article/details/137071768》的验证。

总的来说,逆向过程中,

  • Objection起到辅助定位的作用。
  • 分析完成后,可以通过frida脚本修改参数、主动调用,完成具体的功能
  • 最后可以通过python和ipc实现完整的应用。

📖 参考资料

  • 《安卓Frida逆向与抓包实战》
  • 【Frida】 00_简单介绍和使用 https://blog.csdn.net/kinghzking/article/details/123225580
  • 本节源码地址 https://gitcode.com/android8/AndroidFridaBeginnersBook

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

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

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

相关文章

线程创建方式、构造方法和线程属性

欢迎各位!!!推荐PC端观看 文章重点:学会五种线程的创造方式 目录 1.开启线程的五种方式 2.线程的构造方法 3.线程的属性及获取方法 1.开启线程的五种方式 创造线程的基本两步:(1)使用run方法…

2024最新华为OD机试试题库全 -【二叉树计算】- C卷

1. 🌈题目详情 1.1 ⚠️题目 给出一个二叉树如下图所示: 请由该二叉树生成一个新的二叉树,它满足其树中的每个节点将包含原始树中的左子树和右子树的和。 左子树表示该节点左侧叶子节点为根节点的一颗新树;右子树表示该节点右侧叶子节点为根节点的一颗新树。 1.2 �…

智能车主控板原理图原理讲解

智能车主控板原理图原理讲解 综述:本篇文章对智能车主控板的一部分电路进行原理分析,文末附加整体原理图。 1. 电源电路 (1)通过外接电池供电并通过电源模块电路,运用稳压芯片lm2940,将电源电压转化为5V…

分布式处理

前言 大家好,我是jiantaoyab,这是我作为学习笔记原理篇的最后一章,一台计算机在数据中心里是不够的。因为如果只有一台计算机,我们会遇到三个核心问题。第一个核心问题,叫作垂直扩展和水平扩展的选择问题,…

【leetcode】双“指针”

标题:【leetcode】双指针 水墨不写bug 我认为 讲清楚为什么要用双指针 比讲怎么用双指针更重要! (一)快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数…

排序C++

题目 法1 sort升序排序&#xff0c;再逆序输出 #include<iostream> #include<algorithm> using namespace std;const int N 5e53;//注意const&#xff0c;全局 int a[N]; int main() {//错误int N5e53;//错误const int a[N];int n;cin >> n;for (int i 1;…

HBase Shell基本操作

一、进入Hbase Shell客户端 先在Linux Shell命令行终端执行start-dfs.sh脚本启动HDFS&#xff0c;再执行start-hbase.sh脚本启动HBase。如果Linux系统已配置HBase环境变量&#xff0c;可直接在任意目录下执行hbase shell脚本命令&#xff0c;就可进入HBase Shell的命令行终端环…

【容器源码篇】Set容器(HashSet,LinkedHashSet,TreeSet的特点)

文章目录 ⭐容器继承关系&#x1f339;Set容器&#x1f5d2;️HashSet源码解析构造方法public HashSet()public HashSet(Collection<? extends E> c)public HashSet(int initialCapacity, float loadFactor)HashSet(int initialCapacity, float loadFactor, boolean dum…

VLAN实验记录---对抗遗忘

sw1的接口6应该调成混杂模式&#xff0c;因为pc2,4,5,6的pvid各不相同而网段相同&#xff0c;所以往上去路由时应该剥离标记&#xff08;VLAN里面是标记而不是标签&#xff09;出去&#xff0c;这样 路由器上的物理接口用来管理不带标记的流量&#xff0c;而vlan2流量的往上打上…

记录 AI绘图 Stable Diffusion的本地安装使用,可搭建画图服务端

开头 最近刷短视频看到了很多关于AI绘图&#xff0c;Midjourney&#xff0c;gittimg.ai&#xff0c;Stable Diffusion等一些绘图AI工具&#xff0c;感受到了AI绘画的魅力。通过chatGPT生成关键词再加上绘图工具&#xff0c;真是完美&#xff0c;文末教大家如何用gpt提词 Midj…

每日算法之接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1…

打造核心竞争力:高效Web系统数据中台的设计与实践_光点科技

在数字化的浪潮中&#xff0c;数据已经成为企业赖以生存和发展的核心资源。一个高效的Web系统数据中台&#xff0c;能够赋予企业在激烈的市场竞争中立于不败之地的能力。本文将深入探讨如何设计和实施一个能够提升企业数据管理水平和支持业务决策的高效数据中台架构。 数据中台…

【YOLOv8训练结果评估】YOLOv8如何使用训练好的模型对验证集进行评估及评估参数详解

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

P8623 [蓝桥杯 2015 省 B] 移动距离 Python

[蓝桥杯 2015 省 B] 移动距离 题目描述 X 星球居民小区的楼房全是一样的&#xff0c;并且按矩阵样式排列。其楼房的编号为 $1,2,3, \cdots $ 。 当排满一行时&#xff0c;从下一行相邻的楼往反方向排号。 比如&#xff1a;当小区排号宽度为 6 6 6 时&#xff0c;开始情形如…

腾讯云优惠券领取及使用常见问题解答

随着云计算的普及&#xff0c;腾讯云作为国内领先的云计算服务提供商&#xff0c;为越来越多的企业和个人提供了丰富的云产品和服务。为了帮助用户更好地了解和使用腾讯云优惠券&#xff0c;本文将为大家解答关于腾讯云优惠券领取及使用的常见问题。 一、腾讯云优惠券概述 腾讯…

软件设计师24--概念设计阶段

软件设计师24--概念设计阶段 考点1&#xff1a;概念设计过程考点2&#xff1a;E-R图属性E-R模型-联系类型判断例题&#xff1a;E-R模型-联系类型判断扩充的E-R模型 考点1&#xff1a;概念设计过程 需求分析 --> 抽象数据 --> 设计局部ER模型 --> 合并局部模型消除冲突…

二维前缀和与二维差分的表示

前缀和&#xff1a; 上述图片是求范围内的总和的图和公式 上述图片是初始化前缀和数组的图和公式 差分&#xff1a; 上图是差分公式 #include<iostream> #include<climits> #include<algorithm> #include<cstring> #include<cstdio> #include&l…

vue 借助vue-amap插件对高德地图的简单使用

需求&#xff1a;实现点击获取经纬度、定位、对特殊位置标点及自定义信息窗体功能。 高德地图的官网API&#xff1a;概述-地图 JS API 1.4 | 高德地图API vue-amap的中文文档&#xff1a;组件 | vue-amap 实现&#xff1a; 1、安装vue-amap插件 npm install vue-amap --save…

代码随想录第23天| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树 669. 修剪二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 你修剪的方式不对&#xff0c;我来给你纠正一下&#xff01;| LeetCode&#xff1a;669. 修剪二叉搜索树_哔哩哔哩_bilibili 给你二叉搜索树的根节点 root …

大数据之scala

为什么学习scala spark是新一代内存级大数据计算框架&#xff0c;是大数据的重要内容 spark就是使用scala编写的&#xff0c;因此为了更好的学习spark&#xff0c;需要掌握scala这门语言 spark的兴起&#xff0c;带动scala语言的发展 scala发展历史 联邦理工学院的马丁 奥德…