2022/4/11 Frida学习05--Objection入门


日期:Mar-3-2022

作者:狐狸大剑眼镜

参考

书籍:安卓Frida逆向与抓包实战-肉丝

https://www.52pojie.cn/thread-1161419-1-1.html

基础知识

Objection默认通过USB连接设备,这里不必和
Frida的命令行一样通过-U参数指定USB模式连接,同时主要通过-g参
数指定注入的进程并通过explore命令进入REPL模式。

首先,在确认手机使用USB线连接上手机后,运
行相应版本的frida-server,运行“设置”应用以通过frida-ps找到对
应的App及其包名

这里我的objection版本一直有个用数据线就连接超时的问题,用aroid studio wifi调试没问题。

当不知道命令时通过按空格键就会提示可用的命令,在出现提示后通过上下选择键及回车键便可以输入命令

help命令。不知道当前命令的效果是什么时,在当前命令前
加help(比如help env)再回车之后就会出现当前命令的解释信息,
如图所示。

jobs命令。作业系统很好用,用于查看和管理当前所执行
Hook的任务,建议一定要掌握,可以同时运行多项Hook作业。
Frida命令。查看Frida相关信息

内存漫游相关命令

Objection可以快速便捷地打印出内存
中的各种类的相关信息,这对App快速定位有着无可比拟的优势,下面
介绍几个常用命令。
①可以使用以下命令列出内存中的所有类。

# android hooking list classes

②可以使用以下命令在内存中所有已加载的类中搜索包含特定关键
词的类。
# android hooking search classes
这里搜索一下包含display关键词的类。
# android hooking search classes display

③可以使用以下命令从内存中搜索所有包含关键词key的方法。
# android hooking search methods <key>
从上文中可以发现,内存中已加载的类高达6103个。它们的方法
是类的个数的数倍,整个过程会相当耗时。这里展示搜索包含display
# android hooking search methods display

④搜索到我们感兴趣的类后,可以使用以下命令查看关心的类的所
有方法,例如,对android.hardware.display.DisplayManager这个类感
兴趣
# android hooking list class_methods android.hardware.display.DisplayManager

⑤以上介绍的都是最基础的一些Java类相关的内容。在Android
中,正如笔者在第2章中介绍的,四大组件的相关内容是非常值得关注
的,Objection在这方面也提供了支持,可以通过以下命令列出进程所
有的activity(活动)。
# android hooking list activities

⑥可以通过以下命令列出进程所有的service。
# android hooking list services
需要列出其他两个组件的信息时,只要将对应的地方更换为
receivers和providers即可

Hook相关命令

通过以下命令对指定的方法进行Hook。
# android hooking watch class_method <methodName>
这里选择Java中File类的构造函数进行Hook
# android hooking watch class_method java.io.File.$init --dump-args --dunmp-backtrace --dump-return 

我们加上了--dump-args、--dump-backtrace、--dump-return三个参数,分别用于打印函数的参数、调用栈以及返回值。这三个参数对逆向分析的帮助是非常大的:有些函数的明文和密文非常有可能放在参数和返回值中,而打印调用栈可以让分析者快速进行调用链的溯源。

需要注意的是,此时虽然只确定了Hook构造函数,但是默认会Hook对应方法的所有重载。同时,在输出的最后一行显示Registering job 887108,这表示这个Hook被作为一个“作业”添加到Objection的作业系统中了,此时运行job list命令可以查看到这个“作业”的相关信息,如图所示。可以发现这里的Job ID对应的是887108 ,同时Hooks对应的6正是Hook的函数的数量。


当我们在“设置”应用中的任意位置进行点击时,会发现
java.io.File.File(java.io.File, java.lang.String)这一个函数被调用
了。在Backtrace之后打印的调用栈中,可以清楚地看到这个构造函数
的调用来源,如图所示。注意,调用栈的顺序是从下至上的,根
据Arguments那一行会发现打开的文件路径

奇怪我点账号设置没反应。

测试结束后,可以根据“作业”的ID来删除“作业”,取消对这些
函数的Hook

# jobs kill <id>
除了可以直接Hook一个函数之外,Objection还可以通过执行如下
命令实现对指定类classname中所有函数的Hook(这里的所有函数并
不包括构造函数的Hook)。
# android hooking watch class <classname>

主动调用相关命令

①基于最简单的Java.choose的实现,在Frida脚本中,对实例的
搜索在Objection中是使用以下命令实现的:
# android heap search instances <classname>
②在Objection中调用实例方法的方式有两种。第一种是使用以下
命令调用实例方法:
# android heap execute <Handle> <methodname>
如果要执行带参数的函数,则需要先执行以下命令:
# android heap evaluate <Handle>

在进入一个迷你编辑器环境后,输入想要执行的脚本内容,确认编
辑完成,然后按Esc键退出编辑器,最后按回车键,即会开始执行这行
脚本并输出结果。这里的脚本内容和在编辑器中直接编写的脚本内容是
一样的(使用File类的canWrite()函数和setWritable()函数进行测
试)

补充在window下部署frida

https://github.com/frida/frida/releases

https://github.com/sensepost/objection

因为电脑上常用python3.10,所以没有选择特定frida版本

斗胆安装的最新的, 应该没什么问题,凑活着用

pip install frida -i https://mirrors.aliyun.com/pypi/simple/ 

pip install frida-tools -i https://mirrors.aliyun.com/pypi/simple/ 

pip install objection -i https://mirrors.aliyun.com/pypi/simple/ 
# 最新版本
frida-15.1.17
frida-tools-10.5.4
objection-1.11.0

虚拟机安装frida-server

adb push frida-server-15.1.17-android-arm64 /data/local/tmp
adb shell
vbox86p:/ # cd /data/local/tmp    #genymotion方便的是默认root
vbox86p:/data/local/tmp # ls
frida-server-15.1.17-android-arm64                                <
vbox86p:/data/local/tmp # chmod 777 frida-server-15.1.17-android-arm64

结果报错,安装x86的试试,没问题了,总结,虚拟机还是用的电脑cpu所以肯定是x86🤪

实战分析

未完待续.....


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM