frida、Objection插件学习
https://www.python.org/ftp/python/3.9.7/python-3.9.7-amd64.exe
python 3.9.7
https://github.com/frida/frida/
frida-server
https://codechina.csdn.net/explore
国内GitHub镜像库,更新速度有点慢,新版的frida向下兼容frida-server。
本机安装工具版本为:
- Python 3.9.7
- frida 15.1.8
- 雷电模拟器3.114.0(模拟器测试失败)
- pixel 3 XL Android 10
启动frida-server提示未开启,通过排查,使用adb shell连接模拟器getprop ro.product.cpu.abi命令查看后,模拟器为X86架构,非X86-64,所以造成启动失败。
使用命令修改权限为755并启动frida-server
adb shellcd /data/local/tmp/chmod 777 frida-server
./frida-server
端口映射
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
更换frida-server后,通过frida-ps -R指令可以连接。
安装编写的测试demo程序,输入值相加。
hook获取其add参数值,得到参数值,改变其提示结果。
学习编写frida hook脚本:
https://blog.csdn.net/zhy025907/article/details/89512096
java代码相关hook代码中相关部分,达成获取其输入值,改变其提示结果。
com.example.myapplication.MainActivity.add
编写frida hook脚本达成目的,进程名与包名不同,hook一直失败,尝试编译apk
if(Java.available){
Java.perform(function(){
var Class = Java.use("com.example.myapplication.MainActivity");
if (Class != undefined){
console.log('开始hook app');
Class.add.implementation=function(){
var JavaString =Java.use("java.lang.String");
var ret = this.add.apply(this, arguments);
console.log("a1=" + arguments[0]);
console.log("a2=" + arguments[1]);
var ret=this.add(123,123);
console.log("result=",ret);
return ret;
}
}
});
}
通过firda运行 hook脚本,达成hook结果,通过console.log("a1=" + arguments[0]);
console.log("a2=" + arguments[1]);获取输入的值,通过修改var ret=this.add()传入的值,达成修改计算结果。
- frida工具Objection
- 只是提供了各种供我们调用,在此基础之上可以实现具体的功能,比如禁用证书绑定之类的脚本,就是使用的各种来组合编写而成。于是有大佬将各种常见、常用的功能整合进一个工具,供我们直接在命令行中使用,这个工具便是。
- 功能强大,命令众多,而且不用写一行代码,便可实现诸如内存搜索、类和模块搜索、方法打印参数返回值调用栈等常用功能,是一个非常方便的,逆向必备、内存漫游神器。
- 使用pip指令进行安装 python -m pip install objection
- https://blog.csdn.net/song_lee/article/details/108993169https://www.anquanke.com/post/id/197657
几个基本操作:
help指令:在当前命令前加比如,,回车之后会出现当前命令的解释信息;
空格:不知道输入什么就按空格,会有提示出来,上下选择之后再按空格选中,又会有新的提示出来;
jobs:作业系统很好用,建议一定要掌握,可以同时运行多项作业;
使用objection需要在手机上启动frida-sesver,再使用objection注入需要hook的应用
objection -g <包名> 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]
https://www.jianshu.com/p/c443ad5ace9bhttps://blog.csdn.net/freeking101/article/details/107749541
查看当前可用的activity或者service
android hooking list activities/services
直接启动activity或者服务
android intent launch_activity com.android.settings.DisplaySettings
这个命令比较有趣的是用在如果有些设计的不好,可能就直接绕过了密码锁屏等直接进去。
本文来自博客园,作者:xyxyxyxyxyxy,转载请注明原文链接:https://www.cnblogs.com/my1127/p/16133663.html