【Frida】【Android】05_Objection实战

2024-03-28 21:28

本文主要是介绍【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: 文章中内容仅用于技术交流,请勿用于违规违法行为。

这篇关于【Frida】【Android】05_Objection实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/856733

相关文章

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount