Android逆向入门-objection

本文最后更新于:3 小时前

前面学习frida的过程中也有见到过objection,于是乎回来继续学习

读者阅读之前请务必阅读过前一篇文章

安装

在基于frida的安装之后,使用pip install objection进行安装

入门

记住最前提的条件,objection是基于frida的,所以请务必先启动frida-server!

基础使用

-g参数后加进程名来连接

1
objection.exe -g "frida 0xA" explore

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Java.perform(function(){
var MainActivity = Java.use("com.ad2001.frida0x2.MainActivity");
MainActivity.onCreate.implementation = function(a,b){
console.log(this.get_flag(4919));
}
Java.choose("com.ad2001.frida0x2.MainActivity",{
onMatch(obj) {
console.log(obj);
console.log(obj.get_flag(4919));
},
onComplete(obj){
console.log("gg")
}
})
})

然后在objection终端执行

1
import frida-test/test.js "任务名可省"
1
2
jobs list
jobs kill ***

实例方法调用

使用下述代码能够模糊查询到当前加载的类(注意看提示词只有被使用到的类才能被加载到)

1
android hooking search classes frida

android hooking search methods frida可以用来查找方法,就是有点慢((,如果知道类名的话可以用下面的android hooking list class_methods com.ad2001.frida0x2.MainActivity

在堆上寻找实例,证明objection是能够获取到实例的

1
android heap search instances com.ad2001.frida0xa.MainActivity

那如何调用实例方法呢?

使用下述代码可列出某个类的所有方法

1
android hooking list class_methods com.ad2001.frida0x2.MainActivity

然后调用

1
android heap execute 75674217 get_flag

(从下面起对lab2进行hook)

拿到MainActivity的HashCode

但是出现如下报错,很明显是缺少参数

那么如何调用带参数的方法呢

1
android heap evaluate 66839494

输入上述指令会出现一个文本编辑框,是用来编写js代码的,下方的描述先按esc再按回车会执行js代码,按ctrl+c退出;上方的描述告诉我们我们输入的这个66839494句柄在堆上的实例将在代码中使用clazz这个对象来描述

简单直接打印出clazz

调用get_flag()方法并传入参数:

被成功hook到

对类和方法的hook

对某个类中具体方法进行hook

1
android hooking watch class_method com.ad2001.frida0x2.MainActivity.get_flag --dump-args --dump-backtrace --dump-return

对get_flag方法进行调用,注意到控制台打印出调用栈,返回值和参数

每一个hook都会新增在jobs里

玩点好玩的

1
android hooking watch class_method android.widget.TextView.setText --dump-args --dump-backtrace --dump-return

还有一种对类中的所有方法进行监视,适用于一开始不清楚哪个方法可疑的时候,到处点看看哪个方法被触发

1
android hooking watch class com.ad2001.frida0x2.MainActivity --dump-args --dump-backtrace --dump-return

对共享库的操作

列出所有的共享库

1
memory list modules

查看库的导出函数

1
memory list exports libc.so

将结果导出到json中

1
memory list exports libc.so --json out.json

手动启动activities/services

查找可供启动的activity或service

1
2
android hooking list activities
android hooking list services

执行

1
android heap search instances com.ad2001.frida0x2.MainActivity

模拟器开在旁边的话会注意到lab2的界面被启动了一下

查找一下实例能看到会新增实例

如果对类进行hook过的话,能看到onCreate()方法被调用了一次

两种启动方式

上文提到的所有的启动方式都是attach,大部分时候也都是使用attach方式

但是有时候需要在程序启动的时候就进行hook,这时候就需要使用spawn方式了

1
objection.exe -g com.ad2001.frida0x2 explore --startup-command "android hooking watch class com.ad2001.frida0x2.MainActivity --dump-args --dump-backtrace --dump-return"

一些方便些的操作

用下面代码能快速生成对一个类的frida hook脚本

1
android hooking generate simple com.ad2001.frida0x2.MainActivity