安装

objectioh是对frida进行了封装,只需要命令就可以完成hook操作,很方便很实用
在安装objection之前,也是要安装frida和frida-tools,并且版本最好是接近frida的版本

pip install frida==14.2.18

pip install frida-tools==9.2.5

pip install objection==1.11.0

装好了就是这样的:
image-20240204092725224

使用:

objection的使用可以说是非常简单了

注入进程,如果objection没有找到进程,会以spwan方式启动进程

查看帮助:objection –help

注入进程的方法:objection -g <进程名> explore

hook的结果存放在:objetion log 文件位置 C:\Users\Administrator.objection

常见的hook指令:

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
列出所有已加载的类
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
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 <路径.文件名>


个人还是感觉,直接写代码方便一些,本篇文章位学习的代码笔记,方便以后直接用。

好久没写hook代码了,废了废了……想写的安卓实战一直没有找到合适的案例。。。