【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

相关文章

网页解析 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

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目