官方文档: https://github.com/sensepost/objection
# Objection
太强了,告别敲代码的方式,快速动态 trace
,时间就是生命,用上就会戒不掉,且支持 ios
和 android
。
# 安装
ps
:python >= 3.4
且安装了frida
, 参考pip3 install Objection
- 直接终端输入
objection
,输出如下内容就成功了
- 直接终端输入
# 食用方法
进入交互式界面
objection -g apkname explore
不知道指令直接按空格键,
objection
很人性化,只要按空格键就会弹出提示,然后按上下键选择需要使用的指令 看上图提示已经很明显了,指令和含义都很清晰
! 执行操作系统命令
pwd 打印当前工作目录
cd 切换到指定目录
ls 列出当前工作目录文件
rm 删除远程设备的文件
exit 退出
env 打印有关环境的信息
android android特有的命令
ios ios特有的命令
commands 处理当前会话中运行的命令
file 操作远程设备的文件
frida 获取frida的环境信息
import 从一个完整的路径导入fridascript脚本并运行
jobs 操作objection的任务列表
memory 处理当前进程内存信息
ping 检测当前注入状态
plugin 使用插件,例如:frida-dexdump、wallbreaker
reconnect 重新连接当前设备
sqlite 使用sql指令
ui 通用用户界面指令
# 常用指令简介
从当前设备下载文件 (不加
ouput
路径,下载到用户目录下)file download [filename] [outputfile]
列出所有的
activity
或services
android hooking list activities/services
列出内存中所有的类
android hooking list classes
搜索内存中已加载的类中包含特定关键词的类
android hooking search classes [class_name]
搜索内存中已加载的方法中包含特定关键词的方法
android hooking search methods [method_name]
堆内存中搜索指定类的实例,可以获取该类的实例 id
android heap search instances search instances com.xx.xx.class
直接执行指定实例下的方法
android heap execute [ins_id] [func_name]
尝试关闭
root
检测android root disable
尝试模拟
root
环境android root simulate
启动指定
activity
android intent launch_activity [activity_class]
启动指定
services
android intent launch_service [services_class]
关闭
app ssl
校验android sslpinning disable
查看任务列表
jobs list
关闭任务
jobs kill [task_id]
Spawn
方式Hook
, 用于hook
启动阶段的操作,启动objection
的时候就要设置objection -g packageName explore --startup-command '[obejection_command]'
hooking
指定方法,如果重载会 hook 所有方法,这时我们可以添加参数辅助分析
--dump-args
: 打印参数
--dump-backtrace
: 打印调用栈
--dump-return
: 打印返回值android hooking watch class_method com.xxx.xxx --dump-args --dump-backtrace --dump-return
hooking
指定类,方便我们动态trace
关键函数android hooking watch class com.xxx.xxx
设置返回值 (只支持
bool
类型)android hooking set return_value com.xxx.xxx.methodName false
# 实战演练
之前研究过的一个
app
,当时定位了好久,敲frida
代码,一个函数一个函数hook
,属实有些慢。。。现在直接objection
上,直接配合静态分析,hook
整个类,下面 4 个重载的a
函数。使用
jobs list
可以看到当前任务列表有一个任务,id
为892906
滑动
app
页面触发加密函数,发现控制台a
函数被调用,说明刚才滑动页面的网络请求,调用了类中的a
函数下面使用
jobs kill 892906
删除当前任务 ,再hook
a函数
,因为a
有重载,所以一并打印参数和返回值然后滑动页面,查看
hook
结果,调用栈很清晰,return
的值就是加密结果查看堆栈,通过静态分析,使用之前套路定位到生成加密参数的位置,参数和返回值一目了然
本文主要介绍
objection
,静态分析主要是使用jadx
,不做详细介绍文章写的比较乱,刚开始学习使用
objection
,很多不熟悉的地方和理解不清晰的功能,希望大佬们带带弟弟。