Objection 介绍
objection是一个基于Frida开发的命令行工具,它可以很方便的Hook Java函数和类,并输出参数,调用栈,返回值。
1.1 安装Objection
pip install objection
1.2 启动Objection
-
保证Frida server开启
-
命令行输出
objection -g packageName explore
即可进入objection提供的交互界面,类似于Frida的cli交互环境,我们下面的操作都是基于这个交互界面。
1.3 Hook Java方法
android hooking watch class_method com.xxx.xxx.methodName --dump-args --dump-backtrace --dump-return
有时候我们会遇到内部类或者匿名内部类的Hook,不用担心,假设类为com.test.a,内部类为b,完整路径即为com.test.a$b,如果为匿名内部类,可以查看其smali代码,往往命名为com.test.a$1这种形式。
1.4 Hook Java类
android hooking watch class com.xxx.xxx
对类的Hook不提供完整的调用栈打印等功能(存疑)
1.5 Spawn方式Hook
从Objection的使用操作中我们可以发现,Obejction采用Attach附加模式进行Hook,这可能会让我们错过较早的Hook时机,可以通过如下的代码启动Objection,引号中的objection命令会在启动时就注入App。
objection -g packageName explore --startup-command 'android hooking watch xxx'
1.6 免Root运行Frida
Frida提供了免root的Hook方案,即手动注入frida-gadget库, Objection对其进行了封装,但实际没啥用(搞逆向的怎么会没一台root机器)。除此之外,Objection提供了对IOS的Hook,以及对sslunpinng的处理,Hook剪切板/Root检测等,但实际使用中用处不大,一般会选择其他专门的工具,此处不提。
详情参考Objection github目录下objection—console—helpfiles
1.7 Objection的缺陷
- 缺少对Native层的支持
- 对象类型数据的打印有问题,比如Byte array和Json,会显示成[object, object]
- 对Spawn方式启动的支持不够顺畅
1.8 退出Objection
在交互界环境中输入exit