objection的安装

objection对frida做了进一步的封装,通过输入一系列的命令即可完成hook

安装objection之前,先要安装frida和frida-tools

为了有更好的兼容性,版本最好兼容,选择当前frida版本之后更新的objection,objection历史版本查看地址 https://pypi.org/project/objection/1.1.3/#history

fritda 14.2.18,frida-tools 9.2.5,objection 1.11.0

objection使用

启动

1
2
3
启动frida-server
objection -g 包名 explore 进入进程内部
objection日志在C:\Users\Username\.objection下,里面有命令的输出

objection常用命令

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
列出所有已加载的类 
android hooking list classes

列出类的所有方法
android hooking list class_methods <路径.类名>

在所有已加载的类中搜索包含特定关键字的类
android hooking search classes <pattern>

hook类的所有方法(不包括构造方法)
android hooking watch class <路径.类名>

hook类的构造方法
android hooking watch class_method <路径.类名.$init>

hook方法的所有重载
android hooking watch class_method <路径.类名.方法名>

hook方法的参数、返回值和调用栈
android hooking watch class_method <路径.类名.方法名> --dump-args --dump-return --dump-backtrace

hook单个重载函数,需要指定参数类型,多个参数用逗号分隔
android hooking watch class_method <路径.类名.方法名> "<参数类型>"

查看当前的hook任务(如果不取消,hook命令执行之后就会一直后台hook)
jobs list

取消hook任务
jobs kill <job_id>

主动调用

1
2
3
4
5
6
7
8
搜索堆中的实例(会返回实例的hashcode、class和tostring结果)
android heap search instance <类名>

通过实例调用静态和实例方法(用的不多,因为前提是堆中已经有了该对象,这里的handle就是上面实例的hashcode)
调用 android heap execute <handle> <方法名>
调用打印返回值 android heap <handle> <方法名> --return-string
调用带参数方法,进入编辑器环境 android heap evaluate <handle>,然后再运行console.log(clazz.方法名);后者clazz.方法名(参数).value,.value是取返回值,或者clazz.属性名.value

界面跳转

1
2
3
4
5
6
7
查看当前app的activity
android hooking list activities

尝试跳转到对应的activity(activityName就是上面list的结果)
android intent launch_activity <activityName>

不一定每次能跳转成功,有时候有的activity需要用到前面activity传入的值,导致跳转失败

其他命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
枚举内存中所有模块(so文件)
memory list modules

枚举模块中所有的导出函数
memory list exports <so库文件名>

当结果太多,可以将结果导出到txt或者json
memory list exports <so库文件名> --json <路径.文件名>

关闭ssl校验
android sslpinning disable

关闭root检测
android root disable

指定ip和端口连接(需要frida-server调用l参数指定ip和端口,不然这种方式连接不上)
objection -N -h <ip> -p <port> -g <进程名(一般就是包名)> explore

启动前就hook
objection -N -h <ip> -p <port> -g <进程名> explore --startup-command "android hooking watch class '<路径.类名>'"

启动前就hook打印参数、返回值和调用栈
objection -N -h <ip> -p <port> -g <进程名> explore --startup-command "android hooking watch class_method '<路径.类名.方法名>' --dump-args --dump-return --dump-backtrace"

Wallbreaker插件的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
加载插件
plugin load C:\\xxx\\xxx (双\,路径下要有init.py)

搜索内存中的类
plugin wallbreaker classsearch <pattern>

搜索对象
plugin wallbreaker objectsearch <classname>

classdump输出类的结果,若加了--fullname参数,打印数据中的类名会带完整包名
plugin wallbreaker classdump <classname> [--fullname]

objectdump在classdump的基础上,输出指定对象中的每个字段的数据,这里的handle就是打印出来的对象的十六进制地址
plugin wallbreaker objectdump <handle> [--fullname]

其他

objection.apk signapk xxx.apk 给apk签名