Frida只是提供了各种API供我们调用,在此基础上可以实现具体的功能,有大佬将各种常见的、常用的功能整合进一个工具,供我们在命令行中使用,这个工具就是Objection.
安装
由于Objection是基于Frida的,所以我们要安装与Frida发布日期相近的版本.
https://pypi.org/project/objection/#history
1
2
3
4
5
|
#pip install frida==14.2.13
#pip install frida-tools==9.2.1
#下载指定版本的objection
pip install objection==1.11.0
|
连接非标准端口
1
2
|
#objection -N -h 192.168.2.111 -p 6666 -g com.android.settings explore
objection -N -h 手机的ip -p frida监听的端口 -g 安卓应用 explore
|
内存漫游相关命令
查看内存加载的库
查看库的导出函数
1
2
3
|
memory list exports libssl.so
#写文件
memory list exports libssl.so --json tst.json
|
列出内存中所有类
1
|
android hooking list classes
|
内存中搜索所有的类
在内存中所有已加载的类中搜索包含特定关键词的类.
1
2
|
#搜索包含display关键词的类
android hooking search classes display
|
内存中搜索所有的方法
在内存中所有已加载的类的方法中搜索包含特定关键词的方法.
1
2
|
#搜索包含display关键词的方法
android hooking search methods display
|
列出类的所有方法
当搜索到了比较关心的类之后,就可以直接查看它有哪些方法.
1
|
android hooking list class_methods com.android.settings.DisplaySettings
|
列出进程所有的activity
1
|
android hooking list activities
|
启动activity
1
|
android intent launch_activity com.android.settings.DisplaySettings
|
列出进程所有的service
1
|
android hooking list services
|
启动service
1
|
android intent launch_service com.android.settings.bluetooth.BluetoothPairingService
|
Hook相关命令
上述操作均是基于在内存中直接枚举搜索,已经可以获取到大量有用的静态信息,我们再来介绍几个方法,可以获取到执行时动态的信息.
在以下命令中加上–dump-args –dump-return –dump-backtrace三个参数,分别用于打印函数的参数、返回值、以及调用栈.
对指定方法进行Hook
比如想看getName()方法,则运行以下命令:
1
2
|
#android hooking watch class_method java.io.File.$init --dump-args
android hooking watch class_method android.bluetooth.BluetoothDevice.getName --dump-args --dump-return --dump-backtrace
|
hook类的所有方法
1
|
android hooking watch class android.bluetooth.BluetoothDevice
|
Jobs命令
1
2
3
4
|
#可以看到objection为我们创建的Hooks数
jobs list
#删除作业
jobs kill <id>
|
主动调用
在堆上搜索实例
1
|
android heap search instances com.android.settings.DisplaySettings
|
调用实例的方法
无参调用
查看源码得知com.android.settings.DisplaySettings类有getPreferenceScreenResId()方法.
1
2
3
|
#无参调用
#android heap execute <handle> <methodname>
android heap execute 0x225a getPreferenceScreenResId
|
有参调用
1
|
android heap evaluate <handle>
|
在进入一个迷你编辑器环境后,输入想要执行的脚本内容,确认编辑完成,然后按Esc键退出编辑,最后按回车键,即会开始执行这行脚本并输出结果.这里的脚本内容和在编辑器中直接编写的脚本内容是一样的.
heap evaluate既可以执行有参函数,也可以执行无参函数.
插件
Wallbreaker
https://github.com/hluwa/Wallbreaker
1
2
3
4
5
6
7
8
9
10
|
#加载插件
plugin load C:/Users/XiaLuoHun/Desktop/Wallbreaker-1.0.2
#查看类信息
plugin wallbreaker classdump --fullname android.bluetooth.BluetoothDevice
#寻找类的实例对象并查看
plugin wallbreaker objectsearch android.bluetooth.BluetoothDevice
#[xxx]
plugin wallbreaker objectdump xxx
|
DexDump
https://github.com/hluwa/FRIDA-DEXDump
1
2
3
4
5
6
|
#加载插件
plugin load C:/Users/Xia/Desktop/FRIDA-DEXDump-1.0.3/frida_dexdump
#Dump
plugin dexdump search
plugin dexdump dump
|
参考链接
实用FRIDA进阶:内存漫游、hook anywhere、抓包