-
-
[分享]objection基本操作与实战
-
发表于:
2023-7-8 18:55
12214
-
0x01 前言
objection是我们逆向分析中经常用到的工具之一,可以大幅度的提升我们工作效率。为此我总结了它的一些使用方法,也是对基础的一个巩固。再用1个简单的例子实战演示它的便捷之处。
0x02 大纲
1.安装与启动
2.基本用法
3.插件的使用(wallbreaker 、FRIDA-DEXDump、watch_events)
4.实战:不写一行代码,分析加密参数
0x03 安装与启动
objection的介绍
objection是一个运行时移动探索工具包,观察类方法,报告执行情况,由Frida提供支持。支持iOS 和 Android。
objection的安装
1 2 3 4 | Python 3.7 . 1
pip3 install frida = = 12.8 . 0
pip3 install frida - tools = = 5.3 . 0
pip3 install objection = = 1.8 . 4
|
启动
1.手机端或者模拟器开启对应版本的frida-server
1 2 3 4 5 | ┌──(root㉿r0env) - [~]
└─
bullhead: / $ su
bullhead: /
bullhead: / data / local / tmp
|
2.获取包名,方式有很多种,我喜欢用以下方式,不仅可以看到包名,而且还能看到当前界面的class,实现了初步的快速定位
1 2 3 4 | adb shell dumpsys window | grep CurrentFocus
mCurrentFocus = Window{c46d96e u0 com.example.androiddemo / com.example.androiddemo.Activity.LoginActivity}
|
3.打开方式有两种,分别是包名和指定ip和端口的连接。包名应该是使用率比较高的。(都是attach模式)
1 2 3 4 5 6 7 8 | objection - g com.example.androiddemo explore
. / fs1280am64 - l 0.0 . 0.0 : 12306
objection - N - h 192.168 . 31.166 - p 5555 - g com.example.androiddemo explore
|
4.spawn模式启动。--startup-command "hook的代码段"
1 | objection - g com.example.androiddemo explore - - startup - command "android hooking watch class com.example.androiddemo.Activity.LoginActivity --dump-args --dump-backtrace --dump-return"
|
0x04 基本用法
Memory 指令,提取内存信息
1 2 3 4 | memory list modules / / 查看内存中加载的库
memory list exports libssl.so / / 查看库的导出函数
memory list exports libart.so - - json / root / libart.json / / 将结果保存到json文件中
memory search - - string - - offsets - only / / 搜索内存
|
任务管理
1 2 3 4 5 | jobs list
jobs kill jobid
|
root指令
1 2 | android root disable / / 尝试关闭app的root检测
android root simulate / / 尝试模拟root环境
|
关闭 ssl 效验
1 | android sslpinning disable
|
heap 内存堆搜索与执行
1 2 3 4 5 6 7 8 9 | android heap search instances com.example.androiddemo.Activity.LoginActivity
Class instance enumeration complete for com.example.androiddemo.Activity.LoginActivity
Handle Class toString()
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0x1fba com.example.androiddemo.Activity.LoginActivity com.example.androiddemo.Activity.LoginActivity@d8a5160
android heap execute 0x1fba a
|
强制启动activity
1 | android intent launch_activity com.example.androiddemo.Activity.FridaActivity1
|
hook 内存漫游
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | android hooking list activities
android hooking list classes
android hooking list class_methods 包名.类名
android hooking search classes 包名包含的关键词
android hooking watch class 包名.类名
android hooking watch class_method 包名.类名.方法
android hooking watch class_method 包名.类名.方法 "参数1,参数2"
|
日志
1 2 3 4 5 | ~ / .objection / objection.log
~ / .objection / objection_history
|
0x05 Wallbreaker插件的使用
Wallbreaker是一个实时分析 Java 堆的有用工具,由frida提供支持。提供一些命令从内存中搜索对象或类,并精美地可视化目标的真实结构。
下载安装
1 2 | mkdir - p ~ / .objection / plugins /
git clone https: / / github.com / hluwa / Wallbreaker ~ / .objection / plugins / Wallbreaker
|
加载
1 2 3 4 5 | objection - g com.example.androiddemo explore - P ~ / .objection / plugins
objection - g com.example.androiddemo explore
plugin load ~ / .objection / plugins / Wallbreaker
|
命令使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | plugin wallbreaker objectsearch LoginActivity
/ / 返回:
com.example.androiddemo.Activity.LoginActivity
com.example.androiddemo.Activity.LoginActivity$ 1
plugin wallbreaker classdump com.example.androiddemo.Activity.LoginActivity - - fullname
plugin wallbreaker objectsearch com.example.androiddemo.Activity.LoginActivity
/ / 返回:
[ 0x2262 ]: com.example.androiddemo.Activity.LoginActivity@d8a5160
plugin wallbreaker objectdump 0x2262 - - fullname
|
0x06 FRIDA-DEXDump 插件的使用
frida-dexdump :快速的从内存中搜索和转存DEX
安装
1 | git clone https: / / github.com / hluwa / FRIDA - DEXDump ~ / .objection / plugins / dexdump
|
启动
返回值:
1 | [DEXDump]: DexSize = 0x1d1f50 , DexMd5 = 7ed584af40ef0b1bc211688395e92c98 ,SavePath = / root / .objection / plugins / com.example.androidemo / 0x7e38c0201c .dex
|
0x07 watch_events 插件的使用
安装
1 2 3 4 5 | git clone https: / / github.com / hluwa / objection - plugins ~ / .objection / plugins - - recurse - submodules
objection - g com.app.name explore - P ~ / .objection / plugins
这里安装成功后,也会自动加载 wallbreaker 、dexdump
|
开启后,点击屏幕按钮,比如这里我提交了登录按钮,打印出来它的类,实现了快速定位。
1 2 3 4 | plugin watch_event onclick
com.example.androiddemo on (google: 8.1 . 0 ) [usb]
|
0x08 实战:不写一行代码,分析加密参数
1.目标
此次演示的APP是一个通过测试的APP,这里我们就不写一行代码,也不用反编译工具分析代码,全程用objection来分析。通关第一关登录。
2.分析
此次分析的目的找到当前登录页面的类。android hooking list activities
3. hook 这个类。
4. hook a 方法,打印返回值和调用栈。输出如下:
5.提交按钮,得到返回值:
6.将得到返回值 2f02e24ae2e1fe880399f27600afa88364e6062bf9bbe114b32fa8f23d03608a 输入密码框中提交代码,发现成功通过第一关。
1 | adb shell input text '2f02e24ae2e1fe880399f27600afa88364e6062bf9bbe114b32fa8f23d03608a'
|
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2023-7-8 20:44
被西贝巴巴编辑
,原因: 增加一封面标识