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。

 

frida使用

本机安装工具版本为:

  1. Python 3.9.7
  2. frida 15.1.8
  3. 雷电模拟器3.114.0(模拟器测试失败)
  4. 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

  • 只是提供了各种供我们调用,在此基础之上可以实现具体的功能,比如禁用证书绑定之类的脚本,就是使用的各种来组合编写而成。于是有大佬将各种常见、常用的功能整合进一个工具,供我们直接在命令行中使用,这个工具便是。
  • 功能强大,命令众多,而且不用写一行代码,便可实现诸如内存搜索、类和模块搜索、方法打印参数返回值调用栈等常用功能,是一个非常方便的,逆向必备、内存漫游神器。

 

 

几个基本操作:

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

这个命令比较有趣的是用在如果有些设计的不好,可能就直接绕过了密码锁屏等直接进去。

posted @ 2022-04-12 09:35  xyxyxyxyxyxy  阅读(1017)  评论(0编辑  收藏  举报