Objection

本文作者:杉木@涂鸦智能安全实验室

Home

objection - 基于frida的命令行hook工具食用手册

实用FRIDA进阶:内存漫游、hook anywhere、抓包-安全客 - 安全资讯平台

Objection是一个基于Frida的命令行hook工具,用于移动设备的运行时探索。它可以安装在Windows环境下,并解决多进程应用导致的程序闪退问题。Objection的使用包括启动Frida-server并转发端口,附加需要调试的app,进入交互界面。它提供了丰富的调试界面API,包括环境打印,内存搜索,堆内存搜索和操作,以及Android hooking等功能。此外,它还可以关闭app的ssl校验,尝试关闭app的root检测,以及模拟root环境等。

安装

Installation

pip3 install -U objection

windows环境下还需要添加环境变量,不然要到下载的目录下执行;
Objection_第1张图片

执行报错解决记录

  1. 多进程应用导致程序闪退

Objection_第2张图片

objection绕过双进程保护 - FreeBuf网络安全行业门户

我的目录是

C:\Users\Administrator\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\objection\utils\agent.py

我是通过检索agent.py文件找到的;然后在文件中添加对应代码;

import time

......
#找到inject函数
	def inject(self):
        """
            Injects the Objection Agent.

            :return:
        """

        debug_print('Injecting agent...')

        session = self.get_session()
        self.script = session.create_script(source=self._get_agent_source())
        self.script.on('message', self.on_message)
        self.script.load()

        if not self.resumed:
            debug_print('Resuming PID `{pid}`'.format(pid=self.spawned_pid))
            self.device.resume(self.spawned_pid)
            #----------------添加下面两行--------------
						time.sleep(1)
            self.resumed = True

使用说明

Objection执行

官方参考文档:

Home

Usage: objection [OPTIONS] COMMAND [ARGS]...

       _   _         _   _
   ___| |_|_|___ ___| |_|_|___ ___
  | . | . | | -_|  _|  _| | . |   |
  |___|___| |___|___|_| |_|___|_|_|
        |___|(object)inject(ion)

       Runtime Mobile Exploration
          by: @leonjza from @sensepost

  By default, communications will happen over USB, unless the --network option
  is provided.

Options:
  -N, --network            Connect using a network connection instead of USB.
  -h, --host TEXT          [default: 127.0.0.1]
  -p, --port INTEGER       [default: 27042]
  -ah, --api-host TEXT     [default: 127.0.0.1]
  -ap, --api-port INTEGER  [default: 8888]
  -g, --gadget TEXT        Name of the Frida Gadget/Process to connect to.
                           [default: Gadget]
  -S, --serial TEXT        A device serial to connect to.
  -d, --debug              Enable debug mode with verbose output. (Includes
                           agent source map in stack traces)
  --help                   Show this message and exit.

Commands:
  api          Start the objection API server in headless mode.
  device-type  Get information about an attached device.
  explore      Start the objection exploration REPL.
  patchapk     Patch an APK with the frida-gadget.so.
  patchipa     Patch an IPA with the FridaGadget dylib.
  run          Run a single objection command.
  signapk      Zipalign and sign an APK with the objection key.
  version      Prints the current version and exists.

执行环境

需要先启动Frida-server并转发端口,具体参考

请添加图片描述
请添加图片描述

附加需要调试的app, 进入交互界面

objection.exe -g com.lalala explore

Objection_第3张图片

调试界面API

输入任意字符,界面会输出可执行的命令以及对应的含义,非常nice;
请添加图片描述

# env

打印所有有关环境的执行目录

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
android heap search instances com.xx.xx.class

//直接调用指定实例下的方法
android heap execute [ins_id] [func_name]

//自定义frida脚本, 执行实例的方法
android heap execute [ins_id]

# android hooking

//列出内存中所有的类
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所有重载,如果有疑问可以看
- -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
//查看任务列表
jobs list

//关闭任务
jobs kill [task_id]

//关闭app的ssl校验
android sslpinning disable

//尝试关闭app的root检测
android root disable

//尝试模拟root环境
android root simulate

漏洞悬赏计划:涂鸦智能安全响应中心(https://src.tuya.com)欢迎白帽子来探索。

你可能感兴趣的:(移动安全,objection,Android)