objection - 基于frida的命令行hook工具食用手册
0x1 介绍&安装Objectionobjection是基于frida的命令行hook工具, 可以让你不写代码, 敲几句命令就可以对java函数的高颗粒度hook, 还支持RPC调用目前只支持Java层的hook, 但是objection有提供插件接口, 可以自己写frida脚本去定义接口比如葫芦娃大佬的脱壳插件, 实名推荐: FRIDA-DEXDump官方仓库: objection安装条
0x1 介绍&安装Objection
objection是基于frida的命令行hook工具, 可以让你不写代码, 敲几句命令就可以对java函数的高颗粒度hook, 还支持RPC调用
目前只支持Java层的hook, 但是objection有提供插件接口, 可以自己写frida脚本去定义接口
比如葫芦娃大佬的脱壳插件, 实名推荐: FRIDA-DEXDump
官方仓库: objection
安装条件
1. python版本 > 3.4
2. pip版本 > 9.0
安装命令
pip3 install objection
安装完成后, 直接输入objection
, 就可以看到食用方法了
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.
[default: False]
-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...
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.
version Prints the current version and exists.
0x2 简单使用
1. 空格键: 忘记命令直接输入空格键, 会有提示与补全
2. help: help [command] 会有详细介绍指定命令的作用与例子
3. jobs: 任务管理系统, 可以方便的查看与删除任务
启动Frida-server并转发端口
adb forward tcp:27034 tcp:27034
附加需要调试的app, 进入交互界面
objection -g [packageName] explore
可以使用该env命令枚举与所讨论的应用程序相关的其他有趣目录: env
com.opera.mini.native on (samsung: 6.0.1) [usb] # env
Name Path
---------------------- ------------------------------------------------------------
filesDirectory /data/user/0/com.opera.mini.native/files
cacheDirectory /data/user/0/com.opera.mini.native/cache
externalCacheDirectory /storage/emulated/0/Android/data/com.opera.mini.native/cache
codeCacheDirectory /data/user/0/com.opera.mini.native/code_cache
obbDir /storage/emulated/0/Android/obb/com.opera.mini.native
packageCodePath /data/app/com.opera.mini.native-1/base.apk
我们可以使用以下file download命令从远程文件系统中下载文件: file download [file] [outfile]
com.opera.mini.native on (samsung: 6.0.1) [usb] # file download fhash.dat fhash.dat
Downloading /data/user/0/com.opera.mini.native/cache/fhash.dat to fhash.dat
可以列出app具有的所有avtivity: android hooking list activities
com.opera.mini.native on (samsung: 6.0.1) [usb] # android hooking list activities
com.facebook.ads.AudienceNetworkActivity
com.google.android.gms.ads.AdActivity
com.google.android.gms.auth.api.signin.internal.SignInHubActivity
com.google.android.gms.common.api.GoogleApiActivity
com.opera.android.AssistActivity
com.opera.android.MiniActivity
com.opera.android.ads.AdmobIntentInterceptor
com.opera.mini.android.Browser
Found 8 classes
启动指定avtivity: android intent launch_activity [class_activity]
com.opera.mini.native on (samsung: 6.0.1) [usb] # android intent launch_activity com.facebook.ads.AudienceNetworkActivity
Launching Activity: com.facebook.ads.AudienceNetworkActivity...
RPC 调用命令: curl -s "http://127.0.0.1:8888/rpc/invoke/androidHookingListActivities"
$ curl -s "http://127.0.0.1:8888/rpc/invoke/androidHookingListActivities"
["com.reddit.frontpage.StartActivity","com.reddit.frontpage.IntroductionActivity", ... snip ...]
- RPC调用执行脚本:`url -X POST -H "Content-Type: text/javascript" http://127.0.0.1:8888/script/runonce -d "@script.js"`
$ cat script.js
{
send(Frida.version);
}
[{"payload":"12.8.0","type":"send"}]
0x3 API介绍
以下只是写了一部分指令和功能, 详细的功能需要合理运用空格和help呦
memcMemory 指令
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]
root
//尝试关闭app的root检测
android root disable
//尝试模拟root环境
android root simulate
ui
//截图
android ui screenshot [image.png]
//设置FLAG_SECURE权限
android ui FLAG_SECURE false
内存漫游
//列出内存中所有的类
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操作
//枚举activity
android hooking list activities
//启动activity
android intent launch_activity [activity_class]
//枚举services
android hooking list services
//启动services
android intent launch_service [services_class]
任务管理器
//查看任务列表
jobs list
//关闭任务
jobs kill [task_id]
关闭 app ssl 校验
android sslpinning disable
监控系统剪贴板
//获取Android剪贴板服务上的句柄并每5秒轮询一次用于数据。 如果发现新数据,与之前的调查不同,则该数据将被转储到屏幕上。
help android clipboard
执行命令
help android shell_exec [command]
插件编写 : objection pluging
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)