objection

Frida只是提供了各种API供我们调用,在此基础之上可以实现具体的功能,比如禁用证书绑定之类的脚本,就是使用Frida的各种API来组合编写而成。于是有大佬将各种常见、常用的功能整合进一个工具,供我们直接在命令行中使用,这个工具便是objection。
安装:

pip install objection


检查是否安装成功

objection --help

使用方法

首先介绍几个基本操作:

  1. 空格键: 忘记命令直接输入空格键, 会有提示与补全
  2. help: help [command] 会有详细介绍指定命令的作用与例子
  3. jobs: 任务管理系统, 可以方便的查看与删除任务

简单使用

1.启动 Frida-server,并转发端口
启动教程:frida-server
2.附加需要调试的 app,进入交互界面

// 将objection注入应用 com.xxx.xxx应用名
objection -g com.xxx.xxx explore


可以使用该env命令枚举与所讨论的应用程序相关的其他有趣目录

avtivity RPC 调用

列出所有avtivity(活动)

android hooking list activities


启动指定avtivity,class_activity_name 活动类名

android intent launch_activity class_activity_name


列出所有service(服务)

android hooking list services


启动指定service,services_class_name 服务类名

android intent launch_service services_class_name

这里虽然进去了app的测试页面但是 avtivity 我没办法RPC 调用,暂不研究。

内存漫游-Java层的hook

列出内存中所有的类,这里会出现很多的数据

android hooking list classes
//在内存中所有已加载的类中搜索包含特定关键词的类
android hooking search classes [search_name]


列出类的所有方法,class_name类名

android hooking list class_methods class_name
//在内存中所有已加载的方法中搜索包含特定关键词的方法
android hooking search methods [search_name] 


hook

/*
  hook指定方法, 如果有重载会hook所有重载,如果有疑问可以看
  --dump-args : 打印参数
  --dump-backtrace : 打印调用栈
  --dump-return : 打印返回值
  */
android hooking watch class_method com.xxx.xxx.methodName --dump-args --dump-backtrace --dump-return

//hook指定类, 会打印该类下的所以调用
android hooking watch class com.xxx.xxx

//设置返回值(只支持bool类型)
android hooking set return_value com.xxx.xxx.methodName false

使用 hook方法

android hooking watch class com.xxx.xxx


使用方法

android hooking watch class_method com.xxx.xxx.methodName --dump-args --dump-backtrace --dump-return


查看 hook 任务列表

jobs list


杀死任务

jobs kill [job ID]


使用hook方法后,会在后台运行hook,手机上的操作如果触发到相关的函数,就会被hook,就会打印出相关的调用栈,参数,返回。

生成 hook 代码,可以注入js 或者frida使用,[class_name] 类名

android hooking generate simple [class_name]


Spawn方式Hook

objection -g packageName explore --startup-command '[obejection_command]'

内存漫游-Native层

比如,我们想要在内存里面找和这个Authorization-QS相关的 内存的偏移地址

memory search "Authorization-QS" --string  --offsets-only


导出所有modules的信息

memory list modules


所有保存到本地方便查找,路径C:\Users\Administrator

memory list modules --json modules.json


找到偏移量有点像的

查看里面的函数,可以保存 --json libart.json

memory list exports libBugly-ext.so


这里不研究了 太复杂了 有空研究

objection常用命令

// 将objection注入应用
objection -g com.xxx.xxx explore

 
Memory 指令
    memory list modules               //枚举当前进程模块
    memory list exports [lib_name]    //查看指定模块的导出函数
    memory list exports libart.so --json /root/libart.json //将结果保存到json文件中
    memory search --string --offsets-only                  //搜索内存
 
android heap 指令
    //堆内存中搜索指定类的实例, 可以获取该类的实例id
    search instances search instances com.xx.xx.class
     
    //直接调用指定实例下的方法
    android heap execute [ins_id] [func_name]
     
    //自定义frida脚本, 执行实例的方法
    android heap execute [ins_id]
 
android 指令
    android root disable   //尝试关闭app的root检测
    android root simulate  //尝试模拟root环境
    
    android ui screenshot [image.png]    //截图
    android ui FLAG_SECURE false         //设置FLAG_SECURE权限
 
内存漫游
    android hooking list classes    //列出内存中所有的类
     
    //在内存中所有已加载的类中搜索包含特定关键词的类
    android hooking search classes [search_name] 
     
    //在内存中所有已加载的方法中搜索包含特定关键词的方法
    android hooking search methods [search_name] 
     
    //直接生成hook代码
    android hooking generate simple [class_name]
 
hook 方式
    /*
        hook指定方法, 如果有重载会hook所有重载,如果有疑问可以看
        --dump-args : 打印参数
        --dump-backtrace : 打印调用栈
        --dump-return : 打印返回值
    */
    android hooking watch class_method com.xxx.xxx.methodName --dump-args --dump-backtrace --dump-return
     
    //hook指定类, 会打印该类下的所有调用
    android hooking watch class com.xxx.xxx
     
    //设置返回值(只支持bool类型)
    android hooking set return_value com.xxx.xxx.methodName false
 
Spawn 方式 Hook
    objection -g packageName explore --startup-command '[obejection_command]'
 
activity 和 service 操作
    android hooking list activities                   //枚举activity
    android intent launch_activity [activity_class]   //启动activity
    android hooking list services                     //枚举services
    android intent launch_service [services_class]    //启动services
 
任务管理器
    jobs list            // 查看任务列表
    jobs kill [task_id]  // 关闭任务
 
关闭 app 的 ssl 校验
    android sslpinning disable
 
监控系统剪贴板
    // 获取Android剪贴板服务上的句柄并每5秒轮询一次用于数据。 
    // 如果发现新数据,与之前的调查不同,则该数据将被转储到屏幕上。
    help android  clipboard
 
执行命令行
    help android shell_exec [command]