objection工具使用
0x01 安装
下载地址:
https://github.com/sensepost/objection/releases |
现在最新版的objection
为1.11.0
objection
是通过Frida
来提供服务的,所以安装objection
之前要先安装frida
。
按照推荐版本来做:(这块Python版本使用3.7的,不然后面肯会报错)
frida 12.8.0 |
想要使用基于frida版本的objection,只需要安装好特定版本的frida和frida-tools,再去objection的releases里面找那个日期之前一点点的版本即可,比如以frida 12.8.0 版本为例:
1、首先安装特定版本的 frida
pip install frida==12.8.0 |
2、然后,安装objection
pip install objection==1.8.4 |
3、frida配置到手机
查看Android手机设备设置 getprop ro.product.cpu.abi
据cpu版本去下载相应frida-server,手机是x86_64的,找到相应的服务器server,如下
将frida-server下载下来,解压出来,为了简单,重命名为将frida-server下载下来,加压出来,为了简单,重命名为frida-server64,将放到手机,并进行端口转发,运行frida,将放到手机,并进行端口转发,运行frida
E:\frida |
运行 frida-ps -U 查看是否正常运行
4、排错
这块安装好后,直接运行frida或者objection会报错,原因如下:
解决python urllib3 v2.0 only supports OpenSSL 1.1.1+, currently-CSDN博客
windows安装frida运行环境_failed to load the frida native extension-CSDN博客
5、安装成功
【注意】有的APP应用可能会对frida默认的端口做检测,这里可以选用一个不常用的端口,如7777
./frida-server -l 0.0.0.0:7777 |
0x02 objection命令详解
objection -g com.zj.wuaipojie -d explore //objection连接到要附加的APP进程 |
输入 “空格” 可以发现里面内置的一些命令,如frida、env等
import xxx.js //导入frida的脚本
memory模块
列出内存中加载的库
memory list modules //列出内存中加载的库 |
列出某个库的导出函数
memory list exports xxx //列出某个库的导出函数 |
提取内存数据
提取内存数据 |
搜索内存数据
搜索内存数据 |
也可以增加参数通过字符串搜索,运行memory search "aaaqqq" --string,此方式不支持模糊搜索 |
写入内存数据
通过内存地址可以写入数据,比如搜索TextView的文字“Helloword”并通过memory write 0x12fc9c78 ‘61 61 61’修改其中一处结果,再把进程切换一下后台&前台,就刷新成修改的数据了。
memory write 0x12fc9c78 '61 61 61' |
Android模块(常用)
列出内存中加载的所有类
android hooking list classes |
列出指定类的所有方法
假设要查看APP MainActivity 类的方法,运行android hooking list class_methods com.zyc.objectiondemo.MainActivity,可以看到只打印了属于该类的方法,继承来的并不会打印。
android hooking class com.zyc.objectiondemo.MainActivity |
在内存中所有的类里搜索类
从已加载的类里查找和“zyc”关键字,运行android hooking search classes zyc。
android hooking search classes zyc |
在所有类中搜索指定方法
假设要搜索带“onCreate”的方法,运行android hooking search methods onCreate。该指令会遍历内存中所有已加载类的所有方法执行搜索,数据量非常大,过程相当耗时,甚至容易卡死和崩溃,所以会在运行前手动输入“y”同意
android hooking search methods onCreate |
列出所有Activity、Service、Receiver
查看APP的组件使用如下命令。
android hooking list activities |
(1)启动activity
android intent launch_activity com.md.obj.ui.PlayerActivity |
(2)启动services
android intent launch_service [services_class] |
内存堆上搜索实例
从用例代码可知,运行APP进入 MainActivity 后会创建3个Car对象,此时如果想查看内存中的Car实例
android heap search instances com.zyc.objectiondemo.Car |
调用实例的方法
搜索到实例获取地址后可调用其方法。如果要调用实例1的 show() 方法,运行:
android heap execute 68389604 show |
实时注入实例
拿到实例后可以直接在实例上书写js注入,运行
android heap evaluate 23973990 会进入js编辑器,可以实时编写、注入、调试,但没有代码提示。
导入hook代码
objection支持导入Hook js文件使用,比如 /root/Desktop/objectionHook.js 有下面Hook代码:
function main() { |
运行import /root/Desktop/objectionHook.js就可以在objection中直接使用了。
hook一个类中的所有方法
运行android hooking watch class com.zyc.objectiondemo.Car可以Hook到Car类下所有方法(不包括构造方法)的调用。
android hooking watch class com.zyc.objectiondemo.Car |
hook一个类中的单个方法
如果只需要Hook单个方法(包括其重载),比如上面没有Hook到的Car类构造函数,可以运行:
android hooking watch class_method com.zyc.objectiondemo.Car.$init。 |
如果不需要Hook方法的重载,可以在方法名后面加上参数类型:
android hooking watch class_method com.zyc.objectiondemo.Car.$init "int,java.lang.String" |
指令末尾加上对应选项可以展示参数、返回值和调用栈,运行:
android hooking watch class_method com.zyc.objectiondemo.Car.show --dump-args --dump-return --dump-backtrace |
关闭SSLPinning检测
android sslpinning disable |
关闭app的root校验
android root disable |
尝试模拟root环境
android root simulate |
系统任务jobs
objection可以同时运行多项任务,比如下图创建Hook任务时打印了任务id 629342,通过指令jobs list能查看当前运作的任务。
jobs list |
可以通过id结束某项任务,运行jobs kill 629342。
jobs kill 629342 |
0x03 objection批量trace
要实现对APP中的所有类进行hook,需要怎么做呢???
1、先查找APP中的所有类
android hooking search classes com.zj.wuaipojie |
2、将这8个类复制下来,放到txt中
3、给这些类前面批量添加字符串 “android hooking watch class”
4、使用命令对所有类进行hook
在刚开始附加进程的时候,使用参数 -c
objection -g com.zj.wuaipojie -d explore -c 1.txt |
0x04 Wallbreaker插件
Wallbreaker是一个实时分析 Java 堆的有用工具,由frida提供支持。提供一些命令从内存中搜索对象或类,并精美地可视化目标的真实结构。
1、下载安装
mkdir -p ~/.objection/plugins/ |
2、加载
# 第一种方法: |
3、命令使用
# 搜索类 |
0x05 FRIDA-DEXDump 脱壳插件
frida-dexdump :快速的从内存中搜索和转存DEX
1、安装
git clone https://github.com/hluwa/FRIDA-DEXDump ~/.objection/plugins/dexdump |
2、启动
plugin dexdump dump |
3、返回值
[DEXDump]: DexSize=0x1d1f50, DexMd5=7ed584af40ef0b1bc211688395e92c98,SavePath=/root/.objection/plugins/com.example.androidemo/0x7e38c0201c.de |
0x06 watch_events 插件
git clone https://github.com/hluwa/objection-plugins ~/.objection/plugins --recurse-submodules |
开启后,点击屏幕按钮,比如这里我提交了登录按钮,打印出来它的类,实现了快速定位。
plugin watch_event onclick |
0x07 objection实战分析加密参数
1、目标
此次演示的APP是一个通过测试的APP,这里我们就不写一行代码,也不用反编译工具分析代码,全程用objection来分析。通关第一关登录。
2、分析
此次分析的目的找到当前登录页面的类。android hooking list activities
3、hook这个类
4、提交按钮,得到返回值:
5.将得到返回值
2f02e24ae2e1fe880399f27600afa88364e6062bf9bbe114b32fa8f23d03608a 输入密码框中提交代码,发现成功通过第一关。
adb shell input text '2f02e24ae2e1fe880399f27600afa88364e6062bf9bbe114b32fa8f23d03608a' |