Android逆向入门-objection
本文最后更新于:3 小时前
前面学习frida的过程中也有见到过objection,于是乎回来继续学习
读者阅读之前请务必阅读过前一篇文章
安装
在基于frida的安装之后,使用pip install objection
进行安装
入门
记住最前提的条件,objection是基于frida的,所以请务必先启动frida-server!
基础使用
-g参数后加进程名来连接
1 |
|
job执行js语句
我在学习objection开始的时候发现其与frida无法同时对一个进程hook,那有时候就是需要像frida那样寻找一个实例,然后对其方法进行调用怎么办?或者说,objection能不能像frida那样如此灵活地执行js语句
翻阅官方的wiki时我找到了这么个东西:job
https://github.com/sensepost/objection/wiki/Working-with-Jobs
按照官方的描述,就是让objection能够执行js语句
准备好之前lab2的payload
1 |
|
然后在objection终端执行
1 |
|
1 |
|
实例方法调用
使用下述代码能够模糊查询到当前加载的类(注意看提示词只有被使用到的类才能被加载到)
1 |
|
(android hooking search methods frida
可以用来查找方法,就是有点慢((,如果知道类名的话可以用下面的android hooking list class_methods com.ad2001.frida0x2.MainActivity
)
在堆上寻找实例,证明objection是能够获取到实例的
1 |
|
那如何调用实例方法呢?
使用下述代码可列出某个类的所有方法
1 |
|
然后调用
1 |
|
(从下面起对lab2进行hook)
拿到MainActivity的HashCode
但是出现如下报错,很明显是缺少参数
那么如何调用带参数的方法呢
1 |
|
输入上述指令会出现一个文本编辑框,是用来编写js代码的,下方的描述先按esc再按回车会执行js代码,按ctrl+c退出;上方的描述告诉我们我们输入的这个66839494句柄在堆上的实例将在代码中使用clazz这个对象来描述
简单直接打印出clazz
调用get_flag()方法并传入参数:
被成功hook到
对类和方法的hook
对某个类中具体方法进行hook
1 |
|
对get_flag方法进行调用,注意到控制台打印出调用栈,返回值和参数
每一个hook都会新增在jobs里
玩点好玩的
1 |
|
还有一种对类中的所有方法进行监视,适用于一开始不清楚哪个方法可疑的时候,到处点看看哪个方法被触发
1 |
|
对共享库的操作
列出所有的共享库
1 |
|
查看库的导出函数
1 |
|
将结果导出到json中
1 |
|
手动启动activities/services
查找可供启动的activity或service
1 |
|
执行
1 |
|
模拟器开在旁边的话会注意到lab2的界面被启动了一下
查找一下实例能看到会新增实例
如果对类进行hook过的话,能看到onCreate()方法被调用了一次
两种启动方式
上文提到的所有的启动方式都是attach,大部分时候也都是使用attach方式
但是有时候需要在程序启动的时候就进行hook,这时候就需要使用spawn方式了
1 |
|
一些方便些的操作
用下面代码能快速生成对一个类的frida hook脚本
1 |
|