• 一次不成功的抓包过程


    想搞Android app抓包,简单的方法,已经不起作用,打开charles代理工具,抓不到我的目标app任何请求,搞了两三天,也没成功。
    我的目标APP里,经过apk反编译出来,看到有libflutter.so文件,想着开发商用flutter框架开发的此应用,准备用frida hook技术+postern工具+Charles代理工具,对其进行抓包

    软件版本

    Windows:win 10 专业版 64位
    Python:python-3.12.0
    frida:frida-16.1.4
    frida-server:frida-server-16.1.4-android-x86_64
    adb:34.0.5
    Android模拟器:雷神模拟器
    postern:Postern_3.1.3
    IDA Pro:7.7
    我是mac本,我的Windows系统是安装在Parallels Desktop虚拟机里,建议还是不要整虚拟机了,我自己是mac 本M1芯片,有些软件不兼容,安装一个PD虚拟机,有些功能也会受限制的,比如逆向要用到的工具IDA,在虚拟机里面就启动失败,同样的包,在Windows笔记本上就能使用。

    软件安装

    模拟器安装

    大家推荐使用夜神模拟器,默认开启root,自带adb工具,开始用起来还行,后面用着直接卡死不动,换成雷神模拟器,雷神安装系统证书的时候,又各种权限不足,即时开启了root,也是权限受限,算求拉倒吧,最后换成逍遥模拟器,目前用着没啥问题,直接官网就可以下载,安装好了之后,在设置里看一下,是否开启了root,没开就开启

    adb安装

    下载安装包
    Windows版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip
    Mac版本:https://dl.google.com/android/repository/platform-tools-latest-darwin.zip
    Linux版本:https://dl.google.com/android/repository/platform-tools-latest-linux.zip
    将文件下载下来,解压缩到自定义的安装目录,然后配置一下环境变量,执行以下命令,也看看能不能识别到模拟器:

    adb devices
    
    • 1

    Python安装

    直接在官网下载,下载地址
    在这里插入图片描述
    根据自己的系统版本下载,一般都是64位的,建议不要下载embeddable版本,此版本绿色解压就可以使用,但是缺少一些工具,也需要自己配置环境变量

    Frida安装

    使用Python命令安装

    pip install frida==16.1.4
    pip install frida-tools==16.1.4
    
    • 1
    • 2

    安装完frida-tools之后,在cmd命令行查看一下,frida --version 查看版本。
    安装的时候,frida-tools有可能找不到16.1.4这个版本,也没关系,不指定版本,直接使用命令pip install frida-tools,默认安装到最新版本
    如果安装完成之后,运行frida命令,命名行提示:不是内部或外部命令,也不是可运行的程序,可以使用where frida命令,查看frida安装到哪个目录下了,手动配置一下path环境变量

    Frida-server安装

    • 第一步 下载

    需要和frida的版本一样,下载地址
    在这里插入图片描述
    这4个安装包,具体下载哪个,需要根据自己的CPU版本对应,用下面的命令看一下:

    adb shell getprop ro.product.cpu.abi
    
    • 1

    如果输出是x86,那就直接下载frida-server-16.1.4-android-x86.xz,如果输出是x86_64,那就下载frida-server-16.1.4-android-x86_64.xz
    比如我的是x86,下载frida-server-16.1.4-android-x86.xz,下载完成之后,解压出 frida-server-15.1.0-android-x86。

    • 第二步 上传
      在自己的Windows系统中,进入cmd命令行,执行以下命令,上传到模拟器里的Android系统目录/data/local/tmp
    adb push frida-server-16.1.4-android-x86 /data/local/tmp
    
    • 1
    • 第三步 修改权限
      在自己的Windows系统中,进入cmd命令行,执行命令,连接到模拟器里
    adb shell & adb root
    
    • 1

    如果没报错,就进入到模拟器里了,在接着执行

    su
    cd /data/local/tmp
    chmod +x frida-server-16.1.4-android-x86
    
    • 1
    • 2
    • 3
    • 第四步 修改权限
      运行frida-server,执行以下命令:
    ./frida-server-16.1.4-android-x86
    
    • 1

    没报错,就运行成功,命令行不能退出,退出了,程序就结束,想后台运行在上面命令结尾加一个&符号

    • 第五步 设置端口转发
      在自己的Windows系统中,进入cmd命令行,运行以下命令:
    adb forward tcp:27042 tcp:27042
    adb forward tcp:27043 tcp:27043
    
    • 1
    • 2

    frida和frida-server通信需要用到这2个端口

    • 第六步 验证
      在自己的Windows系统中,进入cmd命令行,运行以下命令:
    frida-ps -U
    
    • 1

    如果列出一堆进程清单,就表示安装成功

    d:\hook>frida-ps -U
     PID  Name
    ----  --------------------------------------------------
    1884  Postern
     169  adbd
     743  android.ext.services
     151  android.hardware.audio@2.0-service
     152  android.hardware.camera.provider@2.4-service
     153  android.hardware.cas@1.0-service
     154  android.hardware.configstore@1.1-service
     155  android.hardware.dumpstate@1.0-service
     156  android.hardware.gnss@1.0-service
     130  android.hardware.keymaster@3.0-service
     ......
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    postern工具安装

    flutter框架在和服务器通信过程中,不会经过Android系统配置的wifi代理,所以在charles代理工具中,看不到APP发起的请求,需要安装postern工具,将请求直接代理到Charles,Postern是Android系统里一款代理/ 虚拟专用网络管理程序,是全局代理工具。
    参考这篇的安装教程 postern安装&配置

    编写Hook脚本

    文件名frida_hook_flutter_ssl.js

    function hook_ssl_verify_result(address)
    {
       Interceptor.attach(address, {
          onEnter: function(args) {
            console.log("Disabling SSL validation")
          },
          onLeave: function(retval)
          {
            console.log("Retval: " + retval)
            retval.replace(0x1); 
          }
       });
    }
    function disablePinning(){
      var address = Module.findBaseAddress('libflutter.so').add(0x5DC3CC)
      hook_ssl_verify_result(address);
    }
    Process.enumerateModules({
        onMatch: function(module){
            console.log('Module name: ' + module.name + " - Base Address: " + module.base.toString());
        }, 
        onComplete: function(){}
    });
    setTimeout(disablePinning, 1000)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    执行脚本

    在自己的Windows系统中,进入cmd命令行,frida客户端执行命令:

    frida -UF -l frida_hook_flutter_ssl.js
    #或者使用
    frida -U -p 3055 -l frida_hook_flutter_ssl.js
    #或者使用
    frida -U -f com.*.* -l frida_hook_flutter_ssl.js
    
    • 1
    • 2
    • 3
    • 4
    • 5

    -U参数表示frida链接到设备,可以理解为进入到Android后台,
    -p参数表示Android系统中运行的进程ID号,通过上面的frida-ps -U命令,可以查看APP的进程ID,第一列就是
    -l参数表示,要执行的脚本
    -UF表示Android系统当前最前端正在运行的App
    -f 表示注入模式,

    #spwan模式,会重启app
    frida -U -f com.piao.piaoxing -l d:/hook/objection_hooking_watch_class.txt -o d:/hook/hook.log
    #attach模式,不会重启app
    frida -U com.piao.piaoxing -l d:/hook/objection_hooking_watch_class.txt -o d:/hook/hook.log
    
    • 1
    • 2
    • 3
    • 4

    包名可以使用下面命令查看,前提是先在模拟器中把目标APP打开

    adb shell "dumpsys window | grep mCurrentFocus"
    
    • 1

    上面命令执行结果
    mCurrentFocus=Window{6af66e7 u0 com../com...main.FlutterWrapperActivity}

    执行完上面的脚本,报错:

    [ASUS I003DD:😗** ]-> TypeError: cannot read property ‘add’ of null
    at disablePinning (d:\hook\frida_hook_flutter_ssl.js:18)
    at apply (native)
    at (frida/runtime/core.js:51)

    网上搜索了一下,也没找到太多人遇到这个问题,据说是,app安装在模拟器里,没有去加载libflutter.so库,通过上面的日志输出,也能看到结果,确实没有去加载libflutter.so库,所以脚本就报’add’ of null,难道要刷机的路线,真机获取root权限,在用这套方案抓包吗?

    逆向分析

    上面脚本里这个地址add(0x5DC3CC),怎么得来的,通过开发工具IDA_Pro_7.7,反编译os库检索出来的。具体参考这个方法,内容不一样没关系,但是过程差不多,就能找出这个地址:
    flutter框架app抓包
    libflutter.so库要从手机里导出来,使用adb命令行工具连接手机导出

    成功的抓包记录在下一篇《Frida抓包flutter app过程记录

    参考文档:
    对flutter开发的某app逆向分析
    Flutter 逆向初探
    使用frida破解flutter APP证书检测抓包
    一种基于Frida和Postern的针对Flutter抓包的方法

  • 相关阅读:
    相机标定:现实到虚拟世界的映射关系
    K8S-PV与PVC
    kubekey2.2.1 kubernetes1.23.7离线包制作+harbor部暑并上传镜像
    基于c++和asio的网络编程框架asio2教程使用篇:使用rpc模块编写rpc server和rpc client
    1. Tailwind CSS 简介
    基于算术优化算法优化概率神经网络PNN的分类预测 - 附代码
    微服务 Spring Cloud 2,一文讲透微服务核心架构(注册中心、服务通信、服务监控、服务追踪、服务治理)
    【34-业务开发-基础业务-属性组和基本属性-属性组和基本属性建立关联-属性组和基本属性解除关联-未关联属性查询-确认新增】
    zookeeper应用之分布式锁
    299. 猜数字游戏 Python
  • 原文地址:https://blog.csdn.net/lihuayong/article/details/133974654