1. objection的安装
a) objection对frida做了进一步的封装,通过输入一系列的命令即可完成hook。忘记命令时还可以按空格弹出对应提示信息,大大降低了hook框架的使用门槛
b) 安装objection之前,先安装frida和frida-tools
c) 为了有更好的兼容性,objection的版本,最好选择当前frida版本之后更新
objection更新时间查看地址 https://pypi.org/project/objection/1.1.3/#history
frida更新时间查看地址
d) 教程使用的各版本号
pip install frida==14.2.18
pip install frida-tools==9.2.5
pip install objection==1.11.0
常见报错:
pkg_resources.ContextualVersionConflict: (Pygments 2.11.2 (d:\soft\python386\lib\site-packages), Requirement.parse('Pygments<=2.11.1,>=1.6'), {'litecli'})
降级Pygments库到2.11.1即可
2. objection的使用
注入进程,如果objection没有找到进程,会以spwan方式启动进程
objection --help
objection -g <进程名> explore
objetion log 文件位置 C:\Users\Administrator\.objection
3. api
列出所有已加载的类
android hooking list classes
在所有已加载的类中搜索包含特定关键字的类
android hooking search classes <pattern>
列出类的所有方法
android hooking list class_methods <路径.类名>
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
如:java.lang.String.getBytes
hook单个重载函数,需要指定参数类型,多个参数用逗号分隔
android hooking watch class_method <路径.类名.方法名> "<参数类型>"
查看与取消hook
jobs list
jobs kill <jobId>
指定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 -s "android hooking watch class_method <路径.类名.方法名> --dump-args --dump-return --dump-backtrace"
如果启动前需要运行多条命令,可以写到一个文件中,使用-c选项
objection -g <进程名> explore -c "命令文件的路径(一行一条命令,不加引号)"
不常用的操作
关闭ssl校验 android sslpinning disable
关闭root检测 android root disable
搜索堆中的实例
android heap search instances <类名>
通过实例调用静态和实例方法
调用 android heap execute <handle> <方法名>
调用打印返回值 android heap execute <handle> <方法名> --return-string
调用带参数方法,进入编辑器环境
android heap evaluate <handle>
console.log(clazz.getCalc(100, 200));
查看当前app的activity
android hooking list activities
尝试跳转到对应activiy
android intent launch_activity <activiyName>
枚举内存中所有模块
memory list modules
枚举模块中所有导出函数
memory list exports <so库名>
当结果太多,可以将结果导出到本地文件中
memory list exports <so库名> --json <路径.文件名>
objection插件Wallbreaker
Wallbreaker-master
1. objection的插件加载
plugin load 插件路径 name
name指的是自己定义的插件名字,将来使用这个名字访问插件,区分大小写
2. 搜索类
plugin Wallbreaker classsearch <pattern>
3. 搜索对象
plugin Wallbreaker objectsearch <classname>
获得对象值
4. classdump输出类结构,若加了--fullname参数,打印数据中的类名会带完整包名
plugin Wallbreaker classdump <classname> [--fullname]
5. objectdump在classdump的基础上,输出指定对象中的每个字段的数据
plugin Wallbreaker objectdump <handle> [--fullname]
handle填对象值0x1115