objection hook

简单说就是把frida客户端的功能使用python封装成工具,一些基本的hook操作可以快速使用命令行实现,如hook java层的函数参数、返回值、调用栈、内存漫游等操的集成

安装

pip3 install objection

如下返回则安装成功

shell # objection version
objection: 1.11.0

使用方法

首先确保frida、frida-server安装成功,且两者版本匹配,在模拟器或真机上将frida-server运行起来后,在pc端运行

objection -g com.xxx.xxx explore

会进入objection终端,可以执行hook命令

常用功能命令

启动相关

#列出手机里安装的所有应用
frida-ps -U
#使用objection注入“xxx”应用
objection -g com.piaoyou.piaoxing explore
#启动objection,同时执行--startup-command指定的命令
objection -g com.piaoyou.piaoxing explore --startup-command "android hooking watch class_method java.io.File.$init  --dump-args"
objection -g com.piaoyou.piaoxing explore -s "android hooking watch class_method java.io.File.$init --dump-args --dump-return"
#启动objection,同时执行-c指定的文件,文件里包含多条objection命令,文件中一行就是一条objection命令
objection -g com.piaoyou.piaoxing explore -c "d:/hook/objection-command.txt"
#启动objection,同时执行-S指定的文件,文件里包含的是frida脚本
objection -g com.piaoyou.piaoxing explore -S "d:/hook/frida-hook.js"

objection -N -h IP地址 -p 端口号 -g 包名 explore    # 指定ip和端口的连接
 
# spawn启动前就Hook某个类
objection -N -h 192.168.1.3 -p 9999 -g 包名 explore --startup-command "android hooking watch class '包名.类名'"
 
# spawn启动前就Hook某个方法打印参数、返回值、函数调用栈
objection -N -h 192.168.1.3 -p 9999 -g 包名 explore --startup-command "android hooking watch class_method '包名.类名.方法' --dump-args --dump-return --dump-backtrace"

内置命令

# Memory 指令
memory list modules									

#枚举当前进程模块
memory list exports [lib_name]							#查看指定模块的导出函数
memory list exports libart.so --json /root/libart.json	#将结果保存到json文件中
memory search --string --offsets-only					#搜索内存
    
# 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

# android heap 指令
android heap search instances com.xx.xx.class	#堆内存中搜索指定类的实例, 可以获取该类的实例id
android heap execute [ins_id] [func_name]		#直接调用指定实例下的方法
android heap evaluate [ins_id]					#自定义frida脚本, 执行实例的方法

# 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					#列出内存中所有的类[search_name]	#在内存中所有已加载的类中搜索包含特定关键词的类
android hooking search methods [search_name]	#在内存中所有已加载的方法中搜索包含特定关键词的方法
android hooking generate simple [class_name]	#直接生成hook代码

# hook方法
android hooking watch class com.xxx.xxx			#hook指定类, 会打印该类下的所有调用
# hook指定方法, 如果有重载会hook所有重载,打印详细信息通过下面参数:
# --dump-args : 打印参数
# --dump-backtrace : 打印调用栈
# --dump-return : 打印返回值
android hooking watch class_method com.xxx.xxx.methodName --dump-args --dump-backtrace --dump-return
android hooking set return_value com.xxx.xxx.methodName false	#设置返回值(只支持bool类型)

# 任务管理器
jobs list			#查看任务列表
jobs kill [task_id]	#关闭任务

# 抓包
android sslpinning disable	#关闭ssl校验

# 执行命令行
android shell_exec [command]

#查看内存中加载的库
memory list modules
#查看库的导出函数
memory list exports libssl.so
#将结果保存到json文件中
memory list exports libart.so --json /root/libart.json  
#搜索是否存在着该类的实例
android heap search instances java.net.HttpURLConnection
#调用实例的方法,0x2526是上一个命令输出的实例的hashcode
android heap execute 0x2526 getPreferenceScreenResId
#在实例上执行js代码,输入以下命令后,会进入一个迷你编辑器环境,输入console.log("evaluate result:"+clazz.getPreferenceScreenResId())这串脚本,按ESC退出编辑器,然后按回车,即会开始执行这串脚本,输出结果
android heap evaluate 0x2526
#列出内存中所有的类
android hooking list classes
#内存中搜索所有的类
android hooking search classes RealCall
#内存中搜索所有的方法
android hooking search methods display
#列出类的所有方法
android hooking list class_methods com.android.org.conscrypt.OpenSSLSocketImpl
#直接生成hook代码,参数没有填上,还是需要自己后续补充
android hooking generate simple com.android.org.conscrypt.OpenSSLSocketImpl
#hook类的所有方法,在使用jobs list命令可以看到objection为我们创建的Hooks数,也就是将com.android.org.conscrypt.OpenSSLSocketImpl类下的所有方法都hook了
android hooking watch com.android.org.conscrypt.OpenSSLSocketImpl
#hook方法的参数、返回值和调用栈
android hooking watch class_method android.bluetooth.BluetoothDevice.getName --dump-args --dump-return --dump-backtrace

#直接将SSL pinning给disable掉
android sslpinning disable
#用File类的构造器
android hooking watch class_method java.io.File.$init --dump-args
#查看内存中加载的os库
memory list modules
#查看库的导出函数
memory list exports libssl.so
#将结果保存到json文件中
memory list exports libart.so --json /root/libart.json  
#导入外部js脚本并执行,frida_hook.js需要上传到pwd输出的目录,或者其他目录
import frida_hook.js

#直接启动activity
android intent launch_activity com.android.settings.DisplaySettings
#查看当前可用的activity
android hooking list activities