Frida的集成工具:Objection的使用

指令选项

1
objection --help

Objection连接

1
2
objection -g <packagename> explore
objection -N -h <phone's ip> -p <port> -g <packagename> explore # 指定ip与端口连接

连接成功后是如下画面:

按空格可以获取命令提示以及对应的解释,如上图所示。

常用指令

内存篇

查看内存中加载的所有库

1
memory list modules (--json  <localfilepath>) //后者参数是将运行结果导出成json文件

查看指定库的导出函数

1
memory list exports <module name> (--json  <localfilepath>)

内存dump

1
2
memory dump all <localfilepath>
memory dump from_base <base_address> <size_to_dump> <localfilepath>

内存搜索

1
2
memory search "<pattern eg: 41 41 41 ?? 41>" --offsets-only     //只获取字符串的偏移量
memory search "<pattern eg: 41 41 41 ?? 41>" --string

选项--string的例子如下:

选项--offsets-only的例子如下(需要将字符串转十六进制):

内存写

1
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)

内存堆搜索实例

1
android heap search instances <class> (eg: com.example.test)

调用实例的方法

1
android heap execute <Hashcode> <methodname>

然而有参方法执行报错,无参方法可以成功执行。

有参方法可以通过编写js代码来执行,指令如下:

1
android heap evaluate <Hashcode> <methodname>

接着就会进入到js代码编写环节,编写完后,Esc接着Enter,就会执行脚本。示例如下:

hook篇

列出所有已加载的activities、class_loaders、classes、receivers、services。

1
2
android hooking list activities/class_loaders/classes/receivers/services
android hooking list class_methods <classname>

例子:列举android.openg.Matrix类的方法,结果如下:

搜索类

1
android hooking search classes <name> //name可以全类名,也可以是部分关键字

搜索方法

1
android hooking search methods <name> (optional: <package-filter>) //name可以全类名,也可以是部分关键字

例如,搜索com.example.testfrida包中的MainActivity方法:

hook类的所有方法(不包括构造方法)

1
android hooking watch class <classname> (--dump-args)(--dump-backtrace)(--dump-return)
  • --dump-args:hook方法的参数并打印
  • --dump-backtrace:hook方法的调用栈并打印
  • --dump-return:hook方法的返回值并打印

hook类的指定方法(包括重载方法)

1
2
android hooking watch class_method <classname.method> (--dump-args)(--dump-backtrace)(--dump-return)
//如果是构造方法,则method的值即为$init

hook 单个重载方法(需指定参数类型)

1
android hooking watch class_method <classname.method> "paramterTypes" (--dump-args)(--dump-backtrace)(--dump-return)

查看hook列表

1
jobs list

取消hook

1
jobs kill <Job ID>

附加hook

在某些app hook时, 需要在启动时hook,为了避免错过hook时机,采用附加模式,在objection 启动时就注入app。(也可以不这么做,而是先hook后启动程序)

1
objection -g <packageName> explore --startup-command <"xxx">

设置方法返回值(仅限Boolean类型)

1
android hooking set return_value "<fully qualified class method>" "<optional overload>" (eg: "com.example.test.doLogin") <true/false>

为指定类中的各个方法生成hook代码:

1
android hooking generate simple <classname>

不过生成的只是大致框架,没有详细的内部方法实现,这些还得靠自己写。

为指定类生成hook代码:

1
android hooking generate class <classname>

这个比较详细,应该是完全实现了?

启动Activity或Service

1
2
android intent launch_activity <activity_class>
android intent launch_service <service_class>

如果应用的启动权限没有设置好,就可以达到Activity绕过的效果,比如说不用登陆就可以进入某些界面!!!

关闭 ssl 效验

1
android sslpinning disable

关闭 root 检测

1
android root disable

显示 app 相关环境变量

1
env

可以看到缓存目录(cacheDirectory)以及安装后应用所在目录(packageCodePath)等。

指令解释

1
help <command>

参考:

https://www.anquanke.com/post/id/197657


Frida的集成工具:Objection的使用
http://example.com/2023/12/19/Android安全/Frida的集成工具-Objection的使用/
作者
gla2xy
发布于
2023年12月19日
许可协议