【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

相关文章

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle