本文作者:杉木@涂鸦智能安全实验室
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绕过双进程保护 - 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 Explorationby: @leonjza from @sensepostBy default, communications will happen over USB, unless the --network optionis 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. (Includesagent 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
调试界面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)欢迎白帽子来探索。