【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:27043

REM # 重启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: 文章中内容仅用于技术交流,请勿用于违规违法行为。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kibana操作Elasticsearch教程

文章目录 简介ES文档操作创建索引查看索引创建映射字段查看映射关系字段属性详解typeindexstore 字段映射设置流程 新增数据新增会随机生成id新增自定义id智能判断 修改数据删除数据查询基本查询查询所有(match_all)匹配查询多字段查询词条匹配多词条精确…

HarmonyOS 应用开发之创建PageAbility

开发者需要重写app.js/app.ets中的生命周期回调函数,开发者通过DevEco Studio开发平台创建PageAbility时,DevEco Studio会在app.js/app.ets中默认生成onCreate()和onDestroy()方法,其他方法需要开发者自行实现。接口说明参见前述章节&#xf…

maven 依赖机制

安全工程师为啥关注maven依赖 log 4j事件之后,大家开始更加关注开源组件安全漏洞这个事。纷纷引入SCA 软件成分分析工具来识别项目中存在的开源组件和漏洞。 在sca工具扫描之后,会报出一大堆组件,review这个事就是安全团队投入时间来研判了…

【Linux多线程】线程的同步与互斥

【Linux多线程】线程的同步与互斥 目录 【Linux多线程】线程的同步与互斥分离线程Linux线程互斥进程线程间的互斥相关背景概念问题产生的原因: 互斥量mutex互斥量的接口互斥量实现原理探究对锁进行封装(C11lockguard锁) 可重入VS线程安全概念常见的线程不安全的情况…

是谁?阻止CXL在AI场景大展身手~

CXL虽然被视为业内新宠,但好像在AI场景的应用反而没有得到广泛的响应。 AI场景对内存带宽、容量以及数据一致性有着极高需求,特别是在深度学习训练和推理过程中,大量数据需要在CPU、GPU、加速器以及内存之间快速、高效地流动。CXL作为一种新…

Java基础入门day24

day24 abstract 抽象:似是而非,像又不是,具备某种对象的特征,但不完整 生活中的抽象:动物,并不真实存在的事物 程序中的抽象:不应该被创建的对象,动物近视一种会吃会睡的对象&#…

Netty核心原理剖析与RPC实践16-20

Netty核心原理剖析与RPC实践16-20 16 IO 加速:与众不同的 Netty 零拷贝技术 今天的课程我们继续讨论 Netty 实现高性能的另一个高阶特性——零拷贝。零拷贝是一个耳熟能详的词语,在 Linux、Kafka、RocketMQ 等知名的产品中都有使用,通常用于…

【单调栈】力扣84.柱状图中最大的矩形

上篇文章我们介绍了使用 无重复值 单调栈代码解决 含有重复值 的问题,在文章的最后,留下了一道考察相同思想的题目,今天我们来看看如何套路解决该题。 (还没看过前几篇介绍的小伙伴赶快关注,在 「单调栈」 集合里查看…

通过node 后端实现颜色窃贼 (取出某个图片的主体rgb颜色 )

1.需求 我前端轮播图的背景色 想通过每一张轮播图片的颜色作为背景色 这样的话 需要通过一张图片 取出图片的颜色 这个工作通过前端去处理 也可以通过后端去处理 前端我试了试 color-thief 的插件 但是 这个插件是基于canvas 的模式来的 我需要在小程序中使用这个插件 而且是…

HarmonyOS-如何使用ArkTS声明式语法和基础组件,实现待办列表。

介绍 本篇Codelab将介绍如何使用ArkTS声明式语法和基础组件,实现简易待办列表。效果为点击某一事项,替换标签图片、虚化文字。效果如图所示: 相关概念 ArkTS语法:ArkTS是HarmonyOS的主要应用开发语言。ArkTS基于TypeScript&…

2024/3/29(MybatisPlus插件代码生成,静态工具,逻辑删除,枚举处理器.JSON处理器,分页插件,通用分页实体)

jdbc:mysql://localhost:3306/mp?useUnicodetrue&characterEncodingutf8&serverTimezoneUTC 需要这样 日志查看级别

【C++杂货铺】内管管理

目录 🌈前言🌈 📁 C/C中内存分布 📁 new 和 delete的使用 📁 new 和 delete的优点 📁 new 和 delete的原理 📂 operator new 和 operator delete函数 📂 内置类型 &#x1f4c2…

代码随想录-DAY4|leetcode-24,19,142,面试题 02.07

文章目录 22. 两两交换链表中的节点19. 删除链表的倒数第N个节点size-n方式删除双指针方式(推荐) 面试题 02.07. 链表相交142. 环形链表II暴力解法快慢指针(推荐) 22. 两两交换链表中的节点 leetcode链接:两两交换链表…

怎样一次性给多篇word文档标注拼音?一键批量注音

随着办公自动化的普及,我们经常会遇到需要处理大量Word文档的情况。在这些文档中,有时需要将文字标注上拼音,特别是在处理一些包含生僻字或需要拼音辅助阅读的文档时。然而,手动一篇篇地给Word文档标注拼音不仅效率低下&#xff0…

Docker搭建LNMP环境实战(08):安装php-fpm

1、编写php测试文件 在文件夹&#xff1a;/mnt/hgfs/dockers/test_site/www目录下创建文件&#xff1a;test.php&#xff0c;内容为&#xff1a; <?phpecho "hello world!!!!!! From test.php"; ?>2、编写php-fpm部署配置文件 在文件夹&#xff1a;/mnt/h…

mars3d兼容老版本Chrome 浏览器的附件参考记录

问题 源代码里面是es5的写法&#xff0c;怎么在浏览器上就转换了。 mars3d会将es5转es6吗&#xff1f; 看加载的Cesium.js源代码没有问题&#xff0c;但是模块里面的源代码已经转换了&#xff0c;再低版本浏览器上面会无法运行“Uncaught SyntaxError: Unexpected token ?”…

JVM(一)——内存结构

一. 前言 1、什么是 JVM? 1&#xff09;定义&#xff1a; Java Virtual Machine - java 程序的运行环境&#xff08;java 二进制字节码的运行环境&#xff09; 2&#xff09;好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收功能数组下标越…

测试员再也不怕漏测!花2年总结的这个测试模板太全了!

作为一个测试&#xff0c;最尴尬的莫过于分给你的task&#xff0c;别人做交叉兼容测试的时候&#xff0c;在你负责的内容里找出了很多你没有测试出来的bug。 我也曾因为测试不全被组长在工作群里艾特。说实话&#xff0c;真的恨不得找个地方躲起来。 为了避免自己再次出现类似…

用友BI告诉你,分析指标计算也可以很简单

分析数据&#xff0c;特别是分析财务数据&#xff0c;要计算得分析指标都非常多&#xff0c;涉及的数据来源也是各有不同&#xff0c;一旦哪个环节出了错就一切都得重来。难道分析指标的计算就没有更快更简单的办法了&#xff1f;奥威-用友BI告诉你&#xff0c;分析指标计算有别…

【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …