objection

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 # ./frida-server

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 的开启模式
./frida-server -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"

基本用法

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

0x01 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

图片描述

0x02 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

0x03 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