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)-[~] └─ bullhead:/ $ su bullhead:/ bullhead:/data/local/tmp
|
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-server -l 0.0.0.0:12306
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
| 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
| android hooking list activities
android hooking list classes
android hooking list class_methods 包名.类名
android hooking search classes 包名包含的关键词
android hooking watch class 包名.类名
android hooking watch class_method 包名.类名.方法
android hooking watch class_method 包名.类名.方法 "参数1,参数2"
|
日志
1 2 3 4 5
| ~/.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
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
| [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]
|