objection 基本使用

objection 默认通过USB连接设备,这里就不必和Frida 一样通过 -U参数指定USB模式连接,同时通过 -g 参数指定注入的进程并通过export命令进入REPL模式,进入REPL模式后就可以使用objection进行hook的常用命令。

objection 通过 -N 参数来指定网络中的设备同通过 -h 参数和 -p 参数指定对应设备的IP和端口进行连接,从而完成对网络设备的注入与Hook,除外还可以通过patchapk命令将frida-gadget.so打包进App。

接下来以安卓手机里面的设置为例

1、连接 usb手机

2、运行 frida-server

3、在手机上打开设置

4、通过 Frida-ps 找到对应的设置包名

frida-ps -U | grep setting

5、找到包名后通过objection注入设置应用,注入成功后便进入了objection的REPL界面。

objection -g 设置 explore

 6、在进入objection的repl界面后, 可以通过空格键显示提示命令。

7、在不知道命令什么作用的时候,在要使用的命令前假help就会出现解释。

8、jobs命令用于查看和管理当前所执行hook的任务,可以同时运行多项hook作业。

9、内存漫游 objection 可以快速便捷的打印出内存中的各种类相关信息,对app快速定位有着无可比拟的优势。

9.1、列出内存中的所有类

android hooking list classes

 

9.2、可以使用以下命令在内存中已加载的类中搜索包含特定的关键词的类。

android hooking search classes

比如:android hooking search classes display

 9.3 、可以使用以下命令在内存中搜索所有包含关键词key的方法

android hooking search methods <key>

android hooking search methods display

 

9.4、搜索到我们感兴趣的类后,可以使用下面的命令查看关心类的所有方法

android hooking list class_methods

android hooking list class_methods android.hardware.display.IDisplayManager

 

9.5、列出进程所有的activity(活动)

android hooking list activities

 

9.6、列出进程所有server 服务

android hooking list services

 

9.7、列出进程所有receivers(接收器)

android hooking list receivers

 

9.8、通过以下命令对指定的方法进行hook 参数 :--dump-args 打印函数参数、--dump-backtrace 调用栈、--dump-return返回值

android hooking watch class_method <methoName> --dump-args --dump-backtrace --dump-return

 可以通过 工作job查看作业相关信息 ID和上面的ID 对应、hook函数的数量、

 

在手机设置里随便点击位置会发现 Called java.io.File.File(java.io.File, java.lang.String) 被调用了,在 Backtrace 之后打印的是调用栈可以清楚的看到这个构造函数的调用来源,顺序是从下至上,根据Arguments 哪一行会发现打开的文件路径是 java.io.File.File(/data/user_de/0/com.android.settings, shared_prefs) shared_prefs是文件名,返回参数是空 Return Value: (none) 表名这个函数没有返回值。

 9.9、结束进程

jobs kill 708598

9.10、除了Hook一个函数外,objection 还可以通过以下命令实现对指定类classname中所有函数的hook(这里的所有的函数并不包括构造函数hook)

hook java.io.File 类下的所有方法 android hooking watch class java.io.File

 一个类下一共Hook了56个方法

 最终Hook效果如下,这里的调用顺序是从上到下的

9.11 、frida的一大特色,主动调用早objection中的使用,基于最简单的java.choose的实现,在frida脚本中对实例的搜索在objection中使用以下命令实现

android heap search instances <classname>

以java.io.File为例,搜索到很多File实例,并且打印出Handle和toString(), handle非常重要在之后的主动调用中都是以这个十六进制的handle值作为实例的句柄和执行函数。

9.12、在objection中调用实例方法有两种

第一种不带参数的调用实例的方法。

android heap execute <Handle> <methodname>

例子:android heap execute 1068086893 getPath

 

第二种带参数的调用实例的方法

android heap evaluate <Handle>  会进入个迷你编辑器在里面输入想要执行的脚本内容,按esc退出,按回车就会执行脚本并输出结果。

clazz 用于代表handle值为 1068086893 所对应的实例

canWrite()函数用于返回这个实例所打开的文件是否可写

setWritable(false) 用于修改对应文件是否可写的属性

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"Objection, wallbreaker"这个词组的意思可能是指在辩论或讨论中,对破除对方观点或阻碍的反对意见或观点。如果我要用300字回答这个问题,我会这样表达: 在辩论或讨论中, "objection, wallbreaker"是指提出反对意见或观点,意图破除或击破对方观点或阻碍。这个词组的出现通常是为了追求真实和公正的辩论,希望通过不同观点的碰撞促进智慧和认识的增长。 每个人都有自己的观点和立场,而辩论是一个相互交流、较量、甚至对抗观点的过程。当有人提出"objection, wallbreaker"时,他们可能持有不同的观点,希望通过辩论来找到真相或者找到更好的解决办法。 然而,在提出"objection, wallbreaker"时,我们也需要注意呈现我们的观点要公正和明晰。我们应该以理性的态度和充分的证据来支持我们的反对意见,而不是简单地提出不成熟的批评或个人攻击。 辩论中的"objection, wallbreaker"是一种促进思考和发展的机会。通过挑战和争论,我们可以更清晰地理解对方观点的有趣之处和缺点。这种挑战有助于增强我们的辩论能力、提升思维的灵活性,并可能在辩论过程中改变我们自己的立场。 总之,"objection, wallbreaker"是辩论中常见的现象之一,它代表了追求真相和理解的努力。在辩论中提出反对观点时,我们必须以开放和尊重的态度对待对方,并用理性的方式来支持我们的观点。通过这样的辩论,我们可以共同进步,获得深入的认识和智慧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值