首页
社区
课程
招聘
[分享]objection基本操作与实战
发表于: 2023-7-8 18:55 12217

[分享]objection基本操作与实战

2023-7-8 18:55
12217

0x01 前言

objection是我们逆向分析中经常用到的工具之一,可以大幅度的提升我们工作效率。为此我总结了它的一些使用方法,也是对基础的一个巩固。再用1个简单的例子实战演示它的便捷之处。
图片描述

0x02 大纲

1.安装与启动

2.基本用法

3.插件的使用(wallbreaker 、FRIDA-DEXDump、watch_events)

4.实战:不写一行代码,分析加密参数

0x03 安装与启动

objection的介绍

objection是一个运行时移动探索工具包,观察类方法,报告执行情况,由Frida提供支持。支持iOS 和 Android。

objection的安装

1
2
3
4
Python 3.7.1
pip3 install frida==12.8.0
pip3 install frida-tools==5.3.0
pip3 install objection==1.8.4

启动

1.手机端或者模拟器开启对应版本的frida-server

1
2
3
4
5
┌──(root㉿r0env)-[~]
└─# adb shell
bullhead:/ $ su                                                                                 
bullhead:/ # cd data/local/tmp/                                                                 
bullhead:/data/local/tmp # ./fs1280am64

2.获取包名,方式有很多种,我喜欢用以下方式,不仅可以看到包名,而且还能看到当前界面的class,实现了初步的快速定位

1
2
3
4
adb shell dumpsys window | grep CurrentFocus
 
# 结果:
mCurrentFocus=Window{c46d96e u0 com.example.androiddemo/com.example.androiddemo.Activity.LoginActivity}

3.打开方式有两种,分别是包名和指定ip和端口的连接。包名应该是使用率比较高的。(都是attach模式)

1
2
3
4
5
6
7
8
# 包名
objection -g com.example.androiddemo explore
 
# 端口
## frida 的开启模式
./fs1280am64 -l 0.0.0.0:12306
## 指定ip和端口连接
objection -N -h 192.168.31.166 -p 5555 -g com.example.androiddemo explore

4.spawn模式启动。--startup-command "hook的代码段"

1
objection -g com.example.androiddemo explore --startup-command "android hooking watch class com.example.androiddemo.Activity.LoginActivity --dump-args --dump-backtrace --dump-return"

0x04 基本用法

Memory 指令,提取内存信息

1
2
3
4
memory list modules  // 查看内存中加载的库
memory list exports libssl.so  // 查看库的导出函数
memory list exports libart.so --json /root/libart.json //将结果保存到json文件中
memory search --string --offsets-only //搜索内存

任务管理

1
2
3
4
5
# 查看任务列表
jobs list
 
# 关闭任务
jobs kill jobid

root指令

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

关闭 ssl 效验

1
android sslpinning disable

heap 内存堆搜索与执行

1
2
3
4
5
6
7
8
9
# 堆内存中搜索指定类的实例, 可以获取该类的实例id
android heap search instances com.example.androiddemo.Activity.LoginActivity
# 返回:
Class instance enumeration complete for com.example.androiddemo.Activity.LoginActivity
Handle  Class                                           toString()
------  ----------------------------------------------  ------------------------------
0x1fba  com.example.androiddemo.Activity.LoginActivity  com.example.androiddemo.Activity.LoginActivity@d8a5160
# 执行实例方法
android heap execute 0x1fba  a

强制启动activity

1
android intent launch_activity com.example.androiddemo.Activity.FridaActivity1

hook 内存漫游

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 枚举activity
android hooking list activities
# 列出内存中所有的类
android hooking list classes
# 列出类的所有方法
android hooking list class_methods 包名.类名
# 在内存中所有已加载的类中搜索包含特定关键词的类
android hooking search classes 包名包含的关键词
# hook类的所有方法
android hooking watch class 包名.类名
# hook 类的方法,默认会Hook方法的所有重载
android hooking watch class_method 包名.类名.方法
# 如果只需hook其中一个重载函数 指定参数类型 多个参数用逗号分隔
android hooking watch class_method 包名.类名.方法 "参数1,参数2"

日志

1
2
3
4
5
# objection日志文件位置
~/.objection/objection.log
 
# 命令历史文件位置
~/.objection/objection_history

0x05 Wallbreaker插件的使用

Wallbreaker是一个实时分析 Java 堆的有用工具,由frida提供支持。提供一些命令从内存中搜索对象或类,并精美地可视化目标的真实结构。

下载安装

1
2
mkdir -p ~/.objection/plugins/
git clone https://github.com/hluwa/Wallbreaker ~/.objection/plugins/Wallbreaker

加载

1
2
3
4
5
# 第一种方法:
objection -g com.example.androiddemo explore  -P ~/.objection/plugins
# 第二种方法:
objection -g com.example.androiddemo explore
plugin load ~/.objection/plugins/Wallbreaker

命令使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 搜索类
plugin wallbreaker objectsearch LoginActivity
//返回:
com.example.androiddemo.Activity.LoginActivity
com.example.androiddemo.Activity.LoginActivity$1
 
# 根据类名搜索内存中已经被创建的实例,列出 handle 和 toString() 的结果 --fullname 打印完整的包名
plugin wallbreaker classdump com.example.androiddemo.Activity.LoginActivity --fullname
 
# 搜索对象
plugin wallbreaker objectsearch com.example.androiddemo.Activity.LoginActivity
//返回:
[0x2262]: com.example.androiddemo.Activity.LoginActivity@d8a5160
 
# 查看对象的一些属性和方法
plugin wallbreaker objectdump 0x2262 --fullname

图片描述

0x06 FRIDA-DEXDump 插件的使用

frida-dexdump :快速的从内存中搜索和转存DEX

安装

1
git clone https://github.com/hluwa/FRIDA-DEXDump ~/.objection/plugins/dexdump

启动

1
plugin dexdump dump

返回值:

1
[DEXDump]: DexSize=0x1d1f50, DexMd5=7ed584af40ef0b1bc211688395e92c98,SavePath=/root/.objection/plugins/com.example.androidemo/0x7e38c0201c.dex

0x07 watch_events 插件的使用

安装

1
2
3
4
5
git clone https://github.com/hluwa/objection-plugins ~/.objection/plugins  --recurse-submodules
 
objection -g com.app.name explore -P ~/.objection/plugins
 
这里安装成功后,也会自动加载 wallbreaker 、dexdump

开启后,点击屏幕按钮,比如这里我提交了登录按钮,打印出来它的类,实现了快速定位。

1
2
3
4
plugin watch_event onclick
 
com.example.androiddemo on (google: 8.1.0) [usb] # (agent) [WatchEvent] onClick: com.example.androiddemo.Activity.LoginActivity$1
                                                                                                                                                                                                         

0x08 实战:不写一行代码,分析加密参数

1.目标

此次演示的APP是一个通过测试的APP,这里我们就不写一行代码,也不用反编译工具分析代码,全程用objection来分析。通关第一关登录。

2.分析

此次分析的目的找到当前登录页面的类。android hooking list activities
图片描述

3. hook 这个类。

图片描述

4. hook a 方法,打印返回值和调用栈。输出如下:

图片描述

5.提交按钮,得到返回值:

图片描述

6.将得到返回值 2f02e24ae2e1fe880399f27600afa88364e6062bf9bbe114b32fa8f23d03608a 输入密码框中提交代码,发现成功通过第一关。

1
adb shell input text '2f02e24ae2e1fe880399f27600afa88364e6062bf9bbe114b32fa8f23d03608a'

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2023-7-8 20:44 被西贝巴巴编辑 ,原因: 增加一封面标识
收藏
免费 8
支持
分享
最新回复 (3)
雪    币: 3004
活跃值: (30866)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2023-7-8 22:41
1
雪    币: 2334
活跃值: (10386)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2023-7-11 15:54
0
雪    币: 235
活跃值: (520)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
学习下
2023-12-26 16:14
0
游客
登录 | 注册 方可回帖
返回
//