【Frida】【Android】04_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️⃣ Objection介绍
    • 2️⃣ 安装
      • 环境要求
      • 安装
      • 报错
    • 3️⃣ 使用
      • objection --help
      • 进入REPL界面
      • help命令
      • exit命令
      • frida命令
      • ui命令
      • intent命令
      • 内存漫游相关命令:hooking list / search
      • Hook命令:class_method
      • Hook命令:class
      • jobs命令
      • 主动调用命令:heap
      • memory命令
      • root命令
      • 关闭 ssl 效验命令
    • 🛬 文章小结
    • 📖 参考资料

🛫 导读

需求

开发环境

版本号描述
文章日期2024-03-27
操作系统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️⃣ Objection介绍

Objection介绍如果说在Frida提供的各种API基础之上可以实现无数的具体功能,那么Objection就可以认为是一个将各种常用功能整合进工具中供我们直接在命令行中使用的利器,Objection甚至可以不写一行代码就能进行App的逆向分析。功能列表如下:

  • 支持 iOS 和 Android。
  • 检查容器文件系统并与之交互。
  • 绕过 SSL 固定。
  • 转储钥匙扣。
  • 执行与内存相关的任务,例如转储和修补。
  • 浏览和操作堆上的对象。
  • ……

据官方Wiki所描述的,Objection主要有三大组成部分。

  • 第一部分是指Objection重打包的相关组件。Objection可以将Frida运行时所需要的frida-gadget.so重打包进App中,从而完成Frida的无root调试。

  • 第二部分是指Objection本身。Objection是一个Python的pypi包,可以和包含frida-gadget.so这个so文件的App进行交互,运行Frida的Hook脚本,并分析Hook的结果。

  • 第三部分是指Objection从TypeScript项目编译而成的一个agent.js文件。该文件在App运行过程中插了Frida运行库,使得Objection支持的所有功能成为可能。

2️⃣ 安装

环境要求

  • Python的版本大于3.4
  • Python包管理软件pip的版本大于9.0
    • 使用pip --version查看版本
    • 使用pip install pip --upgrade升级pip
  • (可选的)virtualenv,版本大于15。

安装

使用pip命令安装Objection。官网的建议是直接执行以下命令:pip3 install -U objection

objection最新的release版本是1.11.0,已经2021年4月的版本了。不过依然兼容最新的frida,使用该版本可以使用最新的frida。

报错

您可能面临的最常见错误可能如下所示,这意味着您正在尝试使用 Python 2 而不是 Python 3 进行安装。请安装 Python 3.4以上版本解决该问题。

Collecting objection
  Could not find a version that satisfies the requirement objection (from versions: )
No matching distribution found for objection

3️⃣ 使用

objection --help

我们先看下objection的帮助界面:
在这里插入图片描述

从图可知:

  • Objection默认通过USB连接设备,这里不必和Frida的命令行一样通过-U参数指定USB模式连接
  • 通过-g参数指定注入的进程,
  • 通过explore命令进入REPL模式(交互模式)。在进入REPL模式后便可以使用Objection进行Hook的常用命令。
  • 通过-N参数来指定网络中的设备并通过-h参数和-p参数来指定对应设备的IP和端口以进行连接,从而完成对网络设备的注入与Hook。
  • 通过patchapk命令将frida-gadget.so打包进App。

进入REPL界面

根据上面的说明,我们以Android系统的基本应用“设置”为例来介绍Objection的REPL模式常用命令。

  • 首先,我们启动夜神模拟器,并运行相应版本的frida-server。
  • 然后,我们通过frida-ps -Uai找到“设置”应用的App及其包名,具体操作如下:
    在这里插入图片描述
  • 最后,在找到设置的包名com.android.settings后,通过objection注入“设置”应用,注入成功后便进入了Objection的REPL界面,具体操作命令以及结果如下:
    objection -g com.android.settings explore
    在这里插入图片描述

help命令

不知道当前命令的效果是什么时,在当前命令前加help(比如help env)再回车之后就会出现当前命令的解释信息:
在这里插入图片描述

exit命令

退出objection
在这里插入图片描述

frida命令

查看Frida相关信息。
在这里插入图片描述

小编的环境中,一开始执行的时候,报了下面的错误:
在这里插入图片描述
找到该文件,将这行注释了就可以了:
在这里插入图片描述

ui命令

//截图
android ui screenshot [image.png]

//设置FLAG_SECURE权限
android ui FLAG_SECURE false

intent命令

# 强制启动activity
android intent launch_activity com.example.androiddemo.Activity.FridaActivity1

# 强制启动service
android intent launch_service

内存漫游相关命令:hooking list / search

Objection可以快速便捷地打印出内存中的各种类的相关信息,这对App快速定位有着无可比拟的优势,下面介绍几个常用命令。

  • 列出内存中的所有类
    android hooking list classes
    在这里插入图片描述
  • 在内存中所有已加载的类中搜索包含特定关键词的
    android hooking search classes
    在这里插入图片描述
  • 从内存中搜索所有包含关键词key的方法
    android hooking search methods <key>
    从上文中可以发现,内存中已加载的类高达上万个。它们的方法是类的个数的数倍,整个过程会相当耗时。
    在这里插入图片描述
  • 类方法
    搜索到我们感兴趣的类后,可以使用以下命令查看关心的类的所有方法
    android hooking list class_methods
    在这里插入图片描述
  • 列出进程所有的四大组件列表
    android hooking list activities
    android hooking list services
    android hooking list receivers
    android hooking list providers(命令有问题,待解决)
    在这里插入图片描述

Hook命令:class_method

命令格式:android hooking watch class_method <methodName>
这里选择Java中File类的构造函数进行Hook,结果如下:
android hooking watch class_method java.io.File.$init --dump-args --dump-backtrace --dump-return
在这里插入图片描述

在上述命令中,我们加上了–dump-args、–dump-backtrace、–dump-return三个参数,分别用于打印函数的参数、调用栈以及返回值。
这三个参数对逆向分析的帮助是非常大的:

  • 有些函数的明文和密文非常有可能放在参数和返回值中。
  • 打印调用栈可以让分析者快速进行调用链的溯源。

另外需要注意的是:

  • 此时虽然只确定了Hook构造函数,但是默认会Hook对应方法的所有重载
  • 在输出的最后一行显示Registering job 605559,这表示这个Hook被作为一个“作业”添加到Objection的作业系统中了,此时运行job list命令可以查看到这个“作业”的相关信息,如下图所示。可以发现这里的JobID对应的是605559,同时Hooks对应的6正是Hook的函数的数量。
    在这里插入图片描述

当我们在“设置”应用中的任意位置进行点击时,会触发File的构造函数,将打印出堆栈、参数、返回值信息。
在这里插入图片描述

Hook命令:class

命令语法:android hooking watch class <classname>
示例:android hooking watch class java.io.File
在这里插入图片描述

jobs命令

作业系统很好用,用于查看和管理当前所执行Hook的任务,建议一定要掌握,可以同时运行多项Hook作业。


  • 像上面一样的hook命令,就可以增加job

  • jobs kill <Job ID>
  • 查看
    job list
    在这里插入图片描述

主动调用命令:heap

关于主动调用,可以参考《【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446》,在objection中,对应的是android heap相关命令

  • 查找实例
    语法:android heap search instances <classname>
    示例:android heap search instances java.io.File
    在这里插入图片描述
    如图,可以搜索到很多File的实例,并且打印出对应的Hashcode和toString()的结果。其中Hashcode作为Java对象的唯一标识,可以用于实例方法的调用。
  • 调用实例方法(无参数)
    语法: android heap execute <Hashcode> <methodname>
    示例:android heap execute -54300376 getPath
    下面演示一下执行File的getPath方法:
    在这里插入图片描述
  • 调用实例方法(带参数)
    语法: android heap evaluate <Hashcode>
    示例:android heap evaluate -54300376
    执行上面的示例后,objection将进入一个迷你编辑器环境后,输入想要执行的脚本内容,确认编辑完成,然后按Esc键退出编辑器,最后按回车键,即会开始执行这行脚本并输出结果。
    这里的脚本内容和在编辑器中直接编写的脚本内容是一样的(使用File类的canWrite()函数和setWritable()函数进行测试)
    在这里插入图片描述
    执行结果如下图所示:
    在这里插入图片描述

memory命令

# 查看内存中加载的库
memory list modules
# 查看库的导出函数
memory list exports libssl.so
# 将结果保存到json文件中
memory list exports libart.so --json /root/libart.json
# 搜索内存
memory search --string --offsets-only
# 修改内存内容
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)

# dump所有内存
memory dump all <local destination>
# dump指定内存
memory dump from_base <base_address> <size_to_dump> <local_destination>

root命令

# 尝试关闭app的root检测
android root disable
# 尝试模拟root环境
android root simulate

关闭 ssl 效验命令

android sslpinning disable

🛬 文章小结

  • objectin的命令是区分大小写的。
  • 内存漫游相关命令,通过各种操作,让app加载更多的类,可以漫游出更多的内容!!!

📖 参考资料

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

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

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

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

相关文章

在点集的新知识面前百年集论不堪一击

黄小宁 与x∈R相异&#xff08;等&#xff09;的实数均可表为yxδ&#xff08;增量δ可0也可≠0&#xff09;&#xff0c;因各实数的绝对值都可是表示长度的数故各实数都可是数轴上点的坐标&#xff0c;于是x∈R变换为实数yxδ的几何意义可是&#xff1a;一维空间“管道”g内R…

ICP Hacker House 邀你共赴 IC 生态项目开发新风口

为了更好地探索区块链技术前沿&#xff0c;体验作为全面智能合约云平台的互联网计算机&#xff08;Internet Computer Protocol&#xff09;&#xff0c;将数据、内容、计算和用户体验全部托管于链上&#xff0c;IC 生态致力于推动去中心化互联网的深度发展&#xff0c;并将更安…

为何云安全产品需区分四层与七层协议攻击:深入理解与应对策略

引言 随着云计算技术的发展和广泛应用&#xff0c;云安全产品的精细化与智能化需求日益凸显。其中&#xff0c;针对网络攻击的防御措施往往基于对传输协议层面的理解和处理&#xff0c;特别是四层&#xff08;传输层&#xff09;和七层&#xff08;应用层&#xff09;协议攻击…

1、动态数组

1、动态数组 一、什么是数据结构❓1、线性结构2、树形结构3、图形结构 二、线性表三、数组&#xff08;Array&#xff09;四、动态数组&#xff08;Dynamic Array&#xff09;1、接口设计2、动态数组的设计3、查(1) size、isEmpty(2) indexOf、contains(3) get、checkIndex 4、…

实力上榜 | 创新微MinewSemi再获“物联之星”年度企业投资价值50强

近日&#xff0c;由深圳市物联传媒有限公司、AIoT星图研究院、IOTE组委会、深圳市物联网产业协会主办的“物联之星”2023中国物联网行业年度榜单评选结果正式公布。经过层层筛选&#xff0c;创新微MinewSemi获评2023年度“中国物联网企业投资价值50强”&#xff0c;连续两年实力…

应急响应实战笔记04Windows实战篇(1)

第1篇&#xff1a;FTP暴力破解 0x00 前言 ​ FTP是一个文件传输协议&#xff0c;用户通过FTP可从客户机程序向远程主机上传或下载文件&#xff0c;常用于网站代码维护、日常源码备份等。如果攻击者通过FTP匿名访问或者弱口令获取FTP权限&#xff0c;可直接上传webshell&#…

Redis 不再“开源”:中国面临的挑战与策略应对

Redis 不再“开源”&#xff0c;使用双许可证 3 月 20 号&#xff0c;Redis 的 CEO Rowan Trollope 在官网上宣布了《Redis 采用双源许可证》的消息。他表示&#xff0c;今后 Redis 的所有新版本都将使用开源代码可用的许可证&#xff0c;不再使用 BSD 协议&#xff0c;而是采用…

WPF自定义Panel:让拖拽变得更简单

在 WPF 应用程序中&#xff0c;拖放操作是实现用户交互的重要组成部分。通过拖放操作&#xff0c;用户可以轻松地将数据从一个位置移动到另一个位置&#xff0c;或者将控件从一个容器移动到另一个容器。然而&#xff0c;WPF 中默认的拖放操作可能并不是那么好用。为了解决这个问…

http接口测试—自动化测试框架设计(超详细)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、测试需求描述 对服务后台一系列的http接口功能测试。 …

【Git篇】复习git

文章目录 &#x1f354;什么是git⭐git和svn的区别 &#x1f354;搭建本地仓库&#x1f354;克隆远程仓库&#x1f6f8;git常用命令 &#x1f354;什么是git Git是一种分布式版本控制系统&#xff0c;它可以追踪文件的变化、协调多人在同一个项目上的工作、恢复文件的旧版本等…

微信开发者工具创建一个小程序

创建项目 对于上面这个AppID可以自行选择是注册还是测试号&#xff0c;我是使用的测试号&#xff0c;之后再下面选择模板&#xff0c;我这里选择了JS-基础模板。 进入项目后在模拟器中可看到如下页面&#xff1a; 添加提交按钮进行页面跳转 添加需要跳转的文件夹&#xff0c;…

更新时间后OpenStack neutron 401 Unauthorized解决办法

发现时间跟现实时间有偏差&#xff0c;用 ntpdate cn.pool.ntp.org 更新时间后再用neutron 发现报错 401-{uerror: {umessage: uThe request you have made requires authentication., ucode: 401, utitle: uUnauthorized}} 而且用的是账号密码的认证&#xff0c;还是无法正…

跑通飞浆平台的MTMCT 跨镜跟踪示例

想跑通飞浆平台的MTMCT跨镜跟踪示例&#xff0c;真的是难上加难啊&#xff01; 改了几处代码&#xff0c;可以顺利跑通了&#xff0c;特此记录&#xff1a; 第一处&#xff1a;不要拉主线的代码&#xff0c;改成 !git clone https://gitee.com/paddlepaddle/PaddleDetection…

Wagtail-基于Python Django的内容管理系统CMS实现公网访问

目录 ⛳️推荐 前言 1. 安装并运行Wagtail 1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具 3. 实现Wagtail公网访问 4. 固定Wagtail公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给…

【vue3学习笔记(一)】vue3简介;使用vue-cli创建工程;使用vite创建工程;分析工程结构;安装开发者工具

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 对应课程136-140节 课程 P136节 《vue3简介》笔记 课程 P137节 《使用vue-cli创建工程》笔记 官方文档&#xff1a; https://cli.vuejs.org/zh/guide/creating-a-project.html#vue-create官方文档地址 查看vue-cli版本&#x…

人大金仓数据库介绍与使用指南

人大金仓数据库是一款强大的关系型数据库管理系统&#xff0c;具有简单易用、高性能和稳定可靠的特点。本文将介绍人大金仓数据库的安装方法、常用的SQL语法以及相关工具的使用。 一、安装方法&#xff1a; 1、下载人大金仓数据库安装程序&#xff1b; 2、运行安装程序&#…

Visio中存在问题的解决方法

公式缩放 mathtype公式在visio缩放之后&#xff0c;出现了变形。 解决方法&#xff1a;每次输入公式都通过 插入->对象->mathType Equation 新建一个公式。可以避免 注&#xff1a;网上有的说在word中使用mathtype编写公式&#xff0c;之后复制到visio中。 插入波形 选择…

如何制定具有挑战性的绩效目标,同时又能激励员工积极投入工作?

在现代企业管理中&#xff0c;绩效目标的设定不仅是评价员工工作成果的依据&#xff0c;更是激励员工积极投入工作的重要手段。然而&#xff0c;如何制定出既具有挑战性又能激励员工的目标&#xff0c;往往成为管理者需要深思熟虑的问题。本文将探讨如何平衡这两点&#xff0c;…

matplotlib 绘图

matplotlib 绘图 方便设置legend图例的位置 ax1.legend(loc‘upper center’, bbox_to_anchor(0.3, -0.1)) ax2.legend(loc‘upper center’, bbox_to_anchor(0.6, -0.1)) import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm from scipy.inter…

金融案例:构建高效统一的需求登记与管理方案

在金融行业数字化转型背景下&#xff0c;银行等金融机构面临着业务模式创新与数据应用的深度融合。业务上所需要的不再是单纯的数据&#xff0c;而是数据背后映射的业务趋势洞察&#xff0c;只有和业务相结合转化为业务度量指标&#xff0c;经过数据分析处理呈现为报表进行展示…