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签名