移动安全-Ojection 基本操作使用指南

一、前言

Objection 是基于 Frida 框架开发的一个工具,它提供了一组便捷的功能和脚本,以简化在移动应用程序中使用 Frida 进行动态分析和漏洞利用的过程。

二、基本配置

安装 objection

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

image-20240119165326651

启动服务端,手机端开启对应版本的 frida-server

1
2
3
4
funsiooo@ubuntu:~/tools/app/platform-tools$ ./adb shell
dipper:/ $ su
dipper:/ # cd data/app_test/
dipper:/data/app_test # ./fs16.1.6

image-20240119170729257

定位 app 包名,寻找需要 hook app 的包名

1
frida-ps -Uia

image-20240212200601158

启动 Objection

1
2
3
4
5
6
7
8
9
10
11
● 正常启动
objection -g <包名> explore

● 指定IP端口
objection -N -h <手机ip地址> -p <端口> -g <包名> explore

● spawn 启动前 hook
objection -N -h 192.168.1.3 -p 9999 -g 包名 explore --startup-command "android hooking watch class '包名.类名'"

● spawn 启动前 Hook 并打印参数、返回值、函数调用栈
objection -N -h 192.168.1.3 -p 9999 -g 包名 explore --startup-command "android hooking watch class_method '包名.类名.方法' --dump-args --dump-return --dump-backtrace"

image-20240119170941606

三、基本使用

启动 Objection 在其终端执行相关命令以便快速获取想要的信息。

查看当前 APP 环境

1
env

image-20240119170956328

导入外部 hook 脚本

1
import /Desktop/Hook.js

Memory 指令,提取内存信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
● 查看内存中加载的库
memory list modules

● 查看某个库的导出函数
memory list exports 文件名.so

● 将结果保存到 json 文件中
memory list exports 文件名.so --json /电脑上的路径/libart.json

● 搜索内存中字符串
memory search "需要搜索的字符串" --string

● 展示搜索到的偏移地址,不展示附近内存
memory search "61 61 61 71 71 71" --offsets-only

● 写入内存数据
memory write 0x12fc9c78 '61 61 61'

● 提取内存数据
memory dump from_base 0x12fc9c78 9 /root/memory.txt

image-20240119171102364

Hook 内存漫游

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
● 枚举 activity
android hooking list activities

● 列出内存中所有的类
android hooking list classes

● 列出类的所有方法
android hooking list class_methods 包名.类名

● 在内存中所有已加载的类中搜索包含特定关键词的类
android hooking search classes 包名包含的关键词

● 搜索内存中所有已加载类的所有方法
android hooking search methods 方法名

● 查找类的所有实例
android heap search instances 类名

● hook 类的所有方法
android hooking watch class 包名.类名

● hook 类单个方法
android hooking watch class_method 包名.类名.方法 --dump-args --dump-backtrace --dump-return

● hook 其中一个重载函数,指定参数类型,多个参数用逗号分隔
android hooking watch class_method 包名.类名.方法 "参数1,参数2"

● 生成hook脚本
android hooking generate simple 包名.类名

查看组件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
● 查看 APP 的组件使用
android hooking list activities
android hooking list services
android hooking list receivers
android hooking list providers

● 获取当前 activity
android hooking get current_activity

● 启动指定 activity
android intent launch_activity xxxx

● 启动指定service
android intent launch_service xxxx

任务管理

1
2
3
4
5
● 查看Hook任务列表
jobs list

● 取消Hook任务
jobs kill jobid

Root 指令

1
2
3
4
5
6
7
8
9
10
11
● 尝试关闭 app 的 root 检测
android root disable

● 尝试关闭 sslpinning 校验
android sslpinning disable

● 尝试模拟 root 环境
android root simulate

● 执行命令
android shell_exec ls

日志

1
2
3
~/.objection/objection.log		// objection日志文件位置

~/.objection/objection_history //命令历史文件位置

四、Objection 插件

Wallbreaker

1
2
● 插件地址
https://github.com/hluwa/Wallbreaker
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
● 加载插件
方法一:
objection -g com.example.androiddemo explore -P ~/.objection/plugins/Wallbreaker(插件路径)

方法二:
objection -g com.example.androiddemo explore
plugin load ~/.objection/plugins/Wallbreaker(插件路径)

● 插件使用
# 搜索类
plugin wallbreaker classsearch <pattern>

# 搜索类的实例对象
plugin wallbreaker objectsearch com.example.androiddemo.Activity.LoginActivity
//返回:
[0x2262]: com.example.androiddemo.Activity.LoginActivity@d8a5160

# 查看对象的一些属性和方法
plugin wallbreaker objectdump 0x2262 --fullname

# 输出类结构,打印数据中类的完整包名
plugin wallbreaker classdump <classname> --fullname

FRIDA-DEXDump

1
2
● 插件地址
https://github.com/hluwa/frida-dexdump
1
2
3
4
5
6
7
8
9
10
11
● 加载插件
方法一:
objection -g com.example.androiddemo explore -P ~/.objection/plugins/Wallbreaker(插件路径)

方法二:
objection -g com.example.androiddemo explore
plugin load ~/.objection/plugins/Wallbreaker(插件路径)

● 插件使用
plugin dexdump dump
plugin dexdump search

watch_events

1
2
● 插件地址
https://github.com/hluwa/objection-plugins
1
2
3
4
5
6
7
8
9
10
● 加载插件
方法一:
objection -g com.example.androiddemo explore -P ~/.objection/plugins/Wallbreaker(插件路径)

方法二:
objection -g com.example.androiddemo explore
plugin load ~/.objection/plugins/Wallbreaker(插件路径)

● 插件使用
plugin watch_event onclick //监控点击事件,并打印出类,

五、参考

1
2
3
4
https://bbs.kanxue.com/thread-277929.htm
https://www.cnblogs.com/lxh2cwl/p/14842544.html
https://mabin004.github.io/2020/08/13/objection操作
https://kuizuo.cn/docs/objection-note/